3. 设备初始化流程(S1F13/S1F14):建立通信的握手过程、状态机转换
设备初始化是 SECS/GEM 通信建立的第一个关键阶段,其核心是通过 S1F13(建立通信请求)与 S1F14(建立通信确认)这一对标准报文完成握手。该过程不仅验证了物理连接与协议栈的可用性,还驱动设备状态机从 NOT COMMUNICATING 向 COMMUNICATING 转换。T6 定时器在此阶段负责监控 S1F13 的响应超时,其配置直接影响初始化成功率。
3.1 初始化流程的触发条件
设备或主机在以下场景中发起 S1F13 握手:
- 上电或复位:设备完成自检后主动发起。
- 通信中断恢复:物理层或链路层恢复后重新建立会话。
- 主机主动连接:主机软件启动后向设备发送 S1F13。
- 状态机强制转换:设备从 DISABLED 或 NOT COMMUNICATING 状态尝试进入 COMMUNICATING。
关键前提:在发送 S1F13 之前,TCP/IP 连接(或 RS-232 链路)必须已经建立,且设备处于 NOT COMMUNICATING 状态。若链路未就绪,S1F13 将无法发送,T6 定时器不会启动。
3.2 S1F13/S1F14 报文结构
| 报文 | 方向 | Stream/Function | 主要数据项 | 作用 |
|---|---|---|---|---|
| S1F13 | 请求方 → 响应方 | S1F13 | MDLN(设备型号)、SOFTREV(软件版本) | 发起通信建立请求,携带设备标识 |
| S1F14 | 响应方 → 请求方 | S1F14 | MDLN、SOFTREV、COMMACK(通信确认码) | 确认通信建立,返回设备能力与状态 |
COMMACK 值说明:
- 0:通信建立成功,设备进入 COMMUNICATING 状态。
- 1:通信建立失败,设备拒绝连接(通常因版本不匹配或配置错误)。
- 2:设备忙,稍后重试。
3.3 握手过程与状态机转换
下图展示了从 NOT COMMUNICATING 到 COMMUNICATING 的完整状态转换路径,以及 T6 定时器在其中的监控位置。
3.4 握手步骤详解
- 步骤 1:发送 S1F13
- 请求方(主机或设备)构造 S1F13 报文,包含 MDLN 和 SOFTREV。
- 启动 T6 定时器,等待 S1F14 响应。
- 状态机保持在 NOT COMMUNICATING,但进入“等待响应”子状态。
- 步骤 2:接收与处理 S1F13
- 响应方解析 MDLN 和 SOFTREV,验证兼容性。
- 若版本匹配且设备就绪,设置 COMMACK=0;否则设置 COMMACK=1 或 2。
- 构造 S1F14 报文并发送回请求方。
- 步骤 3:接收 S1F14
- 请求方在 T6 超时前收到 S1F14,停止 T6 定时器。
- 检查 COMMACK 值:
- COMMACK=0:状态机转换为 COMMUNICATING,初始化成功。
- COMMACK≠0:初始化失败,状态机返回 NOT COMMUNICATING,记录错误。
- 步骤 4:T6 超时处理
- 若 T6 定时器到期仍未收到 S1F14,请求方执行超时策略:
- 重发 S1F13(通常最多 3 次)。
- 超过重试次数后,状态机保持 NOT COMMUNICATING,上报通信故障。
⚠ T6 超时风险:如果 T6 设置过短(如 < 5 秒),在主机或设备负载较高时,S1F14 可能无法及时返回,导致误判通信失败。建议 T6 初始值设为 10~30 秒,并根据实际网络延迟调整。
3.5 状态机转换总结
| 当前状态 | 事件 | 下一状态 | 说明 |
|---|---|---|---|
| NOT COMMUNICATING | 发送 S1F13 | NOT COMMUNICATING(等待子状态) | T6 启动,等待响应 |
| NOT COMMUNICATING(等待) | 收到 S1F14 (ACK=0) | COMMUNICATING | 初始化成功 |
| NOT COMMUNICATING(等待) | T6 超时 | NOT COMMUNICATING | 重试或报错 |
| NOT COMMUNICATING(等待) | 收到 S1F14 (ACK≠0) | NOT COMMUNICATING | 拒绝连接,记录原因 |
| COMMUNICATING | 通信中断或 SxFx 超时 | NOT COMMUNICATING | 进入重新初始化流程 |
3.6 初始化流程中的 T6 定时器配置建议
- 典型值范围:10 秒 ~ 60 秒,取决于网络延迟和设备响应时间。
- 重试策略:建议最多重试 3 次,每次重试间隔至少 2 秒。
- 日志记录:每次 T6 超时或 COMMACK≠0 都应记录详细报文,便于故障定位。
- 与 T3 的区别:T3 用于普通报文响应,T6 专用于 S1F13 初始化握手,两者不可混用。
💡 最佳实践:在设备开发阶段,将 T6 设置为 30 秒并开启详细日志,通过分析 S1F13/S1F14 的往返时间(RTT)来优化 T6 值。生产环境中,T6 应至少为最大 RTT 的 3 倍。
3.7 常见初始化失败场景与排查
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| T6 频繁超时 | 网络延迟高、设备负载大、T6 设置过短 | 检查网络质量、增加 T6 值、优化设备处理能力 |
| 收到 S1F14 但 COMMACK=1 | MDLN 或 SOFTREV 不匹配 | 核对设备型号与软件版本配置 |
| 收到 S1F14 但 COMMACK=2 | 设备忙,无法处理初始化 | 等待设备空闲后重试,检查设备状态机 |
| S1F13 发送失败 | TCP 连接未建立、报文格式错误 | 检查物理连接、验证报文编码 |
通过以上握手过程与状态机转换的详细分析,可以清晰地看到 T6 定时器在设备初始化阶段的关键作用。正确配置 T6 并理解其超时行为,是保障 SECS/GEM 通信稳定建立的基础。