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"
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(回复消息,返回数据)。
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 次,超过后应断开连接并上报错误。
4.4 消息交互模式总结
结合 Stream/Function 与 WBit,SECS-II 定义了三种基本交互模式:
| 模式 | 描述 | WBit | 示例 |
|---|---|---|---|
| 请求-回复 | 主机发送请求,设备回复结果 | 1 | S1F1 → S1F2 |
| 单向通知 | 设备主动上报事件,无需回复 | 0 | S5F1(报警上报) |
| 多块传输 | 大数据分块发送,每块需确认 | 1 | S6F1 → S6F2(多块数据) |
MES 集成要点:在设计 MES 与设备的通信逻辑时,必须根据业务场景正确设置 WBit。对于关键操作(如配方下载、状态查询),应使用 WBit=1 并实现超时重传;对于非关键事件(如日志上报),可使用 WBit=0 减少网络开销。