4. SECS-II 消息结构:Stream 与 Function 的核心概念

SECS-II(SECS-II 消息层)是 SEMI E5 标准定义的消息格式层,位于 SECS-I(传输层)之上。它规定了设备与主机之间交换的每一条消息的语义结构和数据编码方式。理解 SECS-II 是进行产线集成开发的基础,也是后续实现 GEM 状态机、报警、数据采集等功能的先决条件。

4.1 Stream 与 Function:消息的“地址”

每一条 SECS-II 消息都由一个 Stream(流) 和一个 Function(功能) 唯一标识。Stream 和 Function 共同构成了消息的“类型码”,类似于 HTTP 协议中的方法(GET/POST)和路径的组合。

  • Stream (S):消息的类别,用 0–127 的整数表示。例如,Stream 1 用于设备状态与控制,Stream 2 用于设备数据与参数,Stream 6 用于数据收集与事件报告。
  • Function (F):消息的具体操作,用 0–255 的整数表示。例如,Function 1 通常表示“请求”,Function 2 表示“确认响应”,Function 13 表示“建立通信请求”。

一条完整的消息标识格式为:S<n>F<m>,例如 S1F13(建立通信请求)、S6F11(事件报告数据)。

关键点:Stream 和 Function 的编号规则由 SEMI E5 标准严格定义。在开发中,必须使用标准定义的消息 ID,不能自定义 Stream/Function 编号用于私有协议,否则会导致设备与主机无法互操作。
记忆技巧:Stream 是“章”,Function 是“节”。S1F13 就是“第 1 章第 13 节”,标准中定义了该节的具体内容和格式。
SECS-II 消息标识结构:S<n>F<m> Stream (S) 消息类别(0–127) Function (F) 具体操作(0–255) S1F13 建立通信请求 示例:S1F13 = Stream 1(设备状态)+ Function 13(建立通信请求)

4.2 Message 分类:Primary 与 Secondary

SECS-II 消息按照通信的发起方向和响应关系,分为两大类:

分类 方向 描述 典型示例
Primary Message 发起方 → 接收方 主动发送的请求或通知消息,需要对方回复 主机发送 S1F13(建立通信请求)给设备
Secondary Message 接收方 → 发起方 对 Primary Message 的确认响应,携带结果或数据 设备回复 S1F14(建立通信确认)给主机
重要规则:Primary 和 Secondary 消息的 Function 编号通常成对出现。Primary 的 Function 为奇数(如 F13),对应的 Secondary 为偶数(如 F14)。这种奇偶配对机制是 SECS-II 协议的核心设计,用于保证请求-响应的一一对应。

在产线集成中,主机通常作为 Primary 消息的发起方,设备作为 Secondary 消息的响应方。但设备也可以主动发送 Primary 消息(如报警通知 S5F1),此时主机需要回复 Secondary 消息(S5F2)。

Primary / Secondary 消息交互流程 主机 (Host) 设备 (Equipment) Primary (S1F13) Secondary (S1F14) Primary 消息(奇数 Function)发起请求 Secondary 消息(偶数 Function)返回响应 奇偶配对是 SECS-II 协议的基本通信单元

4.3 Item 数据类型:消息的“原子”

SECS-II 消息的载荷(Body)由若干个 Item 组成。Item 是 SECS-II 数据的最小单元,每个 Item 包含一个数据类型、长度和值。SECS-II 定义了多种数据类型,用于表示设备的各种信息。

数据类型 缩写 格式码 描述 典型用途
List L 0x00 有序的 Item 集合,可嵌套 消息体结构、参数组
ASCII A 0x40 可打印的 ASCII 字符串 设备 ID、型号、状态文本
Binary B 0x20 字节数组(0x00–0xFF) 原始数据、状态位图
Boolean BOOLEAN 0x24 布尔值(0x00=False, 0x01=True) 开关状态、使能标志
Unsigned 1-byte U1 0x64 无符号 8 位整数(0–255) 小范围计数器、状态码
Unsigned 2-byte U2 0x68 无符号 16 位整数(0–65535) 设备参数、索引
Unsigned 4-byte U4 0x6C 无符号 32 位整数(0–4294967295) 时间戳、大范围计数器
Signed 1-byte I1 0x60 有符号 8 位整数(-128–127) 偏差值、小范围有符号数据
Signed 2-byte I2 0x64 有符号 16 位整数(-32768–32767) 温度、压力等测量值
Signed 4-byte I4 0x68 有符号 32 位整数(-2147483648–2147483647) 累计产量、大范围测量值
Floating 4-byte F4 0x70 单精度浮点数(IEEE 754) 工艺参数、精度要求高的数据
Floating 8-byte F8 0x74 双精度浮点数(IEEE 754) 高精度测量数据
开发建议:在产线集成中,最常用的数据类型是 List(用于组织消息结构)、ASCII(用于文本信息)、U4(用于时间戳和计数器)和 I2/I4(用于工艺参数)。选择合适的数据类型可以减少消息长度,提高解析效率。

