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 状态下,可以通过以下条件触发主动连接建立:
- 应用层请求: 上层应用(如 GEM 控制逻辑)调用连接建立 API,要求 HSMS 实体主动连接远程主机。
- 启动时自动连接: 设备配置了"启动时自动连接"策略,在上电或复位后自动发起连接。
- 重连计时器超时: 在之前的连接断开后,重连计时器(如 T3 超时后的重连延迟)到期,触发重新连接。
- 外部事件触发: 检测到特定外部事件(如网络接口恢复、配置变更)后,系统决定重新建立连接。
当上述任一条件满足时,设备执行以下步骤:
- 解析远程实体的 IP 地址和端口号(从配置文件中读取)。
- 创建 TCP Socket 并调用
connect()发起连接。 - 启动 连接超时计时器 T3,等待连接建立完成。
- 如果连接成功,迁移至 CONNECTED 状态。
- 如果连接失败或 T3 超时,保持 NOT_CONNECTED 状态,并根据重连策略安排下一次重试。
4.4 NOT_CONNECTED 状态下的状态迁移图
下图展示了 NOT_CONNECTED 状态与相邻状态之间的迁移关系,以及触发迁移的关键事件:
4.5 连接发起条件的优先级与冲突处理
当多个连接发起条件同时满足时,设备需要按照优先级规则进行处理,避免连接冲突:
| 优先级 | 触发条件 | 处理策略 |
|---|---|---|
| 1(最高) | 应用层显式请求 | 立即执行连接,忽略其他条件 |
| 2 | 重连计时器超时 | 执行重连,若应用层请求同时存在则优先处理应用层请求 |
| 3 | 启动时自动连接 | 仅在设备初始化阶段执行一次,后续不再触发 |
| 4(最低) | 外部事件触发 | 若已有连接请求正在处理,则排队等待 |
注意: 如果设备同时配置了监听模式和主动连接模式,且远程实体也同时发起连接,可能导致 TCP 连接冲突。此时应遵循"先到先得"原则,接受第一个建立的连接,并关闭后续重复连接。HSMS 协议建议设备端优先使用监听模式,避免双向同时发起连接。
4.6 典型场景:设备上电后的连接流程
以下是一个典型的设备上电后从 NOT_CONNECTED 状态开始的连接流程:
- 设备上电: HSMS 实体初始化,进入 NOT_CONNECTED 状态。
- 配置加载: 读取网络配置(远程 IP、端口、连接模式等)。
- 模式判断:
- 若配置为 Server 模式 → 进入监听模式,等待连接。
- 若配置为 Client 模式 → 检查自动连接标志。
- 自动连接触发: 如果启用了自动连接,设备立即调用
connect()发起连接。 - 连接建立: 成功建立 TCP 连接后,迁移至 CONNECTED 状态,开始 HSMS 消息交互。
- 连接失败处理: 如果连接失败,设备保持 NOT_CONNECTED 状态,启动重连计时器,等待下一次重试。
核心要点: NOT_CONNECTED 状态是 HSMS 连接状态机的"锚点",所有连接的生命周期都从这里开始,也在这里结束。掌握该状态下的监听与连接发起机制,是理解后续状态迁移(如 CONNECTED、RETRY 等)的基础。