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

多块传输流程(Multi-Block Transfer) 发送端(Host) 接收端(Equipment) Block 1 (S-bit=1, E-bit=0, Seq=1) Block 2 (S-bit=0, E-bit=0, Seq=2) Block 3 (S-bit=0, E-bit=1, Seq=3) 重组完整消息 ⚠ 诊断要点: 若接收端未收到 E-bit=1 的结束块,将等待 T3 超时后断开连接。检查 System Bytes 是否一致、Block Sequence Number 是否连续。

故障排查提示: 多块传输故障常表现为“消息重组超时”或“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)消息。流程如下:

  1. 发起 Select:Host 发送 S1F13 消息,HSMS 头部 Control Code = 0x01(Select.req)。
  2. 设备响应:Equipment 回复 S1F14(Establish Communication Acknowledge),Control Code = 0x02(Select.rsp)。
  3. 状态确认: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

Select/Deselect 状态机 Not Selected 初始状态 / 空闲 Selected 控制消息可发送 S1F13 (Select.req) → S1F14 (COMMACK=0) S1F13 (Deselect.req) → S1F14 (COMMACK=0) T3 超时 / 连接断开 ⚠ 诊断要点: • 若 Select 后 COMMACK ≠ 0x00,检查设备是否已处于 Selected 状态或未就绪。 • 若 Deselect 后仍能收到控制消息,说明设备未正确释放状态,需检查协议栈实现。

实战经验: 在设备调试阶段,若 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 Equipment Linktest.req (Control Code=0x05) Linktest.rsp (Control Code=0x06) 超时场景:连续 3 次无响应 → 断开连接 T3 超时 → 重试 → 再次超时 → 重试 → 第三次超时 → 触发 Disconnect ⚠ 诊断要点: 若 Host 日志显示“Linktest timeout”且连接频繁断开,请检查 T6 间隔是否过短、网络延迟是否超过 T3、设备是否支持 Linktest。

重要提醒: 部分老旧设备可能未实现 Linktest 机制。若 Host 开启 Linktest 而设备不响应,将导致连接反复断开。建议在设备选型阶段确认其 HSMS 协议栈是否完整支持 Linktest,或通过配置关闭 Host 端的 Linktest 功能。

4.4 本章小结

HSMS 的三种通信模式构成了 SECS/GEM 通信的底层骨架:

  • 单块/多块传输 决定了消息的拆分与重组策略,多块传输的故障排查重点在于块标志位与序列号连续性。
  • Select/Deselect 流程管理控制关系的建立与释放,COMMACK 参数是诊断 Select 失败的关键线索。
  • Linktest 机制 作为应用层心跳,是检测“死连接”的有效手段,超时参数 T3/T6 的合理配置至关重要。