2. HSMS协议基础:HSMS连接建立与断开、会话类型与TCP/IP端口配置

HSMS(High-Speed SECS Message Services)是SECS/GEM协议族中基于TCP/IP的传输层协议。它定义了如何在可靠的TCP连接之上封装、传输和确认SECS消息。理解HSMS的连接生命周期、会话类型以及端口配置,是进行报文捕获与协议解析的前提。

2.1 HSMS连接建立与断开

HSMS连接遵循客户端-服务器(C/S)模型。设备端(Equipment)通常作为服务器(Passive),主机端(Host)作为客户端(Active)。连接建立与断开过程由一系列控制事务(Control Transaction)完成。

2.1.1 连接建立流程

  1. TCP三次握手:Host(Active)向Equipment(Passive)的指定端口发起TCP连接。
  2. HSMS Select过程:TCP连接建立后,Host发送Select.req消息,Equipment回复Select.rsp,确认通信关系。
  3. Linktest(可选):双方可定期发送Linktest.req/rsp以检测连接活性。
关键点:HSMS连接状态分为Not Selected、Selected和Not Connected。只有处于Selected状态时,才能传输数据消息(Data Message)。
HSMS连接建立与断开时序图 Host (Active) Equipment (Passive) ① TCP三次握手 (SYN/SYN-ACK/ACK) ② Select.req (控制消息) ③ Select.rsp (确认) Selected 状态 ④ 数据消息传输 (Data Message) ⑤ TCP FIN/断开连接

2.1.2 连接断开场景

场景 触发方 行为描述
正常关闭 Host 或 Equipment 发送Separate.req,对方回复Separate.rsp,然后关闭TCP连接
超时断开 协议栈 T3(Reply Timeout)或T5(Connect Timeout)超时,主动关闭连接
异常断开 TCP/IP层 网络中断、进程崩溃导致RST或FIN,HSMS层检测到连接断开
调试注意:在报文捕获中,如果看到连续的Select.req但没有Select.rsp,通常表示被动端未正确响应,需要检查T3超时设置或被动端状态机。

2.2 会话类型:Select / Data / Reject

HSMS定义了三种主要的消息类型,通过消息头中的S(Session ID)和P(Presence)字段区分。所有消息均封装在HSMS报文格式中。

2.2.1 消息类型对比

类型 消息代码 方向 用途 是否携带数据
Select 0x01 (req) / 0x02 (rsp) Host → Equipment 建立通信会话,协商设备ID 否(控制消息)
Data 0x03 (req) / 0x04 (rsp) 双向 传输SECS-II数据(如S1F1、S2F17等) 是(SECS-II报文)
Reject 0x05 双向 拒绝无效或无法处理的消息 否(控制消息)

2.2.2 Select过程详解

Select过程是HSMS连接的核心控制事务。Host发送Select.req,其中包含设备ID(Device ID)和通信能力声明。Equipment回复Select.rsp,携带响应代码:

  • 0x00:成功(Selected)
  • 0x01:通信失败(Communication Failure)
  • 0x02:未准备好(Not Ready)
  • 0x03:设备ID冲突(Device ID Already Used)
Select.req 报文结构 HSMS 报文头 (10字节) Length Device ID S P SType PType System System Bytes (剩余) Select.req 关键字段值 S=0 (控制消息), P=0 (无数据), SType=0x01 (Select.req) Device ID = 设备标识, System ID = 事务唯一标识

2.2.3 Data消息与Reject机制

Data消息是实际承载SECS-II报文的载体。当HSMS处于Selected状态时,双方通过Data.req和Data.rsp交换SECS-II数据。Data.rsp中的响应代码(0x00成功,0x01失败)用于确认数据是否被正确接收。

Reject消息用于协议层错误处理。当收到无法识别的SType、格式错误的消息或非法的System ID时,接收方发送Reject消息。Reject消息包含原因代码:

  • 0x01:未支持的SType
  • 0x02:无效的报文长度
  • 0x03:非法的System ID
  • 0x04:超时或状态错误
调试技巧:在Wireshark或SECS调试工具中,如果看到大量Reject消息,应优先检查报文头中的SType字段是否与预期一致,以及System ID是否在有效范围内。

2.3 TCP/IP端口配置

HSMS依赖TCP/IP进行底层通信,端口配置是连接建立的第一步。标准HSMS端口号为5000(由SEMI E37标准定义),但在实际部署中可根据网络环境调整。

2.3.1 端口配置参数

参数 默认值 说明
TCP端口号 5000 Equipment监听端口,Host连接端口
IP地址 — Equipment的IP地址(通常为静态IP)
T3 (Reply Timeout) 45秒 等待回复消息的最大时间
T5 (Connect Timeout) 10秒 TCP连接建立超时
T6 (Control Timeout) 5秒 控制事务(如Select)的响应超时

2.3.2 多连接与端口复用

一个Equipment可以同时支持多个Host连接,每个连接使用不同的TCP连接(不同的源端口)。标准规定Equipment最多支持8个并发HSMS连接。端口配置时需注意:

  • 防火墙规则:确保Host到Equipment的TCP端口(默认5000)双向可达。
  • 端口冲突:避免与系统服务端口冲突,建议使用5000-5009范围。
  • 连接标识:每个连接由 (Host IP, Host Port, Equipment IP, Equipment Port) 四元组唯一标识。
HSMS多连接与端口配置架构 Host 1 IP: 192.168.1.10 Host 2 IP: 192.168.1.20 Host 3 IP: 192.168.1.30 防火墙 Equipment IP: 192.168.1.100 端口: 5000 最大连接: 8 每个Host使用不同源端口

2.3.3 端口配置示例

以下是一个典型的HSMS端口配置代码片段(C#风格,用于配置连接参数):

// HSMS连接配置示例
public class HsmsConnectionConfig
{
    public string EquipmentIp { get; set; } = "192.168.1.100";
    public int Port { get; set; } = 5000;
    public int DeviceId { get; set; } = 0;
    public int T3Timeout { get; set; } = 45;   // 秒
    public int T5Timeout { get; set; } = 10;   // 秒
    public int T6Timeout { get; set; } = 5;    // 秒
    public bool IsActive { get; set; } = true; // Host为Active
}
最佳实践:在生产环境中,建议将T3设置为45-60秒,T5设置为10-15秒,T6设置为5-10秒。过短的超时会导致频繁重连,过长的超时则会影响故障检测速度。

2.4 本章小结

  • HSMS连接建立遵循TCP三次握手 + Select控制事务的流程,只有进入Selected状态才能传输数据。
  • 三种会话类型(Select、Data、Reject)分别对应连接控制、数据传输和错误处理,通过SType字段区分。
  • TCP/IP端口配置以默认5000端口为基础,需注意防火墙规则、超时参数和多连接管理。
  • 报文捕获时,重点关注Select.rsp的响应代码和Reject消息的原因代码,它们是诊断连接问题的关键线索。