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 之间的三层关联结构:

CEID-Report-VID 三层关系结构图 CEID → Report → VID 三层关联模型 CEID 1001 工艺完成事件 Report ID 1 工艺主报告 Report ID 2 工艺详细报告 Report ID 3 报警报告 VID 101 温度 VID 102 压力 VID 103 时间戳 VID 201 报警码 VID 102 和 VID 103 被 Report 1 和 Report 2 复用

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 的完整时序如下:

CEID 触发数据流时序图 CEID 触发 → Report 上报 → Host 接收 数据流 设备端(Equipment) CEID 触发 采集 VID 值 组装 Report Host 接收 数据流说明 CEID 触发 → 设备采集所有关联 VID 的当前值 → 按 Report 定义组装成 S6F11 消息 → 发送给 Host

3.7 动态管理中的关键操作

  1. 注册 VID:通过 S2F17 消息将新变量加入设备变量表。
  2. 定义 Report:通过 S2F33 消息创建 Report 并指定包含的 VID 列表。
  3. Link 绑定:通过 S2F35 消息将 Report 与 CEID 关联。
  4. 启用/禁用:通过 S2F37 消息控制 CEID 的采集开关。
  5. 注销清理:先解除 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”顺序操作