4. Alarm 报文结构:S5F1 – S5F4 详解
SECS/GEM 协议中,Alarm 报警机制的核心交互由 S5F1、S5F2、S5F3、S5F4 四条报文完成。前两条(S5F1 / S5F2)负责报警状态的主动上报与确认;后两条(S5F3 / S5F4)负责报警使能/禁用的控制与确认。理解这四组报文的格式、字段含义及交互时序,是工程实施中正确集成 Alarm 功能的基础。
4.1 S5F1 Alarm Report Send(报警报告发送)
方向:设备(Equipment)→ 主机(Host)
触发条件:设备检测到报警状态发生变化(报警产生或报警清除)时主动发送。
报文结构(Stream 5, Function 1):
S5F1
<L [2]>
<L [2]>
<U4 ALID> // 报警ID,唯一标识一个报警
<U1 ALCD> // 报警码:1=报警产生,2=报警清除
>
<L [2]>
<U4 ALID>
<U1 ALCD>
>
// ... 可包含多个报警项
>
| 字段 | 类型 | 长度 | 说明 |
|---|---|---|---|
| ALID | U4 | 4 字节 | 报警编号,范围 1 – 65535,由设备定义 |
| ALCD | U1 | 1 字节 | 报警状态码: 1 = 报警产生(Alarm Set) 2 = 报警清除(Alarm Clear) |
工程要点:ALID 必须在设备端预先定义并保持唯一。ALCD 只允许 1 或 2,其他值将被主机视为非法。建议设备在报警产生时立即发送 S5F1,避免因延迟导致主机状态不同步。
4.2 S5F2 Alarm Report Acknowledge(报警报告确认)
方向:主机(Host)→ 设备(Equipment)
触发条件:主机收到 S5F1 后,必须回复 S5F2 以确认接收。
报文结构(Stream 5, Function 2):
S5F2
<L [2]>
<U4 ALID> // 对应 S5F1 中的 ALID
<U1 ACKC5> // 确认码:0=接受,1=拒绝
>
| 字段 | 类型 | 长度 | 说明 |
|---|---|---|---|
| ALID | U4 | 4 字节 | 回显 S5F1 中的报警 ID |
| ACKC5 | U1 | 1 字节 | 确认码: 0 = 接受(Acknowledge) 1 = 拒绝(Error) |
常见实施错误:部分设备在收到 S5F2 后不检查 ACKC5 值,导致主机拒绝的报警被设备忽略。正确的做法是:当 ACKC5 = 1 时,设备应记录错误并可选地重发 S5F1。
4.3 S5F3 Enable/Disable Alarm Send(使能/禁用报警发送)
方向:主机(Host)→ 设备(Equipment)
触发条件:主机需要控制设备是否上报某个或某组报警。
报文结构(Stream 5, Function 3):
S5F3
<L [2]>
<U1 ALED> // 使能/禁用标志:0=禁用,1=使能
<L [n]> // 报警 ID 列表
<U4 ALID> // 报警 ID 1
<U4 ALID> // 报警 ID 2
// ...
>
>
| 字段 | 类型 | 长度 | 说明 |
|---|---|---|---|
| ALED | U1 | 1 字节 | 0 = 禁用(Disable) 1 = 使能(Enable) |
| ALID List | L | 可变 | 一个或多个 U4 类型的报警 ID |
设计原则:主机可以通过 S5F3 批量控制报警。例如,在设备维护期间,主机可发送 ALED=0 并列出所有维护相关 ALID,临时禁用报警,避免误报。
4.4 S5F4 Enable/Disable Alarm Acknowledge(使能/禁用报警确认)
方向:设备(Equipment)→ 主机(Host)
触发条件:设备收到 S5F3 后,必须回复 S5F4 以确认操作结果。
报文结构(Stream 5, Function 4):
S5F4
<L [2]>
<U1 ALED> // 回显 S5F3 中的 ALED
<U1 ACKC5> // 确认码:0=接受,1=拒绝
>
| 字段 | 类型 | 长度 | 说明 |
|---|---|---|---|
| ALED | U1 | 1 字节 | 回显 S5F3 中的使能/禁用标志 |
| ACKC5 | U1 | 1 字节 | 确认码: 0 = 接受(Acknowledge) 1 = 拒绝(Error) |
实施建议:设备在回复 S5F4 前,应实际更新内部报警使能状态。如果 ALID 列表中存在不存在的报警 ID,设备应返回 ACKC5=1,并在日志中记录具体原因。
4.5 Alarm 报文交互流程
下图展示了 S5F1 – S5F4 在典型报警场景中的完整交互时序:
4.6 报文对比总结
| 报文 | 方向 | 触发方 | 核心字段 | 典型场景 |
|---|---|---|---|---|
| S5F1 | 设备 → 主机 | 设备 | ALID, ALCD | 报警产生/清除时主动上报 |
| S5F2 | 主机 → 设备 | 主机 | ALID, ACKC5 | 确认收到报警报告 |
| S5F3 | 主机 → 设备 | 主机 | ALED, ALID List | 使能或禁用指定报警 |
| S5F4 | 设备 → 主机 | 设备 | ALED, ACKC5 | 确认使能/禁用操作结果 |
工程实施检查清单:
✅ 设备端 ALID 定义表是否完整且唯一?
✅ 设备是否在报警状态变化时立即发送 S5F1?
✅ 主机是否在收到 S5F1 后 2 秒内回复 S5F2?
✅ 设备是否在收到 S5F3 后更新内部状态并回复 S5F4?
✅ 双方是否处理了 ACKC5 = 1(拒绝)的情况?
✅ 设备端 ALID 定义表是否完整且唯一?
✅ 设备是否在报警状态变化时立即发送 S5F1?
✅ 主机是否在收到 S5F1 后 2 秒内回复 S5F2?
✅ 设备是否在收到 S5F3 后更新内部状态并回复 S5F4?
✅ 双方是否处理了 ACKC5 = 1(拒绝)的情况?