3. SECS/GEM 消息结构:Message Header、Data Item 与 Stream/Function

SECS/GEM 协议的核心是结构化的消息交换。每一笔通信都遵循严格的消息格式,由 Message Header(消息头)、Data Item(数据项) 以及 Stream/Function(流/功能码) 三部分构成。理解这三者的关系是诊断通信异常、配置防火墙规则的基础。

核心要点: Message Header 负责路由与标识,Stream/Function 定义消息的“动词”与“名词”,Data Item 承载具体的工艺参数。三者缺一不可。

3.1 Message Header(消息头)结构

每个 SECS 消息都以一个固定长度的 Header 开头,长度为 10 个字节(SECS-I)或 4 个字节(HSMS)。在 TCP/IP 环境中(HSMS),Header 为 4 字节,但在逻辑上仍包含以下关键字段:

字段名称 长度(字节) 说明 调试关注点
Session ID(设备ID) 2 标识通信的设备或会话。通常设备 ID 为 0 或 1。 防火墙规则中常需放行特定 Session ID 的流量;ID 不匹配会导致消息被丢弃。
Message ID(消息ID) 2 由 Stream 和 Function 编码组成,高字节为 Stream,低字节为 Function。 用于识别消息类型;防火墙可基于此 ID 过滤特定 Stream/Function。
System Bytes(系统字节) 4 发送方生成的唯一事务标识,用于请求-应答配对。 超时重传时,System Bytes 必须保持一致;防火墙日志中可追踪事务流。
实战提示: 在抓包分析中,重点关注 System Bytes 是否成对出现。如果发现大量孤立的请求(无对应应答),通常意味着防火墙拦截了回程报文或设备端超时。
SECS/GEM Message Header 结构(HSMS 4字节逻辑视图) Session ID 2 Bytes Message ID 2 Bytes System Bytes 4 Bytes 总长度:10 Bytes(SECS-I) / 4 Bytes(HSMS逻辑头)

3.2 Stream / Function(流/功能码)

Stream 和 Function 共同构成了 SECS 消息的“语义骨架”:

  • Stream(流):定义消息的类别或主题。例如 Stream 1 用于设备状态与控制,Stream 2 用于设备数据收集。
  • Function(功能码):定义具体的操作。例如 Function 1 通常为“请求”,Function 2 为“应答”。

常见的 Stream/Function 组合示例:

Stream Function 消息名称 方向 说明
1 1 S1F1 Host → Equipment Are You There?(通信建立请求)
1 2 S1F2 Equipment → Host On Line Data(通信建立应答)
2 13 S2F13 Host → Equipment Equipment Constant Request(设备常量请求)
2 14 S2F14 Equipment → Host Equipment Constant Data(设备常量数据)
防火墙规则关键点: 许多半导体工厂的防火墙会基于 Message ID(即 Stream/Function 编码)进行白名单过滤。例如,只允许 S1F1/S1F2 通过,而阻止 S2F41(远程命令)等高风险消息。调试时需确认防火墙规则是否意外拦截了必要的 Stream/Function。
Stream/Function 消息流示例:S1F1 ↔ S1F2 Host(主机) Equipment(设备) S1F1 Are You There? S1F2 On Line Data Message ID = (Stream << 8) | Function 例如:S1F1 → Message ID = 0x0101

3.3 Data Item(数据项)

Data Item 是 SECS 消息中实际携带的数据负载。它采用 SML(SECS Message Language) 格式进行编码,支持多种数据类型:

数据类型 格式码 说明 示例
Boolean 0x00 布尔值(TRUE/FALSE) <B 1>
Integer 0x10 / 0x20 / 0x30 / 0x40 1/2/4/8 字节有符号整数 <I4 100>
Float 0x50 / 0x60 4/8 字节浮点数 <F8 3.14159>
ASCII 0x70 可变长度 ASCII 字符串 <A “OK”>
List 0x80 数据项容器,可嵌套 <L [2]>
调试技巧: 当防火墙或中间件解析 SECS 消息时,Data Item 的格式错误(如长度字段异常)会导致消息被丢弃。检查防火墙日志中是否有“Malformed Data”或“Invalid Length”等关键字。

3.4 消息结构完整示例

以下是一个完整的 S1F1 消息(HSMS 格式)的十六进制表示及解析:

HSMS Header:
  00 01        // Session ID = 1
  01 01        // Message ID = S1F1 (Stream=1, Function=1)
  00 00 00 01  // System Bytes = 1

Data Item (SML):
  <L>
    <A “MD”>   // 设备模型
  </L>
防火墙规则调试关联: 在配置防火墙时,通常需要设置规则来允许特定的 Session ID 和 Message ID 范围。例如,允许 Session ID=1 且 Message ID 在 0x0101 到 0x0102 之间的消息通过。错误的规则可能导致 S1F1 握手失败,表现为“通信超时”或“连接被重置”。
SECS/GEM 消息完整层次结构 SECS Message Message Header Data Body Session ID Message ID System Bytes Data Item Data Item 防火墙规则通常基于 Session ID + Message ID 进行过滤,Data Item 用于深度包检测(DPI)