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 在典型报警场景中的完整交互时序:

Alarm 报文交互流程(S5F1 – S5F4) 主机 (Host) 设备 (Equipment) 报警产生/清除 S5F1 Alarm Report Send 处理 S5F1 S5F2 Alarm Report Ack 发送使能/禁用命令 S5F3 Enable/Disable Send 更新使能状态 S5F4 Enable/Disable Ack 交互要点: 1. S5F1 和 S5F2 成对出现,主机必须回复 S5F2 确认报警接收。 2. S5F3 和 S5F4 成对出现,设备必须回复 S5F4 确认使能/禁用操作。 3. 任何一方超时未回复,应触发通信错误处理流程。

4.6 报文对比总结

报文 方向 触发方 核心字段 典型场景
S5F1 设备 → 主机 设备 ALID, ALCD 报警产生/清除时主动上报
S5F2 主机 → 设备 主机 ALID, ACKC5 确认收到报警报告
S5F3 主机 → 设备 主机 ALED, ALID List 使能或禁用指定报警
S5F4 设备 → 主机 设备 ALED, ACKC5 确认使能/禁用操作结果
工程实施检查清单:
✅ 设备端 ALID 定义表是否完整且唯一?
✅ 设备是否在报警状态变化时立即发送 S5F1?
✅ 主机是否在收到 S5F1 后 2 秒内回复 S5F2?
✅ 设备是否在收到 S5F3 后更新内部状态并回复 S5F4?
✅ 双方是否处理了 ACKC5 = 1(拒绝)的情况?