3. Alarm状态机模型:Alarm的激活(Set)、清除(Clear)与恢复(Recover)状态转换图
在SECS/GEM协议中,Alarm(报警)并非简单的“发生”与“消失”两种状态。为了精确描述设备从异常发生到完全恢复的完整生命周期,GEM标准定义了一个三态状态机模型。理解这个模型是正确实现Alarm上报、清除与恢复逻辑的核心前提。
3.1 Alarm三态定义
每个Alarm ID在设备内部都维护一个逻辑状态机。该状态机由以下三种状态组成:
| 状态 | 英文术语 | 描述 | 典型触发条件 |
|---|---|---|---|
| 未激活 | Inactive | 设备处于正常状态,该报警条件不成立。这是所有Alarm的初始状态。 | 设备上电初始化、报警条件消失 |
| 已激活 | Set / Active | 设备检测到异常条件,报警被触发。此时设备可能处于降级运行或停机状态。 | 传感器超限、硬件故障、软件异常 |
| 已恢复 | Recovered | 异常条件已消失,但Host尚未确认该报警已被操作人员处理或知晓。这是一个“待确认”的中间状态。 | 异常条件消失、操作员复位 |
关键概念:“已恢复”状态是GEM协议区别于普通报警系统的核心特征。它强制要求Host端对报警的解除进行显式确认,确保报警事件被完整记录和闭环管理,避免因报警自动消失而导致维护记录缺失。
3.2 Alarm状态转换图
下图展示了Alarm在三种状态之间的完整转换路径。每个转换都对应一个特定的SECS消息事件。
3.3 状态转换与SECS消息映射
每个状态转换都对应一个特定的SECS-II消息流。下表列出了核心的转换事件及其对应的消息ID:
| 转换路径 | 触发角色 | SECS消息 | 方向 | 说明 |
|---|---|---|---|---|
| 未激活 → 已激活 | 设备(EQ) | S5F1 (Alarm Report Send) | EQ → Host | 设备主动上报报警发生,包含Alarm ID、严重等级和文本描述 |
| 已激活 → 未激活 | 设备(EQ) | S5F3 (Enable/Disable Alarm Send) | EQ → Host | 设备直接清除报警,不经过Recover状态。通常用于非关键报警或自动恢复场景 |
| 已激活 → 已恢复 | 设备(EQ) | S5F1 (Alarm Report Send) | EQ → Host | 设备再次发送S5F1,但ALED(报警状态位)标记为“Recovered” |
| 已恢复 → 未激活 | 主机(Host) | S5F5 (Alarm Acknowledge Send) | Host → EQ | Host发送确认消息,设备将Alarm状态置为Inactive |
| 已恢复 → 已激活 | 设备(EQ) | S5F1 (Alarm Report Send) | EQ → Host | 在Recovered状态下,若异常条件再次满足,设备重新上报Set状态 |
3.4 典型流程场景分析
根据实际应用场景,Alarm状态机通常表现为以下三种典型流程:
场景一:标准报警与恢复流程(推荐)
- Set:设备检测到异常(如温度超限),发送S5F1,ALED=1(Set),状态进入已激活。
- Recover:异常条件消失(温度回落),设备自动发送S5F1,ALED=2(Recovered),状态进入已恢复。此时设备功能可能已恢复正常,但报警记录仍处于“待确认”状态。
- Clear:Host操作员确认报警并执行确认操作,Host发送S5F5,设备将状态置为未激活。
最佳实践:对于需要完整审计追踪的关键报警(如安全门打开、真空丢失),强烈建议使用“Set → Recovered → Clear”三态流程。这可以确保每次报警的解除都经过Host的显式确认,形成完整的报警生命周期记录。
场景二:直接清除流程(简化)
- Set:设备检测到异常,发送S5F1,状态进入已激活。
- Clear:异常条件消失后,设备直接发送S5F3,状态回到未激活。此过程不经过Recovered状态,Host也不会收到恢复确认请求。
注意事项:直接清除流程适用于低优先级或自动恢复的报警(如短暂通信超时、瞬时抖动)。但需谨慎使用,因为Host端将无法区分“报警已自动恢复”和“报警从未发生过”,可能导致维护记录不完整。
场景三:条件反复与重入
- 设备处于已恢复状态,等待Host确认。
- 在Host尚未发送S5F5之前,异常条件再次出现(如温度再次超限)。
- 设备重新发送S5F1,ALED=1(Set),状态从已恢复回到已激活。
- 此行为符合GEM规范,设备无需等待Host确认即可重新激活报警。
3.5 Alarm状态机实现要点
- 状态持久化:设备在断电或重启后,所有Alarm应默认回到未激活状态。如果报警条件在重启后仍然存在,设备应重新发送S5F1。
- 消息去重:设备应避免在状态未改变时重复发送相同的S5F1消息。例如,如果Alarm已经处于已激活状态,设备不应再次发送Set消息,除非状态发生了转换。
- 超时处理:如果Host长时间未对Recovered状态的Alarm发送S5F5确认,设备应保持该状态不变。GEM协议未定义超时机制,但建议设备在本地维护一个“待确认报警列表”,供操作员查看。
- 并发报警:多个Alarm ID各自独立维护自己的状态机。一个Alarm的状态转换不影响其他Alarm的状态。