4. NOT_CONNECTED 状态详解:初始状态、监听与连接发起条件

NOT_CONNECTED 是 HSMS 连接状态机中最基础、最稳定的状态,也是所有 TCP 连接建立之前的默认状态。理解该状态下的行为规则,是掌握整个 HSMS 状态迁移逻辑的前提。本节将围绕该状态的初始属性、监听机制以及连接发起条件展开深入分析。

4.1 状态定义与初始属性

在 HSMS 协议中,NOT_CONNECTED 状态表示本地实体尚未与远程实体建立任何 TCP 连接。该状态具有以下核心特征:

属性 说明 默认值
TCP 连接状态 无任何活跃的 Socket 连接 CLOSED
连接计时器 所有与连接相关的计时器均未启动 —
消息队列 无待发送的 SECS 消息 空
设备 ID 映射 未建立设备 ID 与远程实体的绑定关系 未配置
链路测试状态 不执行任何链路完整性检查 禁用
关键理解: NOT_CONNECTED 不是"故障"状态,而是"待命"状态。设备上电或复位后,HSMS 实体自动进入该状态,等待外部触发条件来启动连接建立流程。

4.2 监听模式:被动等待连接

在 NOT_CONNECTED 状态下,设备可以选择进入监听模式,即作为 TCP Server 等待远程实体发起连接。监听模式的行为规则如下:

  • 端口绑定: 设备在配置的 TCP 端口上执行 bind() 和 listen() 操作,但不会主动调用 connect()。
  • 连接接受: 当远程实体发起 TCP 连接请求时,本地实体调用 accept() 接受连接,并立即迁移至 CONNECTED 状态。
  • 多连接处理: 如果配置允许,监听模式可以同时接受多个连接,但 HSMS 协议通常只维护一个主连接。
  • 监听失败处理: 如果端口被占用或绑定失败,设备应记录错误日志并保持 NOT_CONNECTED 状态,等待重试。
实践建议: 在半导体设备中,通常将 Equipment(设备端)配置为 TCP Server 并启用监听模式,而 Host(主机端)作为 TCP Client 主动发起连接。这种设计可以简化设备端的网络配置,并减少设备端的连接管理负担。

4.3 连接发起条件:主动建立连接

设备在 NOT_CONNECTED 状态下,可以通过以下条件触发主动连接建立:

  1. 应用层请求: 上层应用(如 GEM 控制逻辑)调用连接建立 API,要求 HSMS 实体主动连接远程主机。
  2. 启动时自动连接: 设备配置了"启动时自动连接"策略,在上电或复位后自动发起连接。
  3. 重连计时器超时: 在之前的连接断开后,重连计时器(如 T3 超时后的重连延迟)到期,触发重新连接。
  4. 外部事件触发: 检测到特定外部事件(如网络接口恢复、配置变更)后,系统决定重新建立连接。

当上述任一条件满足时,设备执行以下步骤:

  • 解析远程实体的 IP 地址和端口号(从配置文件中读取)。
  • 创建 TCP Socket 并调用 connect() 发起连接。
  • 启动 连接超时计时器 T3,等待连接建立完成。
  • 如果连接成功,迁移至 CONNECTED 状态。
  • 如果连接失败或 T3 超时,保持 NOT_CONNECTED 状态,并根据重连策略安排下一次重试。

4.4 NOT_CONNECTED 状态下的状态迁移图

下图展示了 NOT_CONNECTED 状态与相邻状态之间的迁移关系,以及触发迁移的关键事件:

NOT_CONNECTED 状态迁移图 NOT_CONNECTED 状态迁移图 NOT_CONNECTED 初始状态 / 待命状态 监听模式 bind() + listen() 连接发起 connect() + T3 计时 CONNECTED 连接已建立 配置为 Server 主动连接请求 accept() 成功 connect() 成功 T3 超时 / 连接失败 说明:NOT_CONNECTED 状态可通过监听模式被动等待连接,也可通过主动连接请求发起连接。连接失败时回退至 NOT_CONNECTED。

4.5 连接发起条件的优先级与冲突处理

当多个连接发起条件同时满足时,设备需要按照优先级规则进行处理,避免连接冲突:

优先级 触发条件 处理策略
1(最高) 应用层显式请求 立即执行连接,忽略其他条件
2 重连计时器超时 执行重连,若应用层请求同时存在则优先处理应用层请求
3 启动时自动连接 仅在设备初始化阶段执行一次,后续不再触发
4(最低) 外部事件触发 若已有连接请求正在处理,则排队等待
注意: 如果设备同时配置了监听模式和主动连接模式,且远程实体也同时发起连接,可能导致 TCP 连接冲突。此时应遵循"先到先得"原则,接受第一个建立的连接,并关闭后续重复连接。HSMS 协议建议设备端优先使用监听模式,避免双向同时发起连接。

4.6 典型场景:设备上电后的连接流程

以下是一个典型的设备上电后从 NOT_CONNECTED 状态开始的连接流程:

  1. 设备上电: HSMS 实体初始化,进入 NOT_CONNECTED 状态。
  2. 配置加载: 读取网络配置(远程 IP、端口、连接模式等)。
  3. 模式判断:
    • 若配置为 Server 模式 → 进入监听模式,等待连接。
    • 若配置为 Client 模式 → 检查自动连接标志。
  4. 自动连接触发: 如果启用了自动连接,设备立即调用 connect() 发起连接。
  5. 连接建立: 成功建立 TCP 连接后,迁移至 CONNECTED 状态,开始 HSMS 消息交互。
  6. 连接失败处理: 如果连接失败,设备保持 NOT_CONNECTED 状态,启动重连计时器,等待下一次重试。
核心要点: NOT_CONNECTED 状态是 HSMS 连接状态机的"锚点",所有连接的生命周期都从这里开始,也在这里结束。掌握该状态下的监听与连接发起机制,是理解后续状态迁移(如 CONNECTED、RETRY 等)的基础。