2. SECS/GEM 协议栈:SECS-I、SECS-II、HSMS 协议层次关系与通信模型
SECS/GEM 协议栈并非单一协议,而是由 SECS-I、SECS-II 和 HSMS 三个核心层次构成的标准化通信体系。理解这三层的职责划分、数据封装关系以及通信模型,是掌握设备模式切换与链路恢复机制的基础。
2.1 协议栈三层架构总览
SECS/GEM 协议栈遵循 OSI 模型的分层思想,将半导体设备通信任务分解为物理传输、消息格式化与语义控制三个独立层次。下表总结了各层在协议栈中的位置与核心职责:
| 协议层 | 对应 OSI 层 | 核心职责 | 典型载体/标准 |
|---|---|---|---|
| HSMS | 传输层 / 会话层 | TCP/IP 连接管理、消息分帧、链路状态监测与恢复 | TCP/IP 网络 (Ethernet) |
| SECS-II | 表示层 / 应用层 | 消息类型定义、数据项格式 (SML)、功能函数 (Stream/Function) | 消息内容标准 (E5) |
| SECS-I | 数据链路层 | 块传输协议、RTS/CTS 握手、块序列控制与重传 | RS-232C 串行接口 (E4) |
2.2 协议层次关系与数据封装
当主机(Host)向设备(Equipment)发送一条“请求设备状态”消息时,数据在协议栈中自上而下逐层封装。下图展示了完整的封装流程与各层头部信息:
- SECS-II 只关心消息的语义(如 S1F1 表示“请求设备状态”),不关心如何传输。
- HSMS 在 SECS-II 消息前添加 10 字节的帧头(Message Header),用于标识会话、消息类型和系统字节。
- TCP/IP 将整个 HSMS 帧视为应用层数据,添加 TCP 头部后交给网络层。
2.3 SECS-I:块传输协议(传统串行层)
SECS-I(SEMI E4)定义了点对点串行通信的块传输机制。虽然现代工厂已较少直接使用 RS-232C 硬件,但其块传输逻辑(Block Transfer Protocol)对理解 HSMS 的“消息分块”概念仍有帮助。
2.3.1 SECS-I 核心机制
- 块 (Block): 每个消息被分割为多个 256 字节的块,最后一块可小于 256 字节。
- RTS/CTS 握手: 发送方发出 RTS(请求发送),接收方回复 CTS(允许发送)后,才开始传输块数据。
- 块号 (Block Number): 每个块携带 1 字节的块号(0-127),用于接收方重组消息和检测丢块。
- 重传机制: 接收方通过 ENQ/ACK/NAK 协议确认每个块的接收,超时或 NAK 触发重传。
2.4 SECS-II:消息标准化层
SECS-II(SEMI E5)定义了设备与主机之间交换消息的语法和语义。它是 GEM 标准的基础,所有设备行为(如状态上报、报警、数据收集)都通过 SECS-II 消息实现。
2.4.1 消息结构:Stream 与 Function
每条 SECS-II 消息由 Stream (流) 和 Function (功能) 唯一标识,格式为 S<n>F<m>。例如 S1F1 表示 Stream 1、Function 1。
| Stream 编号 | 功能分类 | 典型消息示例 |
|---|---|---|
| 1 | 设备状态与控制 | S1F1 (请求状态), S1F13 (建立通信请求) |
| 2 | 设备控制与诊断 | S2F17 (日期时间请求), S2F41 (远程命令) |
| 5 | 报警管理 | S5F1 (报警上报), S5F3 (报警使能) |
| 6 | 数据收集 | S6F11 (事件上报), S6F15 (数据收集请求) |
| 7 | 配方管理 | S7F1 (配方请求), S7F19 (配方下载) |
2.4.2 数据项格式 (SML)
SECS-II 使用 SML (SECS Message Language) 表示数据项。基本格式为 <数据类型 值>,支持嵌套列表 <L>。
// 示例:S1F1 请求设备状态(无数据项)
S1F1 W
// 示例:S1F2 响应设备状态(包含列表数据)
S1F2
<L
<A "MDLN"> // 设备型号
<A "SOFTREV"> // 软件版本
>
2.5 HSMS:高速消息服务层
HSMS(SEMI E37)是基于 TCP/IP 的通信协议,是当前半导体工厂自动化的事实标准。它取代了 SECS-I 的串行物理层,同时保留了 SECS-II 的消息语义。
2.5.1 HSMS 帧结构
HSMS 帧由 10 字节的消息头 和 可变长度的消息体(即 SECS-II 消息)组成。
| 偏移 (字节) | 字段 | 长度 (字节) | 说明 |
|---|---|---|---|
| 0-1 | Session ID | 2 | 设备会话标识,通常为设备 ID |
| 2 | Header Byte 2 | 1 | 保留位 / 控制位 |
| 3 | PType | 1 | 协议类型 (0=SECS-II) |
| 4 | SType | 1 | 会话类型 (0=数据消息, 1=选择, 2=分离, 9=链路测试) |
| 5-7 | System Bytes | 3 | 系统字节,用于消息配对与超时检测 |
| 8-9 | Length | 2 | 消息体长度 (字节数) |
| 10+ | Message Body | 可变 | SECS-II 消息内容 |
2.5.2 HSMS 通信模型:主动连接与被动连接
HSMS 定义了两种连接角色:
- 主动实体 (Active Entity): 发起 TCP 连接的一方,通常是主机(Host)。
- 被动实体 (Passive Entity): 监听 TCP 连接请求的一方,通常是设备(Equipment)。
下图展示了 HSMS 连接建立与链路测试的典型流程:
2.5.3 HSMS 状态机
HSMS 定义了 5 种连接状态,设备与主机在通信过程中在这 5 种状态之间迁移:
| 状态 | 描述 | 典型触发条件 |
|---|---|---|
| Not Connected | 未建立 TCP 连接 | 设备启动、连接断开、连接失败 |
| Connected | TCP 连接已建立,但未完成 HSMS 选择 | TCP 三次握手完成 |
| Selected | HSMS 选择完成,可交换 SECS-II 数据消息 | Select.req / Select.rsp 成功 |
| Link Test | 正在执行链路测试 | Linktest.req 发送后等待响应 |
| Not Selected | TCP 连接存在,但 HSMS 会话已分离 | Deselect.req / Deselect.rsp 或通信错误 |
2.6 三层协议协同工作模型
在实际运行中,SECS-I(或 HSMS)、SECS-II 和 GEM 标准协同工作,形成完整的通信模型。下图展示了从物理层到应用层的完整调用关系: