3. Alarm上报流程:设备端触发Alarm → 发送S5F1 → Host回复S5F2的完整握手流程

Alarm上报是SECS/GEM协议中设备向Host主动报告异常状态的核心机制。当设备检测到硬件故障、工艺参数越限或安全门打开等异常事件时,必须按照标准握手流程完成Alarm上报,确保Host端准确记录并响应。本章详细拆解从设备触发Alarm到Host确认的完整交互过程。

3.1 Alarm上报的触发条件与消息结构

设备端Alarm的触发通常由设备内部的状态机或硬件中断驱动。触发后,设备需要构造一条标准的S5F1消息(Alarm Report Send),该消息包含Alarm的标识符、严重等级以及当前状态。

消息方向 Stream/Function 消息名称 描述
设备 → Host S5F1 Alarm Report Send 设备主动上报Alarm ID、Alarm等级(1/2/3)及当前状态(Set/Clear)
Host → 设备 S5F2 Alarm Report Acknowledge Host确认收到Alarm,返回ACK/NAK

S5F1消息的SECS-II数据格式如下:

<L 3>          -- 列表长度3
  <U2 123>      -- ALID: Alarm唯一标识符 (0-65535)
  <U1 1>        -- ALCD: Alarm等级 (1=Critical, 2=Major, 3=Minor)
  <BOOLEAN TRUE> -- ALST: Alarm状态 (TRUE=Set, FALSE=Clear)
工程提示:ALID的分配应在设备配置阶段与Host协商一致,避免重复或未注册的Alarm ID导致Host端无法正确映射告警文本。建议在设备EEPROM或配置文件中维护ALID与告警描述的映射表。

3.2 完整握手流程步骤

Alarm上报的握手流程遵循“请求-确认”模式,确保消息的可靠传递。以下为设备端触发Alarm到Host回复S5F2的完整步骤:

  1. 设备内部检测异常:设备传感器或状态机检测到异常条件(如温度超限、门互锁打开)。
  2. 构造S5F1消息:设备根据异常类型填充ALID、ALCD、ALST字段,并将消息放入发送队列。
  3. 发送S5F1:设备通过底层TCP/IP或RS-232连接将消息发送至Host。
  4. Host接收并解析:Host的SECS/GEM通信层接收S5F1,解析ALID并查找对应的告警配置。
  5. Host处理Alarm:Host应用层记录告警、触发UI显示或执行自动响应逻辑。
  6. Host回复S5F2:Host构造S5F2消息,包含ACKC6(确认码)字段,返回给设备。
  7. 设备接收S5F2:设备检查ACKC6值,确认Host已成功接收Alarm。
Alarm上报完整握手流程 (S5F1 ↔ S5F2) 设备端 (Equipment) Host端 ① 检测异常事件 (传感器/状态机) ② 构造S5F1消息 (ALID/ALCD/ALST) ③ 发送S5F1 (TCP/IP发送队列) S5F1 Alarm Report Send ④ 接收并解析S5F1 (通信层解析ALID) ⑤ 处理Alarm (记录/UI/自动响应) ⑥ 构造S5F2回复 (ACKC6确认码) S5F2 Alarm Report Acknowledge ⑦ 接收S5F2 (检查ACKC6) 说明:若设备在超时时间内未收到S5F2,应重发S5F1(最多重试3次),超时时间建议设为5秒。

3.3 S5F2确认码(ACKC6)详解

Host在S5F2消息中返回的ACKC6字段决定了设备下一步的行为。ACKC6是一个单字节无符号整数,其定义如下:

ACKC6值 含义 设备端处理动作
0 接受 (Accepted) Alarm上报成功,清除重试计数器
1 拒绝 - ALID未知 (Unknown ALID) 记录错误日志,检查ALID配置是否与Host同步
2 拒绝 - ALID当前不可用 (ALID Not Available) 等待Host就绪后重试,或触发设备维护流程
3-63 保留 (Reserved for future use) 按厂商自定义处理,通常视为协议错误
避坑指南:在实际项目中,部分Host实现可能返回非标准ACKC6值(如255)。设备端应具备容错逻辑:对于未定义的ACKC6值,默认按“拒绝”处理并记录原始字节,避免设备因未知值而陷入死循环。

3.4 Alarm Set与Alarm Clear的区别

Alarm状态(ALST)分为Set和Clear两种,设备在触发和解除Alarm时都需要上报。两者的处理逻辑存在差异:

  • Alarm Set (ALST=TRUE):设备检测到异常首次发生,立即发送S5F1。Host收到后应触发告警通知(如声光报警、E-mail通知)。
  • Alarm Clear (ALST=FALSE):设备检测到异常条件消失(如温度恢复正常),发送S5F1通知Host告警解除。Host收到后应清除告警状态,关闭通知。

设备必须确保Alarm Set和Clear成对出现,避免出现“只Set不Clear”导致Host端告警堆积。

3.5 超时与重试机制

网络抖动或Host繁忙可能导致S5F2丢失。设备端必须实现超时重试逻辑,保证Alarm上报的可靠性。

参数 推荐值 说明
T3超时 (Reply Timeout) 5秒 设备发送S5F1后等待S5F2的最大时间
最大重试次数 3次 超过后标记为“Alarm上报失败”,触发本地告警
重试间隔 2秒 每次重试之间的等待时间,避免网络风暴
工程实践:建议在设备端维护一个Alarm重试队列,将未收到S5F2的Alarm消息暂存,按优先级排序重试。同时记录重试次数到系统日志,便于运维人员排查网络问题。

3.6 常见异常场景与处理策略

在实际部署中,Alarm上报可能遇到多种异常情况。以下列出典型场景及推荐处理策略:

  • 场景一:S5F2超时未收到 → 设备重发S5F1,最多3次;若仍失败,将Alarm写入本地非易失存储,待连接恢复后补报。
  • 场景二:Host返回ACKC6=1 (ALID未知) → 设备立即停止该ALID的上报,并触发配置同步流程,请求Host下发最新的ALID映射表。
  • 场景三:设备与Host连接中断 → 设备缓存所有Alarm事件,连接恢复后按时间戳顺序补报,避免丢失关键告警。
  • 场景四:Alarm风暴(短时间内大量Alarm触发) → 设备端实现Alarm去重与限流,相同ALID在1秒内只上报一次,防止消息队列溢出。
Alarm上报异常处理决策树 发送S5F1 收到S5F2? 检查ACKC6 ACKC6=0: 成功结束 ACKC6≠0: 记录错误 超时未收到 重试次数 < 3? 是: 重发S5F1 否: 标记上报失败

3.7 工程最佳实践总结

  • ALID管理:在设备固件中固化ALID与告警文本的映射表,并通过S2F43/F44(动态事件配置)与Host同步,避免硬编码。
  • 日志记录:每次Alarm上报(包括重试)都记录时间戳、ALID、ALCD、ALST、ACKC6及重试次数,便于事后审计。
  • 测试验证:使用SECS/GEM模拟器(如SECSMon或自研工具)模拟Host返回各种ACKC6值,验证设备端的异常处理逻辑是否健壮。
  • 性能考量:Alarm上报应使用独立的通信线程或队列,避免阻塞正常的设备状态上报(如S6F11数据收集)。
推荐阅读:SEMI E5 (SECS-II) 标准第5.5节“Alarm Reporting”以及SEMI E30 (GEM) 标准第7.3节“Alarm Management”提供了Alarm上报的完整规范定义,建议作为参考手册随时查阅。