2. HSMS 连接建立基础:Select.req 与 Select.rsp 消息交互流程
HSMS 连接建立是 SECS/GEM 通信的物理与逻辑握手阶段。在 TCP 传输连接(物理连接)建立之后,通信双方需要通过 Select.req(选择请求)与 Select.rsp(选择响应)消息完成逻辑连接(Logical Connection)的确认。这一过程决定了后续数据消息能否在 HSMS 会话中正常收发。
2.1 连接建立的两阶段模型
HSMS 连接建立分为两个清晰的阶段:
| 阶段 | 协议层 | 目的 | 典型耗时 |
|---|---|---|---|
| 阶段一:TCP 传输连接 | TCP/IP | 建立可靠的字节流通道(三次握手) | 1–10 ms(局域网) |
| 阶段二:HSMS 逻辑连接 | HSMS | 通过 Select.req / Select.rsp 确认会话主控权 | 受 T3 定时器约束(典型 45 s) |
关键概念: TCP 连接只保证数据能到达对端,而 HSMS Select 过程才真正建立“设备-主机”之间的逻辑会话关系。T3 超时只发生在阶段二。
2.2 Select.req 与 Select.rsp 消息结构
两条消息均属于 HSMS 控制消息(Message Type 0x0001 和 0x0002),使用固定的 10 字节消息头,不携带数据体(Data Length = 0)。
| 消息 | Message Type | Session ID | 方向 | 说明 |
|---|---|---|---|---|
| Select.req | 0x0001 | 0xFFFF | 发起方 → 响应方 | 请求建立逻辑连接 |
| Select.rsp | 0x0002 | 0xFFFF | 响应方 → 发起方 | 返回连接建立结果(Primary/Alternate) |
注意: Select.req 和 Select.rsp 的 Session ID 固定为 0xFFFF,表示该消息属于“未建立连接”的控制通道。任何非 0xFFFF 的 Session ID 在此阶段均属于协议违规。
2.3 交互流程详解
以下为标准的 Select.req / Select.rsp 交互时序:
- 发起方发送 Select.req:在 TCP 连接建立后,发起方(通常是主机或设备)立即发送 Select.req 消息,并启动 T3 定时器。
- 响应方接收并处理:响应方收到 Select.req 后,检查自身状态(是否已与其他实体建立连接、资源是否可用)。
- 响应方回复 Select.rsp:响应方在 T3 超时前回复 Select.rsp,其中包含 Primary(0x00)或 Alternate(0x01)状态。
- 发起方停止 T3 定时器:发起方收到 Select.rsp 后停止 T3 定时器,并根据响应码决定后续动作。
故障风险点: 如果响应方在 T3 超时前未回复 Select.rsp,发起方将触发 T3 超时事件,关闭 TCP 连接并记录“HSMS 连接建立失败”日志。这是 T3 超时在连接建立阶段最常见的根因之一。
2.4 Select.rsp 响应码含义
| 响应码 | 枚举值 | 含义 | 后续动作 |
|---|---|---|---|
| Primary | 0x00 | 连接建立成功,当前实体作为主控方 | 进入通信就绪状态,可发送数据消息 |
| Alternate | 0x01 | 连接建立成功,当前实体作为备用方 | 进入通信就绪状态,但主控权归对方 |
| 其他值 | 0x02–0xFF | 协议保留或厂商自定义错误 | 通常视为连接失败,关闭 TCP 连接 |
2.5 交互流程 SVG 图
下图展示了 HSMS 连接建立阶段 Select.req 与 Select.rsp 的完整交互过程,包含 T3 定时器的启动与停止时机:
2.6 连接建立后的状态转换
Select.rsp 的响应码决定了连接建立后的主从关系:
- Primary(0x00):当前实体获得主控权,可以主动发送数据消息(如 S1F1、S2F17 等)。
- Alternate(0x01):当前实体作为备用方,只能响应对方的消息,不能主动发起数据会话。
工程经验: 在半导体设备集成中,通常约定主机(Host)作为 Primary,设备(Equipment)作为 Alternate。如果双方都试图成为 Primary,会导致“主控权冲突”,此时需要重新建立 TCP 连接并协商角色。
2.7 常见连接建立失败模式
| 失败模式 | 现象 | 可能根因 |
|---|---|---|
| T3 超时 | 发起方未收到 Select.rsp | 网络延迟、响应方繁忙、响应方未实现 HSMS |
| 响应码异常 | Select.rsp 包含非 0x00/0x01 值 | 协议栈实现错误、版本不匹配 |
| Session ID 错误 | Select.req 或 Select.rsp 中 Session ID ≠ 0xFFFF | 协议栈状态机错误、消息构造异常 |
| TCP 连接中断 | Select.req 发送后 TCP 连接断开 | 防火墙、网络抖动、对端主动关闭 |
故障诊断提示: 当遇到 HSMS 连接建立失败时,应首先检查 T3 定时器是否超时。如果 T3 超时,优先排查网络连通性和响应方协议栈状态;如果 T3 未超时但连接失败,则重点检查 Select.rsp 的响应码和 Session ID 字段。