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 控制消息或超时/断开条件:

  1. Select.req / Select.rsp 成功:主动方发送 Select.req,被动方回复 Select.rsp 且 Header Byte3 的 HSMS_SELECTED 位为 1。双方从 Not Selected → Selected。
  2. Deselect.req / Deselect.rsp 成功:主动方发送 Deselect.req,被动方回复 Deselect.rsp 且状态为 0。双方从 Selected → Not Selected。
  3. Separate.req 接收:任一方收到 Separate.req,立即进入 Not Selected 并关闭 TCP 连接。
  4. T3 超时:在 Selected 状态下,发送 Primary 消息后等待 Secondary 回复超过 T3 定时器阈值,触发超时恢复流程,状态回退到 Not Selected。
  5. T6 超时:在 Not Selected 状态下,发送控制消息后等待回复超过 T6 定时器阈值,状态保持 Not Selected 并关闭 TCP 连接。
  6. TCP 连接断开:物理链路中断、对端崩溃或网络故障,无论当前状态,均进入 Not Selected 并等待重新建立 TCP 连接。
状态转换速记表:
当前状态触发事件下一状态TCP 连接
Not SelectedSelect.req + Select.rsp 成功Selected保持
SelectedDeselect.req + Deselect.rsp 成功Not Selected保持
SelectedSeparate.req 接收Not Selected关闭
SelectedT3 超时Not Selected保持(触发恢复)
Not SelectedT6 超时Not Selected关闭
任意TCP 断开Not Selected已断开

3.3 HSMS 状态机图

下图展示了 HSMS 状态机的完整转换关系,包含两个状态、六条转换路径以及对应的触发条件:

HSMS 状态机图 HSMS 状态机图 Not Selected 仅控制消息可收发 Selected 数据消息 + 控制消息 Select.req/rsp 成功 Deselect.req/rsp 成功 Separate.req 接收 T3 超时(触发恢复) T6 超时(关闭 TCP) TCP 连接断开(任意状态 → Not Selected) 图例说明 正常转换 异常/断开 超时事件 T6 自环

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