4. HSMS 协议详解:会话建立、选择/分离、链路测试、数据消息传输、超时机制

HSMS(High-Speed SECS Message Services)是 SECS/GEM 协议族中基于 TCP/IP 的传输层实现。与依赖 RS-232 串口的 SECS-I 不同,HSMS 利用标准以太网基础设施,提供更高的吞吐量和更灵活的拓扑结构。本章将深入剖析 HSMS 的会话生命周期、核心控制消息、数据消息传输机制以及关键的定时器超时策略。

4.1 HSMS 协议栈与连接模型

HSMS 位于 OSI 模型的传输层(TCP)之上,会话层之下。它定义了两种逻辑角色:主动方(Active) 和 被动方(Passive)。主动方负责发起 TCP 连接,被动方则监听并接受连接。这种角色分配是 HSMS 会话建立的基础。

关键概念: HSMS 不区分“主机”与“设备”的物理角色。任何一方都可以配置为 Active 或 Passive。通常,工厂主机(Host)配置为 Active,设备(Equipment)配置为 Passive,但并非强制。
HSMS 协议栈与连接模型 HSMS 协议栈 SECS-II 消息层 HSMS 会话层 TCP 传输层 IP 网络层 以太网链路层 TCP 连接 主动方 (Active) 发起 TCP 连接 发送 Select.req 被动方 (Passive) 监听 TCP 端口 响应 Select.rsp 连接建立流程 1. Passive 监听端口 → 2. Active 发起 TCP 连接 3. TCP 三次握手完成 → 4. HSMS 会话层交互开始

4.2 会话建立与选择/分离机制

HSMS 会话的建立并非仅靠 TCP 连接完成。TCP 连接建立后,双方需要通过 选择(Select) 和 分离(Deselect) 控制消息来确立和释放逻辑会话关系。

4.2.1 选择(Select)流程

Select 流程用于在已建立的 TCP 连接上确立一个逻辑会话。只有成功完成 Select 后,双方才能开始传输数据消息。

  1. 主动方发送 Select.req: 主动方(通常是 Host)向被动方发送 Select.request 消息,请求建立会话。
  2. 被动方处理并回复 Select.rsp: 被动方(设备)检查自身状态,如果可以接受会话,则回复 Select.response,其中包含响应代码(0 表示成功)。
  3. 会话建立: 主动方收到成功的 Select.rsp 后,会话进入“已选择(Selected)”状态,双方可以开始数据通信。
实践要点: 一个 TCP 连接上只能有一个 HSMS 会话。如果 Select 失败(例如设备繁忙),主动方应等待一段时间后重试,或检查设备状态。

4.2.2 分离(Deselect)流程

Deselect 用于正常终止一个已建立的 HSMS 会话,但通常不关闭 TCP 连接。分离后,双方回到“未选择(Not Selected)”状态,可以重新进行 Select。

  • Deselect.req: 任一方均可发送 Deselect.request 消息。
  • Deselect.rsp: 接收方回复 Deselect.response,确认分离。
  • 状态转换: 会话状态从“Selected”变为“Not Selected”。
HSMS 会话状态机:Select / Deselect 未选择 Not Selected 已选择 Selected Select.req/rsp (成功) Deselect.req/rsp 注意:Deselect 不关闭 TCP 连接。TCP 连接关闭由链路测试或应用层决定。 重新 Select 前,双方必须处于 Not Selected 状态。

4.3 链路测试(Link Test)机制

HSMS 使用 Link Test 消息来检测 TCP 连接的健康状态,防止因网络故障导致“死连接”(Half-Open Connection)。Link Test 是 HSMS 保持连接活跃性的核心机制。

