3. Link Test消息结构
Link Test 消息是 SECS-I 传输层用于验证物理连接与通信链路完整性的核心控制消息。与设备业务数据不同,Link Test 消息不经过 HSMS 会话层的 Select/Deselect 状态机,而是直接在 TCP 连接上以固定格式交换。理解其消息结构是分析断连故障的基础。
3.1 Primary Message(主消息)格式
Primary Message 由主动发起方(通常是 Host 或 Equipment 的通信模块)发送,用于探测对端是否存活。其格式遵循 SECS-I 的块传输协议,但具有固定的长度与数据内容。
| 字段 | 长度(字节) | 值/说明 |
|---|---|---|
| Length | 4 | 固定为 0x0000000A(10 字节) |
| Device ID | 2 | 发送方设备标识,通常为 0x0000(Host)或设备自身 ID |
| Control Byte | 1 | 0x01(表示 Link Test Request) |
| System Bytes | 4 | 发送方生成的唯一事务 ID,用于匹配 Reply |
| Header Only | — | 无数据块(Data Block 长度为 0) |
关键点:Primary Message 不携带任何业务负载(无 SxFy 流/功能码),仅靠 Control Byte 标识消息类型。Length 固定为 10 字节,这是 SECS-I 块的最小长度。
3.2 Reply Message(回复消息)格式
对端收到 Primary Message 后,必须在 T3 超时(通常 45 秒)内回复 Reply Message。Reply 的格式与 Primary 几乎对称,但 Control Byte 不同。
| 字段 | 长度(字节) | 值/说明 |
|---|---|---|
| Length | 4 | 固定为 0x0000000A(10 字节) |
| Device ID | 2 | 回复方设备标识 |
| Control Byte | 1 | 0x02(表示 Link Test Response) |
| System Bytes | 4 | 必须与 Primary 中的 System Bytes 完全一致 |
| Header Only | — | 无数据块 |
匹配规则:Reply 的 System Bytes 是 Primary 的“回显”。如果 Host 发送 System Bytes =
0x12345678,则 Equipment 回复时必须使用相同的 0x12345678,否则 Host 将丢弃该回复并视为 Link Test 失败。
3.3 Message ID 与功能码(Control Byte)
在 SECS-I 块传输协议中,Message ID 由 Device ID 和 System Bytes 共同构成,用于唯一标识一次事务。而 功能码 在 Link Test 场景中特指 Control Byte 的值。
- Message ID 组成:Device ID(2 字节)+ System Bytes(4 字节)= 6 字节唯一标识。Host 通过维护 System Bytes 计数器来避免 ID 冲突。
- 功能码定义:
0x01— Link Test Request(Primary)0x02— Link Test Response(Reply)0x00— 数据消息(非 Link Test)
- 功能码与业务消息的区别:业务消息(如 S1F13)的 Control Byte 为
0x00,且携带 Data Block;Link Test 的 Control Byte 非零且无 Data Block。
常见误解:有些工程师认为 Link Test 消息包含 SxFy 流/功能码(如 S0F0)。实际上,Link Test 是 SECS-I 传输层消息,不经过 SECS-II 会话层,因此没有 SxFy 编码。所有 Link Test 消息的流/功能码字段在协议栈中均被忽略。
3.4 Link Test 消息交换流程(SVG 图)
下图展示了 Host 与 Equipment 之间一次完整的 Link Test 消息交换过程,包含 Primary 发送、Reply 回复以及超时处理路径。
3.5 消息结构对比总结
| 属性 | Primary Message | Reply Message |
|---|---|---|
| 方向 | 发起方 → 对端 | 对端 → 发起方 |
| Control Byte | 0x01 |
0x02 |
| Length | 10 字节(固定) | 10 字节(固定) |
| System Bytes | 发送方生成(唯一) | 回显 Primary 的值 |
| Data Block | 无 | 无 |
| 超时处理 | 等待 T3 超时 | 无(被动回复) |
故障定位要点:当分析断连日志时,首先检查 Control Byte 是否为
0x01/0x02,然后验证 System Bytes 是否匹配。如果发现 Primary 的 System Bytes 与 Reply 不一致,说明对端协议栈实现有误或存在中间设备篡改。如果只有 Primary 没有 Reply,则说明网络路径或对端处理超时。