1. HSMS 协议概述
1.1 HSMS 在 SECS/GEM 体系中的位置
SECS/GEM 协议族是半导体制造设备与工厂主机(Host)之间通信的国际标准(SEMI E4/E5/E30/E37)。HSMS(High-Speed SECS Message Services,SEMI E37)位于该体系中的传输层,负责在 TCP/IP 网络上可靠地传输 SECS-II 消息。
体系层级速览: GEM(E30,设备行为模型)→ SECS-II(E5,消息格式与内容)→ HSMS(E37,TCP/IP 传输)或 RS-232(E4,串行传输)。
1.2 HSMS vs RS-232 对比
HSMS 与 RS-232 是 SECS/GEM 体系中两种截然不同的物理/传输层实现。理解它们的差异,有助于在连接建立失败时快速定位问题根源。
| 对比维度 | HSMS (E37) | RS-232 (E4) |
|---|---|---|
| 物理层 | 以太网 (TCP/IP) | 串行电缆 (RS-232C) |
| 传输速率 | 10/100/1000 Mbps 及以上 | 典型 9600 ~ 38400 bps |
| 最大距离 | 100 米(交换机级联可扩展) | 约 15 米 |
| 连接方式 | 主动连接(设备/Host 均可发起) | 固定点对点 |
| 消息边界 | 长度头 + 数据块(4 字节头) | 依赖超时或特殊字符 |
| 多设备支持 | 支持(通过 IP 地址和端口) | 仅点对点 |
| 连接建立 | TCP 三次握手 + HSMS 控制消息 | 物理连接 + 波特率协商 |
| 调试复杂度 | 中等(需检查网络、端口、防火墙) | 较低(需检查线缆、串口参数) |
调试提示: 如果现场同时存在 HSMS 和 RS-232 设备,务必先确认设备配置的传输层类型。HSMS 连接失败时,TCP 连通性是第一排查点;RS-232 失败时,波特率和线缆定义是第一排查点。
1.3 HSMS 基本通信模型
HSMS 采用客户端-服务器(Client-Server)模型,但角色分配与常规 TCP 应用有所不同:
- 主动方(Active):发起 TCP 连接请求的一方,通常是设备(Equipment)或主机(Host)。
- 被动方(Passive):监听 TCP 端口,等待连接的一方。
- 连接建立后:双方对等通信,不再区分主动/被动。
HSMS 连接的生命周期包含以下阶段:
- TCP 连接建立:三次握手,建立底层传输通道。
- HSMS 控制消息交换:发送
Select.req/Select.rsp建立 HSMS 会话。 - 数据通信:传输 SECS-II 消息(Data Message)。
- 连接断开:发送
Deselect.req/Separate.req或 TCP 断开。
1.4 HSMS 消息格式
HSMS 在 TCP 流上传输的消息具有固定格式的头部(Header)和可选的正文(Data):
HSMS 消息格式(SEMI E37):
+--------+--------+--------+--------+
| 长度 (Length) | S (1) | F (1) |
+--------+--------+--------+--------+
| PType | SType | Session ID |
+--------+--------+--------+--------+
| 系统字节 (System Bytes) |
+--------+--------+--------+--------+
| 数据正文 (Data Block,可选) |
+--------+--------+--------+--------+
字段说明:
- Length: 4 字节,表示后续所有字节的总长度(包括头部自身 10 字节 + 数据正文)
- S/F: 各 1 字节,Stream 和 Function 编号(仅 Data Message 有效)
- PType: 1 字节,协议类型(0x00 表示 HSMS)
- SType: 1 字节,会话类型(0x00 表示 Data Message,非 0 表示控制消息)
- Session ID: 2 字节,设备标识
- System Bytes: 4 字节,消息唯一标识,用于请求-响应匹配
常见陷阱: 许多连接建立失败案例的根因是 HSMS 消息头格式错误,例如 Length 字段计算不正确(未包含头部自身长度)、Session ID 不匹配、System Bytes 重复等。在抓包分析时,务必逐字节验证 HSMS 头部。
1.5 HSMS 控制消息类型
HSMS 定义了 6 种控制消息(SType ≠ 0),用于连接管理和会话控制:
| SType | 消息名称 | 方向 | 用途 |
|---|---|---|---|
| 0x00 | Data Message | 双向 | 传输 SECS-II 数据 |
| 0x01 | Select.req | 主动方 → 被动方 | 请求建立 HSMS 会话 |
| 0x02 | Select.rsp | 被动方 → 主动方 | 响应 Select 请求(成功/失败) |
| 0x03 | Deselect.req | 双向 | 请求断开 HSMS 会话 |
| 0x04 | Deselect.rsp | 双向 | 响应 Deselect 请求 |
| 0x05 | Separate.req | 双向 | 通知对方即将断开连接 |
| 0x06 | Reject.req | 双向 | 拒绝无效或无法处理的消息 |
调试要点: 在 HSMS 连接建立失败时,抓包分析应重点关注:
① 是否收到
② 是否回复
③
如果
① 是否收到
Select.req?② 是否回复
Select.rsp?③
Select.rsp 的返回码是否为 0x0000(成功)?如果
Select.rsp 返回非 0 值,说明会话建立被拒绝,需检查设备 ID 冲突或配置错误。