2. SECS/GEM协议族入门

在半导体设备联机领域,SECS/GEM 并不是一个单一协议,而是一组分工明确的协议族。很多初学者第一次接触时,会把 SECS-I、HSMS、SECS-II、GEM 混为一谈,结果在配置 EAP 时不知道该改哪一层。理解它们的关键,是把它们看成一条从“物理链路”到“业务语义”的分层栈:底层负责把字节可靠地送过去,中间层负责把字节组织成有意义的消息,上层负责规定设备与主机之间该交换哪些消息、在什么状态下交换。

SECS-I 与 HSMS 是两种可选的“传输层”实现:SECS-I 基于 RS-232 串行链路,HSMS 基于 TCP/IP。它们之上承载的都是同一种 SECS-II 消息。GEM 则是在 SECS-II 之上定义的一套标准行为规范,规定设备应支持哪些流、功能号、状态模型和报警语义。

先看消息结构。一条 SECS-II 消息由消息头和消息体组成。消息头固定 10 个字节,包含:设备 ID(2 字节)、消息头第 3 字节(含 W-bit 与 Stream)、功能号(1 字节)、PType(1 字节)、SType(1 字节)、System Bytes(4 字节)。其中 W-bit 表示该消息是否需要回复;Stream 与 Function 合称“流与功能号”,例如 S1F13 表示第 1 流第 13 功能,常用于建立通信请求。消息体由若干数据项(Data Item)组成,每个数据项带格式码和长度,支持 L(列表)、A(ASCII)、U1/U2/U4(无符号整数)、I1/I2/I4(有符号整数)、F4/F8(浮点)、B(二进制)等类型。例如设备上报温度时,消息体可能是 <A "TEMP"><F4 25.3>,表示一个 ASCII 名称加一个 4 字节浮点值。

SECS/GEM 协议族分层与消息封装关系 GEM 应用层 状态模型、报警、事件报告、变量收集、远程命令、配方管理 SECS-II 消息层 Stream / Function 语义、数据项格式(L、A、U4、F4、B…)、消息体编码 SECS-I 传输 RS-232 串行、块传输、握手、超时重传 HSMS 传输 TCP/IP、会话管理、Select/Deselect、心跳 SECS-II 消息结构(以 S1F13 为例) Device ID W-bit + S1 Function 13 PType / SType System Bytes 消息体示例:<L [2]> <A "EAP"> <A "1.0"> → 表示主机名与版本号 W-bit=1 时,接收方必须回复对应 F 号(如 S1F14)完成事务

接下来是“流与功能号”。Stream 表示一类业务主题,Function 表示该主题下的具体动作。常用流包括:S1 通信与状态、S2 设备控制与诊断、S5 报警、S6 事件报告、S7 配方、S9 错误、S10 终端消息。以 S6 为例,S6F11 是“事件报告发送”,设备在状态变化或工艺完成时主动上报;主机收到后回 S6F12 确认。S5F1 是报警上报,S5F3 用于使能或禁止报警。理解流与功能号,等于掌握了设备与主机之间的“对话词典”。

会话层与事务层是实际联机调试中最容易出问题的部分。会话层负责“连接是否建立、是否保持”。HSMS 通过 Select 请求进入 Selected 状态,之后才能收发数据;如果长时间无数据,需靠心跳(Linktest)维持。SECS-I 则通过 ENQ/EOT/ACK/NAK 握手建立块传输。事务层负责“一次请求—回复”的配对:每条带 W-bit 的消息都有唯一 System Bytes,回复消息必须携带相同 System Bytes,否则会被判为孤立消息。EAP 侧通常维护一个事务表,记录已发出但未回复的消息,超时后触发重试或报警。

层次代表协议关键职责常见参数/状态
应用层GEM状态模型、报警、事件、配方Control State、Events、Alarms
消息层SECS-II流/功能号、数据项编码SxFy、L/A/U4/F4
传输层SECS-I / HSMS串行块传输 / TCP 会话Baud、Device ID、Select、Linktest
实际配置时,先确认设备支持 HSMS 还是 SECS-I,再确认 Device ID、IP/端口或串口参数,最后核对 GEM 能力集(哪些 SxFy 已实现)。三层参数必须一致,否则会出现“TCP 已连接但消息不回复”的现象。

用一个教学示例串起来:假设 EAP 要读取设备温度。EAP 发送 S1F3(请求状态变量),消息头 W-bit=1,System Bytes=0x00000001,消息体列出要查询的 SVID 列表。设备收到后,若支持该功能,回复 S1F4,System Bytes 仍为 0x00000001,消息体携带对应温度值,例如 <F4 25.3>。若设备不支持,则回 S1F0 或 S9F5。整个过程在 HSMS 的 Selected 会话内完成,底层 TCP 只负责字节流,不关心里面是 S1F3 还是 S6F11。这就是分层带来的清晰边界:传输层保证可达,消息层保证可解析,GEM 保证行为可预期。

最后强调一个常见误区:GEM 不是一种传输方式,也不是一种消息格式,而是一套“设备应该怎么表现”的规范。它规定了设备在收到 S1F13 后应回 S1F14、在报警发生时主动发 S5F1、在状态变化时发 S6F11。SECS-II 只定义消息长什么样,GEM 定义消息在什么场景下该出现。把这三层关系理清,后续配置 EAP、抓包分析和排障时,就能快速定位问题出在链路、消息还是业务语义层。