3. HSMS 状态机核心概念:状态定义、转换触发条件与状态机图
HSMS(High-Speed SECS Message Services)状态机是控制 TCP/IP 连接生命周期与消息收发权限的核心模型。理解状态定义与转换条件是掌握 T3 超时恢复策略、连接重建与通信可靠性的基础。本章将详细解析 HSMS 的两种状态、六种触发事件,并给出完整的状态机图。
3.1 状态定义:Not Selected 与 Selected
HSMS 状态机仅包含两个状态,简洁但功能明确:
| 状态 | 含义 | 通信能力 | 典型场景 |
|---|---|---|---|
| Not Selected | TCP 连接已建立,但尚未完成 HSMS 会话选择 | 仅可收发控制消息(Select.req / Select.rsp / Deselect.req / Deselect.rsp / Linktest.req / Linktest.rsp / Separate.req) | TCP 连接刚建立、会话选择失败、对方主动取消选择 |
| Selected | HSMS 会话选择已完成,双方进入数据通信状态 | 可收发所有 SECS-II 数据消息(Primary / Secondary)及控制消息 | 正常生产通信、设备参数上传、配方下载、报警上报 |
关键理解: TCP 连接 ≠ HSMS 会话。TCP 连接只保证字节流可达,而 Selected 状态才代表双方已就 HSMS 会话标识、设备 ID、通信参数达成一致,可以交换 SECS-II 数据消息。
3.2 状态转换触发条件
状态转换由六种事件驱动,每种事件对应特定的 HSMS 控制消息或超时/断开条件:
- Select.req / Select.rsp 成功:主动方发送
Select.req,被动方回复Select.rsp且 Header Byte3 的HSMS_SELECTED位为 1。双方从 Not Selected → Selected。 - Deselect.req / Deselect.rsp 成功:主动方发送
Deselect.req,被动方回复Deselect.rsp且状态为 0。双方从 Selected → Not Selected。 - Separate.req 接收:任一方收到
Separate.req,立即进入 Not Selected 并关闭 TCP 连接。 - T3 超时:在 Selected 状态下,发送 Primary 消息后等待 Secondary 回复超过 T3 定时器阈值,触发超时恢复流程,状态回退到 Not Selected。
- T6 超时:在 Not Selected 状态下,发送控制消息后等待回复超过 T6 定时器阈值,状态保持 Not Selected 并关闭 TCP 连接。
- TCP 连接断开:物理链路中断、对端崩溃或网络故障,无论当前状态,均进入 Not Selected 并等待重新建立 TCP 连接。
状态转换速记表:
| 当前状态 | 触发事件 | 下一状态 | TCP 连接 |
|---|---|---|---|
| Not Selected | Select.req + Select.rsp 成功 | Selected | 保持 |
| Selected | Deselect.req + Deselect.rsp 成功 | Not Selected | 保持 |
| Selected | Separate.req 接收 | Not Selected | 关闭 |
| Selected | T3 超时 | Not Selected | 保持(触发恢复) |
| Not Selected | T6 超时 | Not Selected | 关闭 |
| 任意 | TCP 断开 | Not Selected | 已断开 |
3.3 HSMS 状态机图
下图展示了 HSMS 状态机的完整转换关系,包含两个状态、六条转换路径以及对应的触发条件:
3.4 状态机行为要点
- 状态持久性:状态机在 TCP 连接生命周期内持续运行。TCP 断开后,状态自动重置为 Not Selected,等待下一次连接建立。
- 消息过滤:在 Not Selected 状态下,收到的任何 SECS-II 数据消息(Primary/Secondary)必须丢弃或忽略,否则会导致协议错误。
- 并发安全:状态转换是原子操作,HSMS 实体必须保证同一时刻只有一个线程处理状态变更,避免竞态条件。
- T3 超时与状态回退:T3 超时是 Selected → Not Selected 的唯一超时路径,后续章节将详细展开其恢复策略。
常见实现陷阱: 部分实现将 T3 超时后直接关闭 TCP 连接,这是错误的。标准要求 T3 超时后先回退到 Not Selected,然后根据配置尝试重新 Select 或执行恢复流程,而不是立即断开。断开 TCP 应由 T6 超时或 Separate.req 触发。
3.5 状态机与 T3 超时的关联
T3 超时恢复策略完全依赖于状态机的正确实现。以下是 T3 超时在状态机中的位置与影响:
| 阶段 | 状态 | T3 超时行为 | 后续动作 |
|---|---|---|---|
| 正常通信 | Selected | 等待 Secondary 回复超时 | 回退 Not Selected → 触发恢复流程 |
| 恢复中 | Not Selected | 不适用(T3 仅在 Selected 有效) | 使用 T6 监控控制消息 |
| 重新 Select | Not Selected → Selected | 不适用 | 发送 Select.req,等待 Select.rsp |