3、事件报告与数据变量:事件报告(Report)、数据变量(VID/Data Variable)的关系
在 SECS/GEM 协议中,事件报告(Report)与数据变量(Data Variable / VID)是采集事件(CEID)动态管理的核心数据载体。理解两者的关系,是正确配置事件报告、实现高效数据采集的前提。
3.1 核心概念定义
| 概念 | 英文全称 | 说明 |
|---|---|---|
| 数据变量(VID) | Data Variable / Variable ID | 设备端可被采集的单个数据点,如温度、压力、状态值。每个变量有唯一的 VID 编号。 |
| 事件报告(Report) | Report / Report ID | 一组数据变量的集合,当关联的 CEID 触发时,该报告内的所有 VID 值被一次性上报。 |
| 采集事件(CEID) | Collection Event ID | 设备端发生的特定状态变化或动作完成信号,用于触发报告的上报。 |
关键记忆点:VID 是“数据”,Report 是“数据包”,CEID 是“触发信号”。三者通过链路(Link)绑定,形成完整的采集链路。
3.2 关系模型:一对多与多对多
事件报告与数据变量之间并非简单的线性关系,而是典型的多对多关系模型:
- 一个 Report 可以包含多个 VID:例如,一个“工艺完成报告”可以同时包含温度(VID=101)、压力(VID=102)、时间戳(VID=103)。
- 一个 VID 可以被多个 Report 引用:例如,温度变量(VID=101)既可以出现在“工艺报告”中,也可以出现在“报警报告”中。
- 一个 CEID 可以关联多个 Report:当事件触发时,所有关联的 Report 都会被发送。
架构原则:这种多对多设计使得数据复用性极高,避免为每个事件重复定义相同的数据变量集合,降低配置复杂度。
3.3 关系结构图
下图展示了 CEID、Report、VID 之间的三层关联结构:
3.4 数据变量(VID)的注册与引用
在动态管理场景中,VID 的注册是 Report 配置的前提。每个 VID 必须先在设备端定义并注册到主机(Host)的变量表中,才能被 Report 引用。
常见错误:如果 Report 中引用了未注册的 VID,设备会返回错误码
0x0B(Invalid VID),导致整个 Report 配置失败。因此,动态注册时务必先注册 VID,再配置 Report。
VID 注册示例(S2F17 消息)
S2F17 W
<L [3]
<L [2] /* 第一组变量 */
<U2 101> /* VID */
<A "Temperature"> /* 变量名称 */
>
<L [2] /* 第二组变量 */
<U2 102>
<A "Pressure">
>
<L [2] /* 第三组变量 */
<U2 103>
<A "Timestamp">
>
>
3.5 Report 的组成与配置
一个 Report 由 Report ID 和 VID 列表 组成。配置时,通过 S2F33 消息将 Report 与 CEID 关联(Link)。
| 字段 | 类型 | 说明 |
|---|---|---|
| RPTID | U2 / U4 | 报告唯一标识符,由主机分配 |
| VID 列表 | List of U2/U4 | 该报告包含的所有数据变量 ID |
| 关联 CEID | U2 / U4 | 通过 Link 命令绑定到具体事件 |
Report 配置示例(S2F33 消息)
S2F33 W
<L [2]
<L [2] /* 数据变量定义 */
<L [2]
<U2 101>
<A "Temperature">
>
<L [2]
<U2 102>
<A "Pressure">
>
>
<L [2] /* Report 定义 */
<L [2]
<U2 1> /* Report ID = 1 */
<L [2]
<U2 101> /* 包含 VID 101 */
<U2 102> /* 包含 VID 102 */
>
>
<L [2]
<U2 2> /* Report ID = 2 */
<L [1]
<U2 103> /* 包含 VID 103 */
>
>
>
>
3.6 数据流时序图
当 CEID 触发时,数据从 VID 经过 Report 流向 Host 的完整时序如下:
3.7 动态管理中的关键操作
- 注册 VID:通过 S2F17 消息将新变量加入设备变量表。
- 定义 Report:通过 S2F33 消息创建 Report 并指定包含的 VID 列表。
- Link 绑定:通过 S2F35 消息将 Report 与 CEID 关联。
- 启用/禁用:通过 S2F37 消息控制 CEID 的采集开关。
- 注销清理:先解除 Link,再删除 Report,最后注销 VID(如有必要)。
最佳实践:在动态注册时,建议先批量注册所有可能用到的 VID,再按业务需求动态组合 Report。这样可以减少后续因 VID 缺失导致的配置失败。
3.8 常见问题与避坑
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Report 配置失败,返回 0x0B | Report 中引用了未注册的 VID | 先通过 S2F17 注册所有 VID,再配置 Report |
| CEID 触发但无数据上报 | Report 未正确 Link 到 CEID | 检查 S2F35 的 Link 配置,确认 RPTID 与 CEID 绑定 |
| 上报数据包含无效值 | VID 在采集时刻未就绪 | 确保 VID 在 CEID 触发前已完成初始化 |
| 注销时残留引用 | 先删除了 VID,但 Report 仍引用 | 严格按“解 Link → 删 Report → 注销 VID”顺序操作 |