2. HSMS连接建立机制精讲

HSMS(High-Speed SECS Message Services)是SEMI E37标准定义的通信协议,它把SECS-II消息承载在TCP之上,用于设备与主机之间的高速数据交换。很多现场“连不上”“连上又断”“Select失败”的问题,根源并不在SECS-II报文本身,而在HSMS连接建立这一层。理解主动/被动模式、TCP三次握手、Select/Deselect交互以及状态机与超时参数,是后续排障的基础。

一、主动模式与被动模式:谁发起连接

HSMS把通信两端分为两种角色:Active(主动)和Passive(被动)。主动方负责发起TCP连接,被动方负责监听端口并接受连接。角色由配置决定,与设备是主机还是设备无关。常见约定是主机侧配置为Active,设备侧配置为Passive,但也可以反过来,只要两端配置互补即可。

被动方需要绑定一个监听端口,HSMS默认端口是5000,实际项目中常改为其他端口以避免冲突。主动方需要知道被动方的IP和端口。如果两端都配成Active,则双方都在发起连接,没有监听方,连接永远建立不起来;如果两端都配成Passive,则双方都在等待,同样无法建立。这是现场最常见的配置错误之一。

判断口诀:一端Active、一端Passive,且Active指向Passive的IP和端口,TCP连接才有建立的可能。

二、TCP连接建立过程

HSMS的底层是标准TCP连接。主动方调用connect()向被动方的IP:Port发起SYN,被动方回复SYN+ACK,主动方再回复ACK,三次握手完成后TCP连接进入ESTABLISHED状态。此时只是TCP通道通了,HSMS层还没有真正“可用”。

TCP连接建立后,双方进入HSMS的Connected状态,但还不能收发SECS-II数据消息。必须经过Select交互,进入Selected状态,才允许传输数据。这一点非常关键:TCP通不等于HSMS通。

三、Select.req/Select.rsp交互

TCP连接建立后,主动方(或按配置指定的一方)发送Select.req,其中携带Session ID等参数。被动方收到后,如果同意建立HSMS会话,回复Select.rsp,状态码为0表示接受;如果拒绝,则返回非0状态码,常见如1表示已在使用、2表示不支持等。

Select.req和Select.rsp的交互过程如下:

  1. 主动方发送Select.req,启动T6定时器,等待Select.rsp。
  2. 被动方收到Select.req,检查Session ID和自身状态,决定接受或拒绝。
  3. 被动方回复Select.rsp,状态码0表示接受。
  4. 主动方收到Select.rsp且状态码为0,停止T6,双方进入Selected状态。

如果T6超时仍未收到Select.rsp,主动方会认为Select失败,通常关闭TCP连接并重试。T6默认值一般为45秒,实际项目中可根据网络质量调整,但不宜过短,否则容易误判。

四、Deselect.req/Deselect.rsp交互

当需要正常结束HSMS会话但保留TCP连接时,一方发送Deselect.req,另一方回复Deselect.rsp。Deselect完成后,双方从Selected状态回到Connected状态,TCP连接仍然保持。之后可以再次发起Select,重新进入Selected状态。

Deselect与直接断开TCP不同:Deselect是“优雅地退出会话”,TCP连接还在;而直接关闭TCP会同时终止会话和连接。现场调试时,如果只想临时停止数据交换而不想重新建立TCP,可以用Deselect。

五、连接状态机

HSMS连接状态可以用一个简化的状态机来描述,主要状态包括:

  • Not Connected:尚未建立TCP连接。
  • Connected:TCP已建立,但未Select,不能收发数据消息。
  • Selected:Select成功,可以收发SECS-II数据消息。

状态迁移关系为:Not Connected → Connected(TCP建立成功);Connected → Selected(Select成功);Selected → Connected(Deselect成功);Connected → Not Connected(TCP断开);Selected → Not Connected(TCP断开或通信异常)。

HSMS 连接状态机与 Select/Deselect 交互 Not Connected 未建立 TCP 连接 Connected TCP 已通,未 Select Selected 可收发 SECS-II 数据 TCP 建立 Select 成功 Deselect 成功 TCP 断开 Select 超时 / 拒绝 T6 超时或状态码非 0 Select 失败 关闭 TCP 并重试 关键超时参数 T3:回复超时(Reply Timeout),默认 45s,等待对方回复数据消息 T5:连接分离超时(Connect Separation Timeout),默认 10s,重连间隔 T6:控制事务超时(Control Transaction Timeout),默认 45s,等待 Select.rsp / Deselect.rsp T7:Not Selected 超时,默认 10s,TCP 建立后等待 Select.req 的时间

六、超时参数与常见故障判断

HSMS定义了多个定时器,与连接建立直接相关的主要有T5、T6、T7:

定时器名称默认值作用超时后果
T5Connect Separation Timeout10s两次连接尝试之间的间隔重连节奏变慢,但不影响单次连接
T6Control Transaction Timeout45s等待Select.rsp或Deselect.rspSelect失败,关闭TCP并重试
T7Not Selected Timeout10sTCP建立后等待Select.req未收到Select.req则关闭TCP

现场排障时,可以按以下顺序判断:

  1. TCP是否建立?如果TCP都建不起来,检查IP、端口、防火墙、Active/Passive配置。
  2. TCP建立后是否收到Select.req?如果T7超时,说明主动方没有发Select.req,检查主动方配置和程序状态。
  3. Select.req发出后是否收到Select.rsp?如果T6超时,检查被动方是否正常处理、Session ID是否匹配。
  4. Select.rsp状态码是否为0?非0说明被动方拒绝,需查看拒绝原因。
  5. Selected后是否稳定?如果频繁Deselect或断开,检查T3、T5等参数和网络质量。
注意:T6和T7的默认值在不同设备和软件中可能不同,调试时应以实际配置为准,不要盲目套用默认值。

七、配置示例

以下是一个典型的HSMS连接配置示例(以某设备侧Passive配置为例):

HSMS Mode        = Passive
Listen Port      = 5000
Session ID       = 0
T5               = 10
T6               = 45
T7               = 10
Device ID        = 1

主机侧Active配置示例:

HSMS Mode        = Active
Remote IP        = 192.168.1.100
Remote Port      = 5000
Session ID       = 0
T5               = 10
T6               = 45
T7               = 10
Device ID        = 1

两端Session ID必须一致,否则Select.rsp会返回错误。Device ID用于SECS-II层,与HSMS层Session ID不是同一个概念,不要混淆。

八、小结与排障要点

HSMS连接建立的核心是:Active发起TCP,Passive监听;TCP建立后进入Connected;Select成功进入Selected;Deselect回到Connected;TCP断开回到Not Connected。T6和T7是连接建立阶段最关键的定时器。排障时先看TCP,再看Select,最后看数据消息,逐层定位,避免一上来就抓SECS-II报文。