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。下图展示了完整的转换路径:
3.3 T5 定时器触发条件详解
T5 定时器是 HSMS 连接建立阶段的超时控制机制。其触发条件与状态机紧密耦合,具体规则如下:
- 启动条件:当 HSMS 实体处于
TCP 连接或Not Selected状态,并发送Select.req消息时,启动 T5 定时器。 - 正常停止:在 T5 超时前收到有效的
Select.rsp(且响应代码为 0,表示成功),定时器停止,状态转入Selected。 - 超时动作:T5 超时后,HSMS 实体执行以下操作:
- 递增重试计数器。
- 如果重试次数未达到配置的最大值(通常为 3 次),重新发送
Select.req并重启 T5。 - 如果重试次数已达最大值,则断开 TCP 连接,状态回退到
TCP 连接初始状态。
- 典型配置值:T5 定时器值通常配置为 10 秒(SEMI E37 推荐范围:2~30 秒)。
工程要点:T5 定时器是 HSMS 连接自动重连测试的核心对象。测试时需验证:T5 超时后是否按预期重发 Select.req;重试次数耗尽后是否断开 TCP;以及断开后设备是否能自动发起新的 TCP 连接并重新进入状态机流程。
3.4 状态转换与 T5 交互的完整时序
以下时序图展示了从 TCP 连接到 Selected 的完整过程,以及 T5 定时器在失败场景下的行为:
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 在收到有效响应后立即停止,避免误判。