3. HSMS 连接状态机:TCP 连接、Not Selected、Selected 状态转换与 T5 定时器触发条件

HSMS(High-Speed SECS Message Services)连接状态机是理解设备通信行为的基础。状态机定义了 TCP 连接建立后,会话从初始化到就绪的完整路径。T5 定时器作为连接建立阶段的“看门狗”,在状态转换中扮演关键角色。

3.1 状态机三态模型

HSMS 连接状态机包含三个核心状态:TCP 连接(TCP Connection)、未选择(Not Selected)和已选择(Selected)。每个状态对应不同的通信能力和协议行为。

状态 描述 可发送消息类型 T5 定时器作用
TCP 连接 底层 TCP 套接字已建立,但尚未进行 HSMS 会话协商 仅限 Select.req / Select.rsp 等待 Select.rsp 超时
Not Selected TCP 连接存在,但未完成 HSMS 选择流程,无法传输数据消息 Select.req / Select.rsp / Deselect.req / Deselect.rsp / Linktest.req / Linktest.rsp / Separate.req 等待 Select.rsp 超时(重试)
Selected HSMS 会话建立成功,可以传输所有 SECS-II 数据消息 所有 HSMS 消息类型 + 数据消息 不适用(T5 仅在连接建立阶段运行)
关键概念:“TCP 连接”状态与“Not Selected”状态的区别在于:前者是 TCP 握手刚完成,尚未发送任何 HSMS 控制消息;后者是已经发送过 Select.req 但尚未收到确认,或连接已建立但处于空闲待选择状态。

3.2 状态转换流程

状态转换由 HSMS 控制消息驱动,主要包括 Select.req、Select.rsp、Separate.req 和 Linktest.req。下图展示了完整的转换路径:

HSMS 连接状态机转换图 TCP 连接 TCP Connected Not Selected 未选择 Selected 已选择 Select.req Select.rsp (成功) Separate.req / 超时 TCP 断开 T5 定时器触发条件 在 TCP 连接 或 Not Selected 状态下,发送 Select.req 后启动 T5 T5 超时 → 重发 Select.req(最多 T5 次重试)→ 仍失败则断开 TCP 连接 状态回退到 TCP 连接(初始)

3.3 T5 定时器触发条件详解

T5 定时器是 HSMS 连接建立阶段的超时控制机制。其触发条件与状态机紧密耦合,具体规则如下:

  1. 启动条件:当 HSMS 实体处于 TCP 连接 或 Not Selected 状态,并发送 Select.req 消息时,启动 T5 定时器。
  2. 正常停止:在 T5 超时前收到有效的 Select.rsp(且响应代码为 0,表示成功),定时器停止,状态转入 Selected。
  3. 超时动作:T5 超时后,HSMS 实体执行以下操作:
    • 递增重试计数器。
    • 如果重试次数未达到配置的最大值(通常为 3 次),重新发送 Select.req 并重启 T5。
    • 如果重试次数已达最大值,则断开 TCP 连接,状态回退到 TCP 连接 初始状态。
  4. 典型配置值:T5 定时器值通常配置为 10 秒(SEMI E37 推荐范围:2~30 秒)。
工程要点:T5 定时器是 HSMS 连接自动重连测试的核心对象。测试时需验证:T5 超时后是否按预期重发 Select.req;重试次数耗尽后是否断开 TCP;以及断开后设备是否能自动发起新的 TCP 连接并重新进入状态机流程。

3.4 状态转换与 T5 交互的完整时序

以下时序图展示了从 TCP 连接到 Selected 的完整过程,以及 T5 定时器在失败场景下的行为:

T5 定时器与状态转换时序(失败重试场景) 主动方 被动方 TCP 连接建立(状态:TCP 连接) Select.req(启动 T5) T5 超时(未收到 Select.rsp) Select.req(重试 1,重启 T5) T5 再次超时(重试 2) Select.req(重试 3,最后一次) 重试耗尽 → 断开 TCP 连接 状态回退到 TCP 连接(初始) 说明:T5 重试次数可配置(通常为 3 次),每次超时后重发 Select.req,直至成功或断开

3.5 状态转换中的关键消息

状态转换由以下 HSMS 控制消息驱动,每种消息的格式和用途如下:

消息类型 消息代码 方向 触发状态转换
Select.req 0x01 主动方 → 被动方 TCP 连接 → Not Selected
Select.rsp 0x02 被动方 → 主动方 Not Selected → Selected(成功时)
Deselect.req 0x03 任意方 Selected → Not Selected
Deselect.rsp 0x04 对端 确认解除选择
Linktest.req 0x05 任意方 不改变状态(保持 Selected)
Linktest.rsp 0x06 对端 不改变状态
Separate.req 0x09 任意方 Selected → Not Selected 或 TCP 断开

3.6 自动重连测试关注点

在自动重连测试中,需要重点验证以下与状态机和 T5 相关的场景:

  • T5 超时重试验证:模拟被动方不响应 Select.rsp,验证主动方是否在 T5 超时后重发 Select.req,且重试次数符合配置。
  • 重试耗尽断开验证:验证当重试次数达到最大值后,主动方是否断开 TCP 连接,并回退到 TCP 连接 状态。
  • 自动重连验证:验证断开后,设备是否自动发起新的 TCP 连接,并重新进入状态机流程(TCP 连接 → Not Selected → Selected)。
  • 状态一致性验证:验证在重连过程中,双方的状态机是否始终保持一致,不会出现一端为 Selected 而另一端为 Not Selected 的情况。
  • 并发消息处理:验证在 T5 定时器运行期间,如果收到其他控制消息(如 Linktest.req),状态机是否按规范处理(通常应忽略或排队)。
常见陷阱:某些设备实现中,T5 定时器在 Not Selected 状态下可能被错误地持续运行,导致即使收到 Select.rsp 后仍触发超时断开。测试时应确认 T5 在收到有效响应后立即停止,避免误判。