4. HSMS 通信模式:单块传输与多块传输、Select/Deselect 流程、Linktest 机制
HSMS(High-Speed SECS Message Services)作为 SEMI E37 标准定义的 TCP/IP 通信协议,其通信模式与底层机制直接决定了链路的稳定性与数据传输效率。本章将深入剖析 HSMS 的三种核心通信模式:单块传输与多块传输、Select/Deselect 流程以及Linktest 机制,帮助工程师精准定位因模式配置不当或流程异常导致的连接故障。
4.1 单块传输与多块传输
HSMS 消息在 TCP 连接上以数据块(Block)为单位进行传输。根据消息长度与传输策略,分为单块传输与多块传输两种模式。
4.1.1 概念对比
| 特性 | 单块传输(Single-Block) | 多块传输(Multi-Block) |
|---|---|---|
| 消息长度 | ≤ 当前协商的 Block Size(通常 4KB~64KB) | > Block Size,需拆分为多个数据块 |
| 传输次数 | 1 次 TCP Send 完成 | N 次 TCP Send,需重组 |
| 头部标志 | S-bit = 0(单块标志) | S-bit = 1(多块起始块),E-bit 标记结束块 |
| 典型场景 | S1F1、S9F1 等短控制消息 | S7F4(大配方上传)、S6F11(大批量数据收集) |
| 故障风险 | 低,单次超时即可判定 | 高,中间块丢失或乱序导致重组失败 |
4.1.2 多块传输的块标志位
HSMS 消息头部包含两个关键标志位用于多块传输控制:
- S-bit(Start Block Flag):多块传输的第一个数据块置 1,其余块置 0。
- E-bit(End Block Flag):多块传输的最后一个数据块置 1,其余块置 0。
接收端根据 System Bytes(系统字节) 将同一消息的多个块关联,并按 Block Sequence Number 排序重组。若中间块丢失或 E-bit 未在预期时间内到达,接收端将触发 T3 超时并断开连接。
4.1.3 多块传输流程 SVG
故障排查提示: 多块传输故障常表现为“消息重组超时”或“T3 超时断开”。排查时优先检查:① 所有块的 System Bytes 是否相同;② Block Sequence Number 是否从 1 开始且连续递增;③ 最后一个块的 E-bit 是否置 1。
4.2 Select/Deselect 流程
HSMS 连接建立后,通信双方需要通过 Select(选择) 流程确立主从关系,确保只有被选中的一方可以主动发起控制消息。Deselect 则用于释放该关系。
4.2.1 Select 流程详解
Select 流程由 主动方(通常是 Host) 发起,使用 S1F13(Establish Communication Request)消息。流程如下:
- 发起 Select:Host 发送 S1F13 消息,HSMS 头部 Control Code = 0x01(Select.req)。
- 设备响应:Equipment 回复 S1F14(Establish Communication Acknowledge),Control Code = 0x02(Select.rsp)。
- 状态确认:S1F14 中的 COMMACK 参数指示结果:
- 0x00:Select 成功,设备进入 Selected 状态。
- 0x01:Select 失败,设备忙或未就绪。
- 0x02:连接已存在,拒绝重复 Select。
4.2.2 Deselect 流程
Deselect 用于主动断开控制关系,通常由 Host 在通信结束时发起:
- Host 发送 S1F13 消息,Control Code = 0x03(Deselect.req)。
- Equipment 回复 S1F14,Control Code = 0x04(Deselect.rsp),COMMACK = 0x00 表示成功。
- Deselect 后,双方回到 Not Selected 状态,无法发送控制消息。
4.2.3 Select/Deselect 状态机 SVG
实战经验: 在设备调试阶段,若 Host 反复发起 Select 但设备始终回复 COMMACK=0x02(连接已存在),通常是因为设备端未正确释放前一次连接。此时应检查设备侧的 连接超时参数 T3 是否设置过短,或强制设备重启以重置状态。
4.3 Linktest 机制
Linktest 是 HSMS 的 心跳检测 机制,用于验证 TCP 连接在应用层是否仍然存活。它由 主动方(通常是 Host) 定期发送,被动方必须立即回复。
4.3.1 Linktest 消息格式
Linktest 使用 HSMS 控制消息,不携带 SECS 数据项:
- Linktest.req:Control Code = 0x05,由 Host 发送。
- Linktest.rsp:Control Code = 0x06,由 Equipment 回复。
消息头部中的 System Bytes 用于匹配请求与响应,确保心跳检测的可靠性。
4.3.2 Linktest 超时与重试
| 参数 | 默认值 | 说明 |
|---|---|---|
| T3(Reply Timeout) | 45 秒 | 等待 Linktest.rsp 的最大时间 |
| T5(Connect Timeout) | 10 秒 | 连接建立超时 |
| T6(Linktest Interval) | 30 秒 | 两次 Linktest 发送间隔 |
| 重试次数 | 3 次 | 连续超时后断开连接 |
4.3.3 Linktest 故障场景
- 场景一:设备未回复 Linktest.rsp → Host 等待 T3 超时后重试,连续 3 次失败则断开连接。
- 场景二:网络延迟导致 Linktest.rsp 迟到 → 若延迟超过 T3,同样触发超时断开。
- 场景三:设备协议栈未实现 Linktest → 设备忽略 Linktest.req,Host 持续超时断开。
4.3.4 Linktest 交互流程 SVG
重要提醒: 部分老旧设备可能未实现 Linktest 机制。若 Host 开启 Linktest 而设备不响应,将导致连接反复断开。建议在设备选型阶段确认其 HSMS 协议栈是否完整支持 Linktest,或通过配置关闭 Host 端的 Linktest 功能。
4.4 本章小结
HSMS 的三种通信模式构成了 SECS/GEM 通信的底层骨架:
- 单块/多块传输 决定了消息的拆分与重组策略,多块传输的故障排查重点在于块标志位与序列号连续性。
- Select/Deselect 流程管理控制关系的建立与释放,COMMACK 参数是诊断 Select 失败的关键线索。
- Linktest 机制 作为应用层心跳,是检测“死连接”的有效手段,超时参数 T3/T6 的合理配置至关重要。