3. HSMS协议详解:TCP/IP物理层、连接建立与断开、消息格式、会话管理

HSMS(High-Speed SECS Message Services)是SECS/GEM协议栈中负责在TCP/IP网络上传输SECS-II消息的通信层。它定义了如何将SECS-II数据块封装成标准化的消息格式,并通过可靠的TCP连接在主机(Host)与设备(Equipment)之间进行交换。本章将深入剖析HSMS协议的物理层依赖、连接生命周期、消息结构以及会话管理机制。

3.1 TCP/IP物理层与端口约定

HSMS完全依赖于TCP/IP协议栈作为其底层传输载体。与传统的RS-232串口SECS-I不同,HSMS利用TCP的面向连接、可靠传输特性,实现了更高的通信速率和更远的传输距离。

特性 HSMS (TCP/IP) SECS-I (RS-232)
传输层协议 TCP 串行通信
物理介质 以太网 串口线
默认端口 5000 (主机监听) N/A
连接方式 主动/被动建立 点对点直连
传输速率 10/100/1000 Mbps 9600 bps 典型
可靠性 内置重传与校验 需应用层校验
端口约定: 在标准HSMS通信中,主机(Host)通常在TCP端口 5000 上监听连接请求。设备(Equipment)作为客户端主动发起连接。虽然端口号可以配置,但5000是SEMI标准推荐的默认值,绝大多数设备厂商均遵循此约定。

下图展示了HSMS在TCP/IP协议栈中的位置以及物理层连接的基本拓扑:

HSMS TCP/IP 物理层与协议栈 SECS-II (应用层) HSMS (会话层) TCP (传输层) IP (网络层) 以太网 (链路层) SECS-II (应用层) HSMS (会话层) TCP (传输层) IP (网络层) 以太网 (链路层) TCP 连接 (端口 5000) 物理介质:以太网线 / 光纤 HSMS 消息交换

3.2 连接建立与断开

HSMS的连接管理分为两个层面:TCP连接的建立与断开,以及HSMS会话的建立与断开。TCP连接是基础,HSMS会话则是在TCP连接之上通过特定的控制消息进行协商。

3.2.1 连接建立流程

标准的HSMS连接建立遵循“主动-被动”模式。设备(Equipment)作为TCP客户端主动连接主机(Host)的监听端口。连接建立后,设备发送 Select.req 消息请求建立HSMS会话,主机回复 Select.rsp 确认。

  1. TCP三次握手: 设备向主机的IP:Port发起TCP连接请求。
  2. HSMS Select请求: TCP连接建立后,设备发送 Select.req 消息,请求激活HSMS会话。
  3. HSMS Select响应: 主机处理请求,回复 Select.rsp,其中包含响应代码(0表示成功)。
  4. 会话激活: 双方进入“已选择(Selected)”状态,可以开始收发SECS-II消息。
关键点: TCP连接建立后,HSMS会话并不会自动激活。必须通过 Select.req/rsp 握手后,通信双方才正式进入可通信状态。这是HSMS区别于普通TCP应用的重要特征。

下图展示了完整的连接建立与断开序列:

HSMS 连接建立与断开序列 主机 (Host) 设备 (Eq) ① TCP SYN (设备→主机) ② TCP SYN+ACK (主机→设备) ③ TCP ACK (设备→主机) — TCP连接建立 ④ Select.req (设备→主机) ⑤ Select.rsp (主机→设备) [HC=0] 会话已选择 (Selected) ⑥ 数据消息交换 (Primary/Secondary) ⑦ Deselect.req (设备→主机) ⑧ Deselect.rsp (主机→设备) 会话断开 / TCP关闭

3.2.2 连接断开方式

HSMS连接的断开分为正常断开和异常断开两种:

  • 正常断开: 通过 Deselect.req/rsp 消息对,双方协商关闭HSMS会话,随后关闭TCP连接。
  • 异常断开: 一方检测到TCP连接中断(如网络故障、设备断电),另一方通过TCP的RST或超时机制检测到连接丢失,并清理会话状态。
  • 链路测试: HSMS定义了 Linktest.req/rsp 消息用于定期检测连接活性。如果一方在超时时间内未收到响应,则认为连接已断开。
注意: 在异常断开场景下,设备通常需要主动重新发起TCP连接和HSMS Select流程,以恢复通信。主机端应实现连接超时检测,及时清理无效会话资源。

3.3 消息格式详解

HSMS消息由消息头(Header)和数据块(Data Block)两部分组成。消息头固定为10字节,数据块为可选的SECS-II数据内容。

3.3.1 消息头结构

