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 连接建立流程
- TCP三次握手:Host(Active)向Equipment(Passive)的指定端口发起TCP连接。
- HSMS Select过程:TCP连接建立后,Host发送Select.req消息,Equipment回复Select.rsp,确认通信关系。
- Linktest(可选):双方可定期发送Linktest.req/rsp以检测连接活性。
2.1.2 连接断开场景
| 场景 | 触发方 | 行为描述 |
|---|---|---|
| 正常关闭 | Host 或 Equipment | 发送Separate.req,对方回复Separate.rsp,然后关闭TCP连接 |
| 超时断开 | 协议栈 | T3(Reply Timeout)或T5(Connect Timeout)超时,主动关闭连接 |
| 异常断开 | TCP/IP层 | 网络中断、进程崩溃导致RST或FIN,HSMS层检测到连接断开 |
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)
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:超时或状态错误
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) 四元组唯一标识。
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
}
2.4 本章小结
- HSMS连接建立遵循TCP三次握手 + Select控制事务的流程,只有进入Selected状态才能传输数据。
- 三种会话类型(Select、Data、Reject)分别对应连接控制、数据传输和错误处理,通过SType字段区分。
- TCP/IP端口配置以默认5000端口为基础,需注意防火墙规则、超时参数和多连接管理。
- 报文捕获时,重点关注Select.rsp的响应代码和Reject消息的原因代码,它们是诊断连接问题的关键线索。