SECSGEM协议栈与MES系统数据交互设计 - 第4节

4.1 SECS-II 消息格式概述

SECS-II(SEMI Equipment Communications Standard Part 2)定义了设备与主机之间交换的消息内容与结构。它是 SECS/GEM 协议栈中承载业务数据的核心层,位于 HSMS 或 RS-232 传输层之上。SECS-II 消息采用自描述、类型化的编码方式,确保不同厂商的设备与 MES 系统能够无歧义地解析数据。

关键概念:SECS-II 消息 = 消息头(Message Header)+ 消息体(Message Body / Data Item)。消息头固定 10 字节,消息体由若干数据项(Item)按树形结构嵌套组成。

4.1.1 消息头结构

每个 SECS-II 消息都包含一个 10 字节的消息头,其字段定义如下:

字节偏移 字段名称 长度(字节) 说明
0 Length 4 消息体总长度(大端序),不含消息头自身
4 Device ID 2 设备标识符,用于多设备场景
6 Stream 1 消息流编号(0~127)
7 Function 1 消息功能编号(0~255)
8 WBit 1 Wait Bit(0/1),表示是否需要回复
9 System Bytes 1 系统字节,用于消息匹配与超时控制
注意:消息头中的 Stream 和 Function 共同决定了消息的语义。例如 Stream 1 Function 1(S1F1)表示“Are You There”请求,而 S1F2 是对应的回复。

4.1.2 消息体数据项编码

SECS-II 消息体由数据项(Data Item)组成,每个数据项包含三个部分:

  • Item Header(2~3 字节):包含格式码(Format Code)、长度字节数、数据长度。
  • Data:实际数据内容,按格式码解释。
  • 嵌套结构:List 类型(格式码 0x00)可包含子 Item,形成树形结构。
// 示例:S1F1 消息体(空体,无数据项)
消息头:00 00 00 00  00 01  01  01  01  00
// 解释:Length=0, Device ID=1, Stream=1, Function=1, WBit=1, System=0

// 示例:S1F3 消息体(包含一个 ASCII 字符串)
消息头:00 00 00 0A  00 01  01  03  01  00
消息体:41 0A  4D 6F 64 65 6C 4E 61 6D 65
// 解释:Format=0x41 (ASCII), Length=10, 数据="ModelName"
SECS-II 消息结构示意图 消息头(10 字节) Length(4) | Device ID(2) | Stream(1) | Function(1) | WBit(1) | System(1) 消息体(可变长度) Item 1: List Item 2: ASCII Item 3: U4 子 Item: U2 子 Item: Boolean

4.2 Stream 与 Function 概念

SECS-II 使用 Stream(流)和 Function(功能)两个维度对消息进行分类。Stream 表示消息的功能领域,Function 表示该领域内的具体操作。每个消息由 S<Stream>F<Function> 唯一标识。

4.2.1 Stream 分类

Stream 编号 功能领域 典型用途
1 设备状态与控制 通信建立、状态查询、远程控制
2 设备数据收集 报告请求、数据变量获取
3 材料管理 晶圆/料盒状态、物料追踪
4 配方管理 配方上传、下载、验证
5 报警管理 报警上报、确认、清除
6 数据日志 事件日志、追溯数据
7 设备终端服务 操作员消息、显示控制
10+ 厂商自定义 扩展功能、私有协议

4.2.2 Function 编号规则

  • 奇数 Function:主消息(Primary Message),通常由发起方发送。
  • 偶数 Function:回复消息(Secondary Message),由接收方回复。
  • Function 0:保留,用于特殊控制。
  • Function 255:保留,用于扩展。
示例:S1F1(主消息)→ 设备回复 S1F2(回复消息)。S2F17(主消息,请求数据)→ 设备回复 S2F18(回复消息,返回数据)。
Stream/Function 消息交互示例 主机(Host) 设备(Equipment) S1F1 "Are You There" S1F2 "Are You There Reply" 奇数 Function(1)→ 请求;偶数 Function(2)→ 回复

4.3 Message ID 与 Wait Bit

4.3.1 Message ID(消息标识)

每个 SECS-II 消息在传输层由 System Bytes(系统字节)唯一标识。System Bytes 是一个 1 字节的计数器(0~255),由发送方维护。接收方在回复消息中携带相同的 System Bytes,用于消息匹配和超时重传。

最佳实践:在 MES 与设备通信时,建议为每个会话维护独立的 System Bytes 计数器,避免消息 ID 冲突。对于高吞吐场景,可使用 4 字节扩展 System Bytes(SEMI E37 标准)。

4.3.2 Wait Bit(WBit)

Wait Bit 是消息头第 9 字节的最高位(bit 7),用于指示发送方是否期望接收方回复:

  • WBit = 1:发送方等待回复。接收方必须回复对应的偶数 Function 消息。
  • WBit = 0:发送方不等待回复。接收方无需回复(单向消息)。
场景 WBit 设置 典型消息
查询设备状态 1 S1F1(Are You There)
发送报警通知 0 S5F1(Alarm Report)
下载配方 1 S7F3(Process Program Send)
终端显示消息 0 S7F1(Terminal Display)
注意:如果发送方设置 WBit=1 但接收方未在超时时间内回复,发送方应触发超时重传机制(T3 超时)。重传次数通常为 3 次,超过后应断开连接并上报错误。
Wait Bit 交互流程 主机 设备 S1F1 (WBit=1) S1F2 (回复) S5F1 (WBit=0) 无回复 WBit=1:必须回复;WBit=0:无需回复(单向) 超时未回复 → 触发 T3 超时重传机制

4.4 消息交互模式总结

结合 Stream/Function 与 WBit,SECS-II 定义了三种基本交互模式:

模式 描述 WBit 示例
请求-回复 主机发送请求,设备回复结果 1 S1F1 → S1F2
单向通知 设备主动上报事件,无需回复 0 S5F1(报警上报)
多块传输 大数据分块发送,每块需确认 1 S6F1 → S6F2(多块数据)
MES 集成要点:在设计 MES 与设备的通信逻辑时,必须根据业务场景正确设置 WBit。对于关键操作(如配方下载、状态查询),应使用 WBit=1 并实现超时重传;对于非关键事件(如日志上报),可使用 WBit=0 减少网络开销。