4.4 消息编码规则:从 Item 到字节流

SECS-II 消息在传输前需要编码为字节流。编码规则遵循 TLV(Type-Length-Value) 格式,每个 Item 的编码结构如下:

+----------------+----------------+----------------+
|  格式码 (1字节)  |  长度码 (1-3字节)|  数据值 (N字节)  |
+----------------+----------------+----------------+
|  0x6C (U4)     |  0x04          |  0x00 0x00 0x0A 0x00 |
+----------------+----------------+----------------+

编码步骤:

  1. 格式码:标识数据类型(如 U4 为 0x6C)。
  2. 长度码:表示数据值的字节数。长度码本身可以是 1 字节(长度 ≤ 255)、2 字节(长度 ≤ 65535)或 3 字节(长度 ≤ 16777215),通过格式码的高位 bit 指示长度码的字节数。
  3. 数据值:按照数据类型的字节序(大端序,Big-Endian)编码。

对于 List 类型,其“数据值”部分包含的是子 Item 的编码序列,而不是原始数据。List 可以嵌套,形成复杂的消息结构。

编码示例:假设要编码一个 U4 类型的值 2560(0x00000A00),编码结果为:0x6C 0x04 0x00 0x00 0x0A 0x00。其中 0x6C 是 U4 的格式码,0x04 表示后面有 4 字节数据,0x00000A00 是 2560 的大端序表示。
SECS-II 消息编码结构(TLV 格式) SECS-II 消息头(Message Header) 格式码 1 字节 长度码 1–3 字节 数据值(N 字节) 大端序编码 List 类型的数据值部分包含子 Item 的完整 TLV 编码序列

4.5 完整消息示例:S1F13 建立通信请求

下面是一个完整的 SECS-II 消息编码示例,展示如何将 S1F13(建立通信请求)消息编码为字节流:

消息:S1F13
方向:主机 → 设备
功能:请求建立通信会话

消息头(10 字节):
  0x00 0x00 0x00 0x01  // 设备 ID(4 字节)
  0x00 0x0D             // Stream = 1, Function = 13(2 字节)
  0x00 0x00             // 保留位(2 字节)
  0x01                  // 消息块标志(1 字节)
  0x00                  // 系统字节(1 字节,简化示例)

消息体(Item 编码):
  0x6C 0x04 0x00 0x00 0x00 0x0A  // U4 类型,值 = 10(通信超时时间)

完整字节流:
  00 00 00 01 00 0D 00 00 01 00 6C 04 00 00 00 0A
实战要点:在产线集成中,通常不需要手动编码/解码 SECS-II 消息。成熟的 SECS/GEM 库(如 SECS-I、SECS-II 协议栈)会自动处理 TLV 编码。但理解编码规则对于调试通信问题、分析抓包数据至关重要。当设备返回“格式错误”或“解析失败”时,往往是因为 Item 的数据类型或长度与标准定义不符。

4.6 本章小结

  • Stream 与 Function 是 SECS-II 消息的唯一标识,S<n>F<m> 格式定义了消息的类别和操作。
  • Primary 与 Secondary 消息构成请求-响应配对,奇数 Function 为 Primary,偶数 Function 为 Secondary。
  • Item 数据类型 包括 List、ASCII、Binary、U1/U2/U4、I1/I2/I4、F4/F8 等,每种类型有固定的格式码和编码规则。
  • TLV 编码 是 SECS-II 消息的基本编码方式,格式码 + 长度码 + 数据值构成每个 Item 的字节表示。
  • 掌握 SECS-II 消息结构是后续实现 GEM 状态机、数据采集、报警管理等功能的基础。