4. CEID 生命周期:从定义、注册、激活到注销的完整流程
CEID(采集事件ID)的生命周期是 SECS/GEM 动态事件管理的核心脉络。一个 CEID 从诞生到消亡,需要经历 定义 → 注册 → 激活 → 注销 四个阶段。每个阶段都对应特定的 SxFy 报文交互和主机/设备端状态变更。理解这一完整流程,是掌握动态事件管理的基础。
核心要点: CEID 生命周期是“双向握手”的过程。主机(Host)发起请求,设备(Equipment)响应并维护状态。任何阶段的失败都会导致事件采集链路中断。
4.1 阶段一:CEID 定义
CEID 定义是生命周期的起点。设备厂商在设备端预先定义好所有可能的事件 ID,包括事件名称、描述、关联的数据变量(VID)等元信息。主机通过 S02F33(报告请求) 查询设备支持的 CEID 列表,设备以 S02F34 响应。
| 报文 | 方向 | 功能 | 关键参数 |
|---|---|---|---|
| S02F33 | Host → Eqp | 请求 CEID 列表 | DATAID(通常为 0 表示查询全部) |
| S02F34 | Eqp → Host | 返回 CEID 定义 | CEID、CE_NAME、变量列表(VIDs) |
最佳实践: 设备上电或通信建立后,主机应首先执行 S02F33 查询,获取设备当前支持的 CEID 全集。这为后续的注册和激活提供“白名单”依据。
4.2 阶段二:CEID 注册
注册是将主机感兴趣的 CEID 告知设备的过程。主机发送 S02F35(链接事件报告) 报文,将 CEID 与 Report ID 绑定。设备收到后,在内部维护一张“CEID → Report”的映射表,并以 S02F36 确认。
// S02F35 报文示例(注册 CEID 100 和 101)
// 格式:L{ DATAID, L{ CEID, L{ REPORT_ID } } }
S02F35 W
<L [2]
<U4 1> // DATAID = 1
<L [2]
<L [2]
<U4 100> // CEID 100
<L [1]
<U4 10> // 绑定 Report ID 10
>
>
<L [2]
<U4 101> // CEID 101
<L [1]
<U4 11> // 绑定 Report ID 11
>
>
>
>
注意: 注册时 CEID 必须已经定义(即设备返回过 S02F34)。如果注册未定义的 CEID,设备将返回 S02F36 并携带错误码(如
CEID_NOT_DEFINED)。
4.3 阶段三:CEID 激活
激活是让 CEID 进入“可触发”状态的关键步骤。主机发送 S02F37(使能/禁用事件报告) 报文,将 CEID 的状态设置为“使能”。设备收到后,开始监控该 CEID 对应的设备状态变化,一旦条件满足即主动上报 S06F11(事件报告)。
| 报文 | 方向 | 功能 | CEID 状态变化 |
|---|---|---|---|
| S02F37 (ENABLE) | Host → Eqp | 激活指定 CEID | 已注册 → 已激活 |
| S02F37 (DISABLE) | Host → Eqp | 停用指定 CEID | 已激活 → 已注册(未激活) |
| S02F38 | Eqp → Host | 确认状态变更 | 返回 HCACK |
4.4 阶段四:CEID 注销
注销是生命周期的终点。当主机不再需要某个 CEID 时,发送 S02F35 报文,但 不包含该 CEID(即从注册列表中移除)。设备收到后,解除 CEID 与 Report 的绑定,并停止事件监控。设备以 S02F36 确认注销成功。
注销 vs 停用: 停用(DISABLE)只是暂停事件上报,CEID 仍处于“已注册”状态;注销则是彻底删除注册关系,CEID 回到“已定义(未注册)”状态。下次使用需要重新注册。
4.5 生命周期状态机总览
下表总结了 CEID 在生命周期各阶段的状态转换及对应的报文操作:
| 当前状态 | 触发操作 | 报文 | 下一状态 | 设备行为 |
|---|---|---|---|---|
| 未定义 | 设备初始化 | — | 已定义 | 加载 CEID 配置表 |
| 已定义 | 注册 | S02F35 | 已注册 | 建立 CEID→Report 映射 |
| 已注册 | 激活 | S02F37 (ENABLE) | 已激活 | 开始监控事件条件 |
| 已激活 | 停用 | S02F37 (DISABLE) | 已注册 | 停止监控,保留映射 |
| 已注册 | 注销 | S02F35 (移除) | 已定义 | 删除映射关系 |
实战建议: 在开发调试阶段,建议主机维护一个本地 CEID 状态缓存,与设备端状态定期同步(通过 S02F33 查询)。这可以避免因网络异常导致的状态不一致问题。