2. SECS/GEM协议基础:SECS-I、SECS-II、HSMS协议栈与GEM标准概述
在晶圆厂MES与设备集成工程中,SECS/GEM协议族是事实上的通信标准。它并非单一协议,而是一套分层、可扩展的协议栈。理解其分层架构、消息格式以及GEM标准定义的行为模型,是进行接口开发与调试的前提。
工程视角: 在MES对接项目中,90%的通信问题源于对协议栈分层职责的混淆。例如,将HSMS的TCP连接断开误判为SECS-II消息格式错误。明确每一层的边界,能大幅提升排错效率。
2.1 SECS/GEM协议栈分层模型
SECS/GEM协议栈遵循OSI模型的分层思想,但在实际工业应用中,主要关注以下四层:
| OSI层 | 协议层 | 核心职责 | 典型标准 |
|---|---|---|---|
| 应用层 | GEM (Generic Equipment Model) | 定义设备行为模型、状态机、标准场景(如远程控制、报警管理、配方管理) | SEMI E30 |
| 表示层 | SECS-II (SECS Message Content) | 定义消息的数据结构、格式(Item/List)、数据类型(如U4, A, F8) | SEMI E5 |
| 会话层/传输层 | HSMS (High-Speed SECS Message Services) | 定义基于TCP/IP的会话管理、连接建立/断开、消息传输 | SEMI E37 |
| 物理层/数据链路层 | SECS-I (SECS-I Interface) | 定义基于RS-232的物理连接、块传输、字节流控制 | SEMI E4 |
关键点: 现代晶圆厂几乎全部采用HSMS替代SECS-I作为传输层。HSMS基于TCP/IP,支持高速、长距离通信,而SECS-I仅用于老旧设备或特殊场景。但SECS-II和GEM的语义在两种传输层上完全一致。
2.2 SECS-I:物理层与数据链路层
SECS-I 是协议栈中最底层的标准,定义了设备与主机之间的物理连接和字节流传输机制。虽然现代工厂已较少直接使用,但其设计思想影响了HSMS的块传输机制。
- 物理层: 采用RS-232C串行接口,点对点连接,传输速率通常为9600 bps ~ 38400 bps。
- 数据链路层: 定义了一种“块(Block)”传输协议。每个消息被分割成多个数据块,每个块包含块头(Block Header)和数据区。
- 流控制: 使用ENQ/ACK/NAK握手信号进行流控,确保数据完整传输。
工程避坑: SECS-I 的RS-232通信距离通常限制在15米以内,且抗干扰能力弱。在MES对接项目中,如果设备仅支持SECS-I,强烈建议通过协议转换器(SECS-I to HSMS Gateway)接入工厂网络,而不是直接拉长串口线。
2.3 HSMS:高速消息服务
HSMS 是当前晶圆厂主流的传输层协议,它基于TCP/IP,提供了比SECS-I更高的吞吐量和更灵活的连接管理。
2.3.1 HSMS 会话状态机
HSMS 定义了严格的连接建立与断开流程,确保通信双方状态一致。核心状态包括:
| 状态 | 描述 | 典型触发事件 |
|---|---|---|
| NOT CONNECTED | TCP连接未建立 | 初始状态;连接断开后进入此状态 |
| CONNECTED | TCP连接已建立,但尚未进行HSMS握手 | TCP三次握手成功 |
| SELECTED | HSMS会话已建立,可以传输SECS-II消息 | Select.req / Select.rsp 握手成功 |
| NOT SELECTED | TCP连接存在,但HSMS会话未建立或已断开 | Select.rsp 失败;Deselect 操作 |
2.3.2 HSMS 消息格式
HSMS 在TCP流上传输的消息具有固定头部格式,用于标识消息长度、会话ID、消息类型等关键信息。
HSMS 消息头部 (10 bytes):
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| Length(4) | Device ID(2) | Stream(1) | Function(1) | PType(1) | SType(1) |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- Length: 消息体(SECS-II数据)的字节长度,不包含头部。
- Device ID: 设备标识符,用于多设备场景。
- Stream/Function: 标识SECS-II消息类型(如 S1F13, S2F41)。
- PType: 协议类型,通常为0(SECS-II)。
- SType: 会话类型,0表示数据消息,其他值表示控制消息(如Select.req)。
2.4 SECS-II:消息内容与数据结构
SECS-II 定义了消息的语义和语法。它使用一种自描述的嵌套结构——Item/List——来组织数据。
2.4.1 数据类型
| 类型码 | 数据类型 | 描述 | 字节长度 |
|---|---|---|---|
| 0x00 | List | 包含多个子Item的容器 | 可变 |
| 0x10 | Binary | 二进制数据 | 可变 |
| 0x20 | Boolean | 布尔值 | 1 |
| 0x30 | ASCII | ASCII字符串 | 可变 |
| 0x40 | U1 / U2 / U4 / U8 | 无符号整数(1/2/4/8字节) | 1/2/4/8 |
| 0x50 | I1 / I2 / I4 / I8 | 有符号整数 | 1/2/4/8 |
| 0x60 | F4 / F8 | 浮点数(4/8字节) | 4/8 |
2.4.2 消息结构示例:S1F13 (Establish Communications Request)
S1F13 是GEM标准中用于建立通信的典型消息。其SECS-II结构如下:
S1F13 (Establish Communications Request)
<L[2]
<A "MDLN"> // 设备型号
<A "REV"> // 软件版本
>
对应的字节编码(十六进制)示意:
// 假设 MDLN = "ABC123", REV = "1.0"
// 编码后字节流(简化):
01 02 00 02 // List, 2字节长度, 包含2个Item
41 06 41 42 43 31 32 33 // ASCII Item, 6字节, "ABC123"
41 03 31 2E 30 // ASCII Item, 3字节, "1.0"
开发提示: 在Python中,可以使用
secsgem 或 pysecs 库来构建和解析SECS-II消息,无需手动处理字节编码。例如:SecsMessage(stream=1, function=13, data=[('MDLN', 'ABC123'), ('REV', '1.0')])。
2.5 GEM:通用设备模型
GEM (SEMI E30) 是SECS/GEM协议栈的应用层标准。它定义了设备在工厂环境中的标准行为模型,使得不同厂商的设备能够以统一的方式与MES交互。
2.5.1 GEM 核心能力
- 状态管理: 定义设备状态模型(如 INIT, IDLE, PROCESSING, ALARM),并规定状态转换规则。
- 远程控制: 支持MES远程启动、停止、暂停设备处理。
- 报警管理: 设备主动上报报警(Alarm),MES可查询报警列表。
- 配方管理: 支持MES下载、上传、选择配方(Recipe)。
- 数据收集: 支持Trace(周期性数据采集)和Event(事件触发数据上报)。
- 物料跟踪: 支持晶圆盒(Cassette)或晶圆(Wafer)级别的物料跟踪。
2.5.2 GEM 标准消息流示例:设备初始化
设备上电后,与MES建立通信的典型流程:
- TCP连接建立: 设备作为Client,主动连接MES Host的HSMS端口。
- HSMS Select: 设备发送
Select.req,MES回复Select.rsp,建立HSMS会话。 - SECS-II 通信建立: 设备发送
S1F13(Establish Communications Request),MES回复S1F14(Establish Communications Acknowledge)。 - 设备属性上报: 设备发送
S1F1(Are You There Request),MES回复S1F2(On Line Data)。 - 进入在线模式: 设备进入ON-LINE状态,准备接收MES指令。
2.6 协议栈集成要点总结
| 层次 | 开发关注点 | 常见问题 |
|---|---|---|
| HSMS | TCP连接管理、心跳机制、会话状态机 | 连接超时、Select握手失败、心跳丢失导致断连 |
| SECS-II | Item/List嵌套结构、数据类型编码、消息长度计算 | 数据类型不匹配、List嵌套层级错误、长度字段溢出 |
| GEM | 状态机实现、标准场景(S1F13/S1F14等)、事件上报 | 状态转换不符合GEM规范、漏报必选事件、配方管理流程不完整 |
工程建议: 在MES对接项目中,建议先使用SECS/GEM模拟器(如SECS Simulator、Equipment Simulator)验证协议栈各层的连通性,再接入真实设备。这能有效隔离设备端与MES端的问题,缩短调试周期。