1. HSMS 协议概述
1.1 HSMS 在 SECS/GEM 协议栈中的位置
SECS/GEM 协议族采用分层架构,HSMS(High-Speed SECS Message Services)位于传输层,替代传统的 RS-232 物理连接,为上层 SECS-II 消息提供基于 TCP/IP 的可靠传输通道。下图展示了 HSMS 在完整协议栈中的定位:
关键理解:HSMS 是 SECS/GEM 协议栈中承上启下的核心层。它屏蔽了底层 TCP/IP 的复杂性,向上层 SECS-II 提供统一的“连接-发送-接收-断开”接口,同时负责连接状态管理和重连逻辑,是设备自动化通信的“骨架”。
1.2 HSMS vs RS-232:核心差异对比
传统 SECS-I 基于 RS-232 串口通信,而 HSMS 基于以太网 TCP/IP。两者在物理介质、传输速率、连接模型和可靠性方面存在本质差异:
| 对比维度 | HSMS(以太网) | RS-232(串口) |
|---|---|---|
| 物理介质 | 双绞线/光纤,距离可达 100m+ | 串口线,距离通常 ≤ 15m |
| 传输速率 | 100 Mbps / 1 Gbps 及以上 | 9.6 kbps ~ 115.2 kbps |
| 连接模型 | 主动/被动双端模型,支持多会话 | 主从模式,点对点单会话 |
| 消息分帧 | 4 字节长度头 + 10 字节消息头 + 数据体 | 块传输(Block),需握手确认 |
| 错误检测 | TCP 校验和 + 应用层校验 | 奇偶校验 / CRC |
| 重连机制 | 内置状态机,支持自动重连 | 需应用层自行实现 |
| 并发支持 | 支持多设备同时连接 | 仅支持 1 对 1 |
| 部署成本 | 需交换机/路由器,布线规范 | 线缆成本低,但速率受限 |
迁移趋势:当前新建半导体工厂已全面采用 HSMS 替代 RS-232。HSMS 不仅解决了速率瓶颈,更重要的是支持 TCP 重连和连接状态监控,为高可用自动化系统奠定了基础。但 RS-232 在老旧设备改造场景中仍有存量市场。
1.3 HSMS 通信模型
HSMS 定义了两种通信角色:主动端(Active)和被动端(Passive)。两者通过 TCP 连接建立会话,并遵循严格的状态机转换规则。
1.3.1 主动端与被动端角色定义
- 主动端(Active Entity):发起 TCP 连接请求的一方。通常是上位机(Host)或设备端(Equipment),取决于配置。主动端负责监听连接状态,并在断开后发起重连。
- 被动端(Passive Entity):监听 TCP 端口,等待连接请求的一方。被动端不主动发起连接,但可以拒绝或接受连接请求。
一个 HSMS 会话中,主动端和被动端通过 连接 ID(Session ID / Device ID) 进行标识。同一 TCP 连接上可承载多个逻辑会话。
1.3.2 HSMS 连接状态机
HSMS 定义了 5 种连接状态,状态转换由控制消息和超时事件驱动:
状态机要点:
- NOT CONNECTED:初始状态,无 TCP 连接。主动端在此状态启动重连计时器。
- CONNECTED:TCP 连接已建立,但尚未完成 SECS 会话协商(S1F13/S1F14)。
- SELECTED:会话协商成功,可传输 SECS-II 数据消息。这是正常通信状态。
- LINK TEST:心跳检测状态,定期发送 Linktest 消息验证连接活性。
- RETRY:重连等待状态,按配置的间隔和次数尝试重新建立 TCP 连接。
1.3.3 HSMS 消息格式
HSMS 消息采用 长度头 + 消息头 + 数据体 的定界格式,确保 TCP 流中消息边界的正确识别:
HSMS 消息帧结构(总长度 = 4 + 10 + DataLength):
字节偏移 0-3: 消息长度(4 字节,大端序,表示消息头+数据体的总字节数)
字节偏移 4-13: 消息头(10 字节,固定长度)
- Session ID(2 字节):设备标识
- Header Byte 2(1 字节):消息类型/流号
- Header Byte 3(1 字节):功能号
- P/B 位 + 保留位(1 字节)
- System Bytes(4 字节):系统事务 ID
字节偏移 14+: 数据体(可变长度,SECS-II 数据项)
示例:S1F13(建立通信请求)的 HSMS 帧:
00 00 00 0A (长度 = 10,无数据体)
00 01 (Session ID = 1)
01 (流号 = 1)
0D (功能号 = 13)
00 (P/B = 0)
00 00 00 01 (System ID = 1)
工程提示:HSMS 消息头中的 System Bytes 是事务关联的关键字段。发送方为每条消息分配唯一 System ID,接收方在响应消息中回传相同 ID,用于请求-响应匹配。在重连场景中,System ID 的连续性管理直接影响通信可靠性。
1.3.4 HSMS 控制消息与数据消息
HSMS 定义了 6 种控制消息,用于连接管理和心跳检测:
| 消息类型 | 代码 | 方向 | 用途 |
|---|---|---|---|
| Select.req | 0x01 | 主动端 → 被动端 | 请求建立 SECS 会话 |
| Select.rsp | 0x02 | 被动端 → 主动端 | 响应会话建立请求(成功/失败) |
| Deselect.req | 0x03 | 任一端 | 请求断开 SECS 会话 |
| Deselect.rsp | 0x04 | 对端 | 响应会话断开请求 |
| Linktest.req | 0x05 | 任一端 | 心跳检测请求 |
| Linktest.rsp | 0x06 | 对端 | 心跳检测响应 |
数据消息(SECS-II 消息)通过 HSMS 传输时,消息头中的 流号(Stream) 和 功能号(Function) 标识具体消息类型,例如 S1F13(建立通信请求)、S6F11(事件报告)等。
通信模型总结:HSMS 采用“TCP 连接 + 会话协商 + 状态机管理”的三层通信模型。主动端/被动端角色清晰,状态机确保连接建立、心跳维持、异常断开和重连的完整生命周期管理。理解这一模型是后续重连策略调优的基础。