4. HSMS通信机制

HSMS(High-Speed SECS Message Services)是SEMI E37标准定义的通信协议,用于在TCP/IP之上承载SECS-II消息。与传统的SECS-I串行通信相比,HSMS摆脱了物理链路限制,支持多设备并发连接、更高的传输速率和更灵活的组网方式。理解HSMS的通信机制,是进行协议测试与故障排查的基础。本节围绕TCP/IP连接建立、Select选择过程、心跳机制、分离超时、连接状态机以及常见配置参数展开,帮助读者建立完整的HSMS通信认知框架。

一、核心原理:HSMS在TCP/IP之上的会话层

HSMS本质上是在TCP/IP传输层之上构建的一套会话控制协议。TCP负责字节流的可靠传输,而HSMS负责定义消息边界、会话建立、连接保活和异常断开。HSMS定义了两种角色:Active端主动发起TCP连接,Passive端监听端口等待连接。在半导体设备中,通常设备端作为Passive,主机端作为Active,但角色可以互换。

HSMS消息由4字节长度前缀和消息体组成。消息体包含10字节头部和可选的SECS-II数据。头部中的Session ID、Stream、Function、PType、SType、System Bytes等字段决定了消息的类型和路由。其中SType用于区分数据消息(SType=0)和控制消息(SType=1~9),控制消息包括Select.req、Select.rsp、Deselect.req、Linktest.req、Separate.req等。

关键点:HSMS连接建立后,必须经过Select过程才能传输SECS-II数据消息。未完成Select的连接只能发送控制消息,不能发送数据消息。

二、连接建立与Select选择过程

HSMS连接的完整建立分为两个阶段:TCP连接阶段和HSMS会话阶段。

阶段一:TCP连接。Active端向Passive端的指定端口(默认5000)发起TCP三次握手。连接成功后,双方进入HSMS状态机的CONNECTED状态。此时TCP链路已通,但HSMS会话尚未建立。

阶段二:Select选择。Active端发送Select.req消息,携带Session ID和超时参数。Passive端收到后,若允许该Session ID接入,则回复Select.rsp,状态码为0表示接受。双方进入SELECTED状态,此时才能收发SECS-II数据消息。若Passive端拒绝,Select.rsp状态码非0,连接可能被关闭或保持CONNECTED状态。

Select.req 消息结构示例:
Length   = 10
SessionID = 0xFFFF (或指定ID)
HeaderByte2 = 0x00
HeaderByte3 = 0x00
PType    = 0x00
SType    = 0x01  (Select.req)
SystemBytes = 0x00000001

Select.rsp 消息结构示例:
SType    = 0x02  (Select.rsp)
SystemBytes = 0x00000001
Status   = 0x00  (接受)

Select过程是HSMS通信的第一个关键检查点。测试中常见的问题是Select.req发出后无响应,或Select.rsp返回非0状态码。排查时需确认Session ID是否匹配、Passive端是否已启动监听、防火墙是否放行端口。

三、心跳机制与分离超时

HSMS使用Linktest.req/Linktest.rsp作为心跳机制,用于检测TCP连接是否仍然有效。当连接空闲超过T7超时时间时,Active端应发送Linktest.req,Passive端回复Linktest.rsp。若在T7时间内未收到响应,则判定连接异常,进入分离流程。

分离超时(Separate Timeout)是HSMS连接管理的另一重要机制。当一方发送Separate.req或检测到通信异常时,会启动分离超时计时。若在超时时间内未能正常关闭连接,则强制断开TCP连接。常见的超时参数包括:

参数含义典型值作用
T3回复超时45秒等待SECS-II回复的最大时间
T5连接分离超时10秒等待Separate.rsp或断开的时间
T6控制消息超时5秒等待Select.rsp、Linktest.rsp等控制消息的时间
T7空闲心跳超时10秒连接空闲后发送Linktest.req的间隔
T8网络字符间超时5秒接收消息字节间的最大间隔

提示:T7并非标准强制参数,不同厂商实现可能不同。测试时应以设备手册或主机配置为准,避免因心跳间隔不一致导致误判断开。

四、连接状态机

HSMS连接状态机描述了从TCP连接到会话建立、数据传输、异常分离的完整生命周期。主要状态包括:

  • NOT_CONNECTED:初始状态,TCP连接未建立。
  • CONNECTED:TCP连接已建立,但HSMS会话未选择。
  • SELECTED:Select过程完成,可收发数据消息。
  • SEPARATING:正在执行分离流程,等待Separate.rsp或超时。

状态迁移由事件驱动:TCP连接成功触发NOT_CONNECTED→CONNECTED;收到Select.req并接受触发CONNECTED→SELECTED;发送或收到Separate.req触发SELECTED→SEPARATING;分离完成或超时触发SEPARATING→NOT_CONNECTED。理解状态机有助于定位故障:例如连接频繁断开,可能是T7心跳未响应导致状态机从SELECTED回退到NOT_CONNECTED。

HSMS 连接状态机与关键超时 NOT_CONNECTED TCP未连接 CONNECTED TCP已连接,未Select SELECTED 可收发数据消息 SEPARATING 分离中,等待T5 TCP连接成功 Select.req/rsp Separate.req 或T7超时 T5超时/断开 Select失败 关键超时参数: T3=45s(回复超时) T5=10s(分离超时) T6=5s(控制消息超时) T7=10s(心跳间隔) T8=5s(字符间超时) 心跳:空闲超过T7发送Linktest.req,未收到Linktest.rsp则进入SEPARATING

五、常见配置参数与实操排查

HSMS通信的稳定性高度依赖配置参数的一致性。以下是一份典型的HSMS配置清单,测试前应逐项核对:

  • IP地址与端口:Active端目标IP、Passive端监听端口(默认5000)。
  • 角色配置:设备端和主机端必须一Active一Passive,不能同时为Active或同时为Passive。
  • Session ID:双方必须一致,通常设备端为0xFFFF或指定值。
  • Device ID:SECS-II消息中的设备标识,需与主机配置匹配。
  • T3/T5/T6/T7/T8:超时参数需双方协调,避免一方等待过短导致误断。
  • 心跳开关:部分实现允许关闭Linktest,但生产环境建议开启。

常见误区:认为TCP连接成功就等于HSMS通信正常。实际上,TCP连接成功仅表示网络可达,若Select过程失败或Session ID不匹配,数据消息仍无法传输。排查时应先确认状态机是否进入SELECTED状态,再检查数据消息的Stream/Function是否被对方支持。

案例场景:某设备端日志显示TCP连接反复建立又断开,周期约10秒。检查发现T7设置为10秒,但Passive端未正确回复Linktest.rsp。进一步排查发现Passive端软件版本存在心跳处理缺陷,升级后恢复正常。该案例说明,心跳机制虽简单,但实现不一致会直接导致连接不稳定。

复盘要点:HSMS故障排查应遵循“先链路、再会话、后数据”的顺序。先确认TCP端口可达,再确认Select过程完成,最后检查数据消息的格式和回复。利用抓包工具(如Wireshark)观察HSMS控制消息的交互时序,可以快速定位是Select超时、心跳丢失还是分离异常。掌握连接状态机和各超时参数的含义,是高效排查HSMS通信问题的关键。