字节偏移 字段名称 长度 描述
0 Length 4字节 消息总长度(包含Header + Data),大端序
4 Device ID 2字节 设备ID,bit15为控制位(0=数据消息,1=控制消息)
6 Stream/Function 2字节 bit15-8: Stream编号;bit7-0: Function编号
8 P/B Type 1字节 bit7: P位(Primary=1);bit6: B位(Block=1);bit5-0: 保留
9 System Bytes 1字节 系统字节,用于消息配对(高8位)
10-13 System Bytes (续) 4字节 系统字节(低32位),与字节9共同构成4字节System ID
关键字段说明:
  • Length: 整个消息的字节数,包括10字节Header和后续Data。例如,一个无数据的控制消息Length=10。
  • Device ID: 用于标识消息的目标设备。bit15为1时表示该消息是HSMS控制消息(如Select.req),为0时表示是SECS-II数据消息。
  • P/B Type: P位指示消息是否为Primary消息(请求);B位指示是否为Block消息(用于长消息分片)。
  • System Bytes: 用于匹配请求与响应。Primary消息设置一个唯一的System ID,对应的Secondary消息必须使用相同的System ID。

3.3.2 消息类型分类

HSMS消息分为两大类:控制消息和数据消息。控制消息用于会话管理,数据消息用于承载SECS-II内容。

类别 消息名称 S/F代码 方向 用途
控制消息 Select.req N/A 设备→主机 请求建立HSMS会话
Select.rsp N/A 主机→设备 响应Select请求
Deselect.req N/A 设备→主机 请求断开HSMS会话
Deselect.rsp N/A 主机→设备 响应Deselect请求
控制消息 Linktest.req N/A 任意方向 链路活性测试
Linktest.rsp N/A 任意方向 链路测试响应
数据消息 Primary/Secondary SxFy 双向 承载SECS-II数据

以下是一个典型的HSMS数据消息(Primary消息)的字节序列示例:

// 示例:S1F1 (Are You There) 的HSMS封装
// 假设 Device ID = 10, System ID = 0x12345678

字节 0-3:  00 00 00 14    // Length = 20 (10字节Header + 10字节Data)
字节 4-5:  00 0A          // Device ID = 10 (bit15=0, 数据消息)
字节 6-7:  01 01          // Stream=1, Function=1 (S1F1)
字节 8:    80             // P/B Type: P=1 (Primary), B=0 (非分片)
字节 9-12: 12 34 56 78    // System Bytes = 0x12345678
字节 13-22: [SECS-II Data Block] // 实际SECS-II内容

3.4 会话管理

HSMS会话管理定义了通信双方的状态转换规则,确保消息的有序交换和资源的正确释放。会话状态机是HSMS实现的核心。

3.4.1 会话状态

HSMS定义了三种基本会话状态:

  • 未选择(Not Selected): TCP连接已建立,但尚未完成HSMS Select握手。此时只能收发控制消息(Select.req/rsp)。
  • 已选择(Selected): Select握手成功,双方可以收发数据消息和控制消息(如Linktest、Deselect)。
  • 已断开(Disconnected): TCP连接已关闭或尚未建立。此时无法进行任何HSMS通信。

3.4.2 状态转换规则

下图展示了HSMS会话状态机的主要转换路径:

HSMS 会话状态机 已断开 Disconnected 未选择 Not Selected 已选择 Selected TCP连接建立 Select.req/rsp 成功 Deselect.req/rsp TCP连接断开 TCP连接断开 / 超时 注意:只有处于“已选择”状态时,才能收发SECS-II数据消息 控制消息(Select/Deselect/Linktest)可在“未选择”和“已选择”状态下使用

3.4.3 会话管理最佳实践

实现建议:
  • 超时处理: 建议设置 T3 定时器(默认45秒)用于等待回复消息。超时后应重试或断开连接。
  • 链路检测: 定期发送 Linktest.req(例如每60秒),若连续3次无响应则判定连接断开。
  • 并发控制: 同一TCP连接上,HSMS会话是单线程的。不要同时发送多个未配对的Primary消息,应等待前一个回复后再发下一个。
  • 资源清理: 当检测到连接断开时,主机和设备都应立即清理与该会话相关的所有资源(如待发送队列、事务状态)。

3.5 本章小结

HSMS协议通过TCP/IP提供了可靠、高效的SECS-II消息传输通道。理解其物理层依赖、连接建立与断开流程、精确的消息头格式以及会话状态机,是实现稳定GEM通信的基础。在实际开发中,应重点关注超时处理、链路检测和状态转换的正确实现,以确保通信的健壮性。