3. SECS/GEM协议基础

SECS/GEM 是半导体设备与工厂主机之间最通用的通信标准族。它并不是单一协议,而是由 SEMI E4(SECS-I)、E37(HSMS)、E5(SECS-II)、E30(GEM)等多份标准叠加而成。理解这一章的关键,是把“消息长什么样”“连接怎么建立”“消息怎么描述”“设备处于什么通信状态”这四件事分开看,再合起来用。

一、SECS-II 消息结构:从数据项到消息体

SECS-II 定义的是消息的语义层。一条 SECS-II 消息由三部分组成:消息头(Header)、消息体(Body)和可选的系统字节。消息头固定 10 字节,包含设备 ID、消息流(Stream)、功能号(Function)、等待位(W-bit)、PType、SType 和系统字节。其中 Stream 与 Function 合称 SxFy,例如 S1F13 表示 Stream 1、Function 13,即“建立通信请求”。

消息体由若干数据项(Data Item)组成,每个数据项带一个格式码(Format Code),常见的有:

  • L(List):列表,可嵌套,是组织复杂结构的核心;
  • A(ASCII):字符串;
  • B(Binary):二进制;
  • U1/U2/U4:无符号 1/2/4 字节整数;
  • I1/I2/I4:有符号整数;
  • F4/F8:单/双精度浮点;
  • Boolean:布尔值。

每个数据项编码为“格式字节 + 长度字节 + 数据”。格式字节高 6 位是格式码,低 2 位表示长度字节数(1、2 或 3 字节)。例如一个 ASCII 字符串 "EAP" 编码为 A[3] EAP,其中 A 的格式码为 0x41(二进制 01000001),长度 3 用 1 字节表示。理解这个编码规则,是后续解析 SML 和排查“消息体错位”问题的基础。

二、HSMS 连接管理:TCP 之上的会话控制

HSMS(SEMI E37)把 SECS-II 消息承载在 TCP/IP 之上。它定义了两种角色:Active(主动发起连接)和 Passive(被动监听)。典型部署中,主机侧常为 Active,设备侧为 Passive,端口默认 5000。连接建立后,双方通过控制消息维护会话:

  • Select.req / Select.rsp:申请进入“已选择”状态,只有 Selected 状态下才允许传输数据消息;
  • Deselect.req / Deselect.rsp:退出选择状态;
  • Linktest.req / Linktest.rsp:链路心跳,检测对端是否存活;
  • Separate.req:主动断开连接。

HSMS 消息头为 10 字节,包含 Session ID、Header Byte 2/3(含 W-bit、Stream、Function)、PType、SType 和 System Bytes。System Bytes 用于请求与响应的配对,是排查“响应错配”的关键字段。T3 超时(默认 45 秒)控制响应等待,T5(默认 10 秒)控制连接重连,T6(默认 5 秒)控制控制消息超时,T7(默认 10 秒)控制 Select 超时,T8(默认 5 秒)控制网络字符间超时。这些定时器是设备通信稳定性的核心参数。

三、SML/FMT 语法:消息的可读描述

SML(SECS Message Language)是 SECS-II 消息的文本表示法,用于日志、文档和测试。它把二进制消息体写成可读的嵌套结构。例如 S1F13 的 SML 表示:

S1F13 W
<L
  <A "EquipmentID">
  <A "1.0.0">
>.

其中 <L 表示列表开始,> 表示列表结束,<A "..."> 表示 ASCII 数据项。FMT 则是另一种更紧凑的格式描述,常用于定义消息模板。实际工程中,SML 文件常作为设备通信的“接口契约”,主机和设备双方按同一份 SML 生成解析代码,避免字段顺序和类型不一致。

四、设备通信状态机:从 Disabled 到 Selected

GEM 设备通信状态机(E30)定义了设备在通信层面的生命周期。典型状态包括:

  • Disabled:通信功能关闭,不响应任何消息;
  • Enabled:通信功能开启,但尚未建立 HSMS 连接;
  • Connected:TCP 连接已建立,但未 Select;
  • Selected:已选择,可正常收发数据消息;
  • Communicating:在 Selected 基础上,完成 S1F13/S1F14 握手,进入在线通信。

状态迁移由控制消息和超时事件驱动。例如:Enabled 下收到 TCP 连接请求进入 Connected;Connected 下收到 Select.req 并回复 Select.rsp 后进入 Selected;Selected 下收到 Separate.req 或 T8 超时则回到 Connected 或 Enabled。主机侧通常通过 S1F1(Are You There)和 S1F2 确认设备在线,通过 S1F13/S1F14 建立通信,通过 S1F15/S1F16 请求离线,通过 S1F17/S1F18 请求在线。

SECS/GEM 通信状态机与消息流 Disabled 通信关闭 Enabled 通信开启 Connected TCP已连接 Selected 已选择 Communicating(在线通信) S1F13/S1F14 握手完成,可收发数据消息 Enable TCP连接 Select.req/rsp S1F13/S1F14 Deselect 断开/T5 Disable 典型消息交互序列 主机 设备 S1F13 建立通信请求 S1F14 建立通信应答 S1F1 Are You There S1F2 在线数据 S1F3 请求状态数据 S1F4 状态数据应答 HSMS 关键定时器 T3 = 45s 等待响应超时 T5 = 10s 连接重连间隔 T6 = 5s 控制消息超时 T7 = 10s Select 超时 T8 = 5s 字符间超时

五、工程实践中的关键判断

在实际接入中,最常见的故障不是协议本身,而是状态与超时配置不匹配。例如设备侧 T5 设为 10 秒,主机侧 T5 设为 30 秒,网络抖动时设备会先断开重连,主机却仍在等待,导致 Select 状态反复丢失。排查时应先确认双方 T3/T5/T6/T7/T8 是否一致,再检查 System Bytes 是否配对,最后核对 SML 中字段顺序与类型是否与设备实际返回一致。

建议在项目初期建立一份 SML 接口清单,把每条消息的 SxFy、方向、W-bit、数据项结构和超时要求写清楚。这份清单既是开发依据,也是联调时的对照表。