3. HSMS 连接状态机总览:状态定义与状态转换图

HSMS(High-Speed SECS Message Services)连接状态机是设备与主机之间建立、维护和释放通信会话的核心模型。它定义了三个明确的连接状态,以及触发状态转换的事件与动作。理解这一状态机是掌握 T3 超时重连、链路测试与异常恢复的基础。

3.1 三种核心状态定义

HSMS 状态机仅包含三个状态,每个状态都对应着 TCP 连接与逻辑会话的不同阶段。下表总结了各状态的特征与允许的操作:

状态名称 TCP 连接状态 逻辑会话状态 允许的消息类型 典型场景
NOT_CONNECTED 未建立或已断开 无会话 无(仅可发起连接请求) 设备启动、网络中断、T3 超时后
CONNECTED 已建立 未选择(未激活) 仅控制消息(Select.req/rsp, Deselect.req/rsp, Linktest.req/rsp, Separate.req) TCP 握手完成,等待选择
SELECTED 已建立 已激活(可收发数据) 所有 SECS-II 数据消息 + 控制消息 正常生产通信、数据采集、报警上报
关键概念:“连接”与“选择”是两个不同层次的动作。TCP 连接建立后进入 CONNECTED 状态,但此时还不能传输 SECS-II 数据消息;必须通过 Select 流程成功后才能进入 SELECTED 状态,开始真正的设备通信。

3.2 状态转换图

下图展示了 HSMS 连接状态机的完整转换路径,包括正常流程与异常恢复流程:

HSMS 连接状态机转换图 NOT_CONNECTED TCP 未连接 / 已断开 CONNECTED TCP 已连接,未选择 SELECTED 会话已激活 TCP 连接建立 Select 成功 Deselect / Separate 回到 CONNECTED TCP 断开 / T3 超时 异常断开 / T3 超时 重连重试 转换说明: • 正常流程:NOT_CONNECTED → CONNECTED → SELECTED(单向前进) • 降级流程:SELECTED → CONNECTED(Deselect)或 SELECTED/CONNECTED → NOT_CONNECTED(断开) • 异常流程:任何状态下 TCP 断开或 T3 超时,均回到 NOT_CONNECTED

3.3 状态转换事件与动作清单

下表列出了所有可能的状态转换事件、触发条件以及设备应执行的动作:

当前状态 目标状态 触发事件 设备动作
NOT_CONNECTED CONNECTED TCP 连接建立成功(主动连接或被动接受) 启动 T3 计时器,等待 Select
CONNECTED SELECTED 收到 Select.rsp 且状态为“成功” 停止 T3 计时器,启动 T6 计时器(如有配置)
SELECTED CONNECTED Deselect 完成 / 收到 Separate.req 停止 T6,启动 T3,等待重新 Select
CONNECTED NOT_CONNECTED TCP 断开 / T3 超时 / 收到 Separate.req 清理会话,启动重连计时器
SELECTED NOT_CONNECTED TCP 断开 / T3 超时 / 通信异常 清理会话,启动重连计时器
NOT_CONNECTED NOT_CONNECTED 重连失败(重试循环) 等待重连间隔,再次尝试连接

3.4 状态机设计原则

  • 单向前进,双向降级:正常流程只能从 NOT_CONNECTED 向 SELECTED 单向移动;降级或异常时可以从 SELECTED 回到 CONNECTED 或直接回到 NOT_CONNECTED。
  • T3 超时是状态回退的触发器:在 CONNECTED 或 SELECTED 状态下,如果 T3 计时器到期(未收到预期的响应消息),设备必须立即断开 TCP 连接并回到 NOT_CONNECTED 状态。
  • 重连循环在 NOT_CONNECTED 内完成:设备不应在 CONNECTED 或 SELECTED 状态下尝试重连;所有重连逻辑都封装在 NOT_CONNECTED 状态的自循环中。
  • 状态机是确定性的:在任何时刻,设备只能处于一个状态,且每个事件只能触发一个确定的转换。这保证了通信行为的可预测性。
实践建议:在实现 HSMS 状态机时,建议为每个状态设置独立的超时计时器(T3、T6、T8 等),并在状态转换时重置或切换计时器。不要在状态机外部直接操作 TCP 连接,所有连接管理应通过状态机的事件驱动来完成。

3.5 状态机与 T3 超时的关系

T3 超时是 HSMS 状态机中最重要的异常处理机制之一。它的作用与影响如下:

  • 作用范围:T3 计时器在 CONNECTED 和 SELECTED 状态下运行,用于等待对端对控制消息或数据消息的响应。
  • 超时后果:一旦 T3 超时,设备必须立即断开 TCP 连接,状态无条件回到 NOT_CONNECTED。不允许在 CONNECTED 或 SELECTED 状态下重试。
  • 重连流程:回到 NOT_CONNECTED 后,设备根据配置的重连策略(固定间隔、指数退避等)尝试重新建立 TCP 连接,然后重新执行 Select 流程。
  • 与 T6 的区别:T6 计时器用于 SELECTED 状态下等待对端发送数据消息的间隔,超时后通常触发 Linktest 测试,而非直接断开连接。T3 超时则直接导致状态回退。
常见错误:有些实现会在 T3 超时后尝试在 CONNECTED 状态下重新发送消息,而不是断开连接。这违反了 HSMS 规范,可能导致状态机不一致和通信死锁。T3 超时的唯一正确响应是断开连接并回到 NOT_CONNECTED。