消息类型 方向 功能描述 触发条件
Linktest.req 任一方 → 对方 发送链路测试请求,探测连接是否存活 T3 定时器超时(无数据消息时)
Linktest.rsp 对方 → 发起方 回复链路测试响应,确认连接正常 收到 Linktest.req 后立即回复
常见问题: 如果 Linktest.req 发送后未收到 Linktest.rsp,发起方应等待 T5 定时器超时后关闭 TCP 连接并尝试重连。这是防止“僵尸连接”的关键。
Link Test 消息交互流程 主动方 (Active) Host / Equipment 被动方 (Passive) Equipment / Host Linktest.req Linktest.rsp T3 定时器:控制 Linktest.req 发送间隔(通常 10-30 秒) T5 定时器:等待 Linktest.rsp 的超时时间(通常 5-10 秒) 超时未收到 rsp → 关闭 TCP 连接 → 重新建立连接

4.4 数据消息传输

在会话处于 Selected 状态后,双方可以通过 HSMS 传输 SECS-II 数据消息。HSMS 定义了两种数据消息类型:Data Message 和 Reply Message。

  • Data Message: 用于传输 SECS-II 流/功能(SxFy)消息。消息头中的 W-bit(Wait-bit)指示是否需要回复。
  • Reply Message: 当 W-bit = 1 时,接收方必须回复一条 Reply Message。Reply Message 的消息 ID 必须与对应的 Data Message 匹配。
消息格式: 每个 HSMS 消息由 消息头(Header) 和 消息体(Body) 组成。消息头包含长度、会话 ID、消息类型、流/功能号等关键字段。消息体包含 SECS-II 数据项。
数据消息传输流程(W-bit = 1) 主机 (Host) 发送 Data Message 设备 (Equipment) 处理并回复 Data Message (W-bit=1) S1F1, S2F41, ... Reply Message S1F2, S2F42, ... HSMS 消息结构 消息长度 消息头 (Header) 消息体 (Body) - SECS-II 数据

4.5 超时机制(Timers)

HSMS 协议定义了多个定时器来保证通信的可靠性和健壮性。这些定时器是 HSMS 实现中必须正确配置的关键参数。

定时器 默认值 用途 超时处理
T1 1.0 秒 等待单个消息字符的间隔时间(SECS-I 兼容) 重传或断开连接
T2 10.0 秒 等待完整消息到达的时间 丢弃不完整消息
T3 45.0 秒 等待 Reply Message 的超时时间 重发 Data Message 或报告错误
T4 45.0 秒 等待 Select.rsp 或 Deselect.rsp 的超时时间 重发 Select/Deselect 请求
T5 10.0 秒 等待 Linktest.rsp 的超时时间 关闭 TCP 连接并重连
T6 5.0 秒 等待控制消息(如 Separate)的响应超时 断开连接
T7 10.0 秒 等待 TCP 连接建立完成的超时时间 重试连接
T8 5.0 秒 等待网络数据包到达的间隔时间 触发 Link Test
配置建议: 在产线环境中,T3 和 T5 是最常需要调整的定时器。如果设备处理速度较慢,应适当增大 T3 值;如果网络延迟较高,应适当增大 T5 值。错误的定时器配置会导致频繁的会话断开和重连。
HSMS 超时机制时序图 时间 主动方 被动方 Data Message (W-bit=1) T3 定时器启动 等待 Reply Reply Message T3 定时器停止 如果 T3 超时前未收到 Reply,主动方应重发 Data Message 或报告通信错误。 T3 默认值 45 秒,可根据设备处理能力调整。

4.6 总结与最佳实践

HSMS 协议是 SECS/GEM 通信的基石,理解其会话管理、链路测试、数据消息传输和超时机制对于实现稳定可靠的产线集成至关重要。

  • 会话管理: 始终确保在 Select 成功后传输数据,Deselect 后不要发送数据消息。
  • 链路测试: 合理配置 T3 和 T5 定时器,避免因网络抖动导致不必要的连接断开。
  • 数据消息: 注意 W-bit 的使用,确保 Reply Message 的消息 ID 与 Data Message 匹配。
  • 超时配置: 根据实际网络环境和设备性能调整定时器参数,避免使用默认值一刀切。
实战建议: 在开发 HSMS 通信适配器时,建议先实现完整的会话状态机,再逐步添加数据消息和链路测试功能。使用日志记录所有 HSMS 控制消息的收发,便于调试和问题定位。