4. Link Test会话建立
Link Test 会话的建立是 SECS/GEM 通信链路中最基础也最关键的一步。只有成功完成 TCP 连接、Port 协商与设备 ID 交换,后续的 HSMS 消息收发和 GEM 状态机迁移才有物理基础。本章从底层向上,逐步拆解这三个子过程。
4.1 TCP 连接建立过程
HSMS 协议规定,通信双方分为 主动方(Active) 和 被动方(Passive)。主动方发起 TCP 连接请求,被动方监听并接受连接。典型的连接建立时序如下:
- 被动方启动监听:被动方在指定 IP 和 Port(默认 5000)上调用
listen(),进入等待状态。 - 主动方发起连接:主动方调用
connect()向被动方 IP:Port 发起 TCP SYN 握手。 - 三次握手完成:SYN → SYN+ACK → ACK,TCP 连接建立。
- 连接确认:双方套接字进入
ESTABLISHED状态,准备进行 HSMS 层协商。
工程要点:实际部署中,主动方通常是主机(Host),被动方是设备(Equipment)。但 HSMS 规范允许角色互换,只要双方配置一致即可。
TCP 连接参数速查表
| 参数 | 默认值 | 说明 |
|---|---|---|
| 端口号 | 5000 | HSMS 标准端口,可配置 |
| 连接超时 | 10 秒 | 主动方等待连接建立的最大时间 |
| 重试间隔 | 5 秒 | 连接失败后的重试等待时间 |
| 最大重试次数 | 3 次 | 超过后报告连接失败 |
4.2 Port 协商机制
TCP 连接建立后,双方立即进入 Port 协商 阶段。Port 协商的目的是确认通信双方使用的 HSMS 端口号是否匹配,以及是否支持相同的协议版本。
协商过程通过交换 Port 协商消息 完成,该消息是 HSMS 控制消息的一种,格式如下:
Message Header:
Session ID: 0xFFFF (控制消息)
Header Byte 2: 0x00
Header Byte 3: 0x00
PType: 0x00 (控制消息)
SType: 0x01 (Port 协商)
System Bytes: 0x00000001
Data:
Port Number: 0x1388 (5000)
Protocol Version: 0x01
常见问题:如果双方配置的端口号不一致,或者一方不支持对方声明的协议版本,Port 协商将失败,TCP 连接会被立即关闭。此时需要检查设备端和主机端的端口配置是否一致。
4.3 设备 ID 交换
Port 协商成功后,进入 设备 ID 交换 阶段。设备 ID(Device ID)是 SECS/GEM 通信中用于唯一标识设备的逻辑编号,范围 0–32767。
设备 ID 交换通过 设备 ID 协商消息 完成,该消息同样是 HSMS 控制消息:
Message Header:
Session ID: 0xFFFF (控制消息)
Header Byte 2: 0x00
Header Byte 3: 0x00
PType: 0x00 (控制消息)
SType: 0x02 (设备 ID 协商)
System Bytes: 0x00000002
Data:
Device ID: 0x000A (10)
设备 ID 交换的规则如下:
- 主动方 发送自己的设备 ID 给被动方。
- 被动方 收到后,检查该 ID 是否在允许列表中。
- 如果 ID 有效,被动方回复确认消息;否则回复拒绝消息并断开连接。
- 双方设备 ID 可以相同,也可以不同,取决于系统设计。
设备 ID 交换状态表
| 步骤 | 发送方 | 消息类型 | 内容 | 接收方响应 |
|---|---|---|---|---|
| 1 | 主动方 | 设备 ID 请求 | Device ID = 10 | — |
| 2 | 被动方 | 设备 ID 确认 | Device ID = 20 | 接受连接 |
| 3 | 主动方 | — | — | 进入 Link Test 就绪状态 |
4.4 完整会话建立流程
将上述三个子过程串联起来,得到 Link Test 会话建立的完整流程:
4.5 断连故障定位要点
在实际工程中,Link Test 会话建立阶段的断连故障通常集中在以下三个环节:
- TCP 连接失败:检查网络连通性、防火墙规则、端口是否被占用。
- Port 协商失败:确认双方端口号配置一致,协议版本兼容。
- 设备 ID 交换失败:检查设备 ID 是否在允许列表中,ID 格式是否正确(0–32767)。
故障排查提示:使用 Wireshark 抓包时,过滤条件设置为
tcp.port == 5000,可以快速定位 TCP 连接阶段的问题。如果看到 RST 包,说明 Port 协商或设备 ID 交换失败。
通过以上三个子过程的逐步建立,Link Test 会话得以成功创建,为后续的 Link Test 消息收发和状态监测奠定基础。下一阶段将进入 Link Test 消息的发送与响应机制详解。