2. 通信模型与状态机:设备端与主机端模型、通信状态机(DISABLE/ENABLE/COMMUNICATING)
在 SECS/GEM 协议体系中,通信模型定义了设备(Equipment)与主机(Host)之间的逻辑角色与交互边界,而通信状态机则管理着连接的生命周期。理解这两层结构,是正确配置超时参数与设计重传策略的前提。
2.1 设备端与主机端模型
SECS/GEM 采用典型的主从(Master/Slave)与对等(Peer-to-Peer)混合模型。物理层上,主机通常作为 TCP 客户端主动发起连接,设备作为 TCP 服务器监听;但在消息层,双方均可主动发送 Primary Message,另一方回复 Secondary Message。
| 角色 | TCP 连接行为 | 消息发起能力 | 典型部署 |
|---|---|---|---|
| 主机(Host) | 主动连接设备(Client) | 可发送 Primary Message(如 S2F41) | MES、EAP、RMS 服务器 |
| 设备(Equipment) | 被动等待连接(Server) | 可发送 Primary Message(如 S6F11) | 工艺机台、检测设备、自动化物料搬运系统 |
关键理解: 主机负责连接建立与心跳维持(T3 超时),设备负责回复确认(T4 超时)。这种分工决定了超时参数必须在两端分别配置,不能混用。
设备端模型通常包含以下核心组件:
- 通信接口层(HSMS/SECS-I): 处理 TCP 连接、数据帧封装与校验。
- 消息解析层: 将字节流还原为 SECS-II 消息,校验 Stream/Function 合法性。
- 状态管理层: 维护通信状态机(DISABLE/ENABLE/COMMUNICATING),控制消息收发许可。
- GEM 功能层: 处理 GEM 规定的状态模型(如 Equipment State Model、Control State Model)。
2.2 通信状态机(Communication State Model)
GEM 标准定义了通信状态机(Communication State Model),用于管理设备与主机之间的连接状态。该状态机包含三个主要状态:DISABLED、ENABLED、COMMUNICATING。每个状态决定了设备是否允许发送/接收 SECS 消息。
| 状态 | 含义 | 消息收发能力 | 典型触发条件 |
|---|---|---|---|
| DISABLED | 通信功能完全关闭 | 禁止收发任何 SECS 消息 | 设备初始化、配置错误、人为禁用 |
| ENABLED | 通信功能已启用,但未建立连接 | 可监听端口,等待连接;不主动发送数据消息 | 设备上电完成、网络就绪 |
| COMMUNICATING | 与主机建立正常通信 | 可自由收发 Primary/Secondary 消息 | TCP 连接建立 + S1F13/S1F14 握手成功 |
状态转换核心规则:
- DISABLED → ENABLED:设备应用层调用通信启用接口(如 S1F13 发送许可)。
- ENABLED → COMMUNICATING:TCP 连接建立,且完成 GEM 通信建立握手(S1F13/S1F14)。
- COMMUNICATING → ENABLED:TCP 连接断开(如 T3 超时、网络中断、主机主动关闭)。
- ENABLED → DISABLED:设备应用层调用通信禁用接口(如维护模式、故障安全)。
2.3 状态机与超时参数的关联
通信状态机的每个状态转换点,都与特定的超时参数紧密绑定。错误的超时配置可能导致状态机卡死或频繁震荡。
| 状态转换 | 关联超时 | 超时后果 | 优化建议 |
|---|---|---|---|
| ENABLED → COMMUNICATING | T3(Reply Timeout) | S1F13 未收到 S1F14,连接建立失败 | 设置 T3 ≥ 45s,考虑网络延迟 |
| COMMUNICATING → ENABLED | T3 / T4 / T5 | 消息重传耗尽,连接被关闭 | 根据消息优先级调整重传次数 |
| ENABLED → DISABLED | 无直接超时 | 应用层主动触发,不受超时控制 | 确保禁用前完成未处理消息 |
常见陷阱: 部分设备在 ENABLED 状态下仍会尝试发送心跳消息(S1F1),如果主机未及时回复,T3 超时可能导致设备误判为连接故障,自动回退到 DISABLED 状态。此时应检查主机端的 T3 配置是否与设备端一致。
2.4 状态机在重传优化中的角色
重传策略不能脱离状态机单独设计。以下是基于状态机的重传优化原则:
- COMMUNICATING 状态下: 重传次数应有限(通常 3~5 次),每次重传间隔递增(如 1s、2s、4s),避免网络拥塞。
- ENABLED 状态下: 不应发起重传,因为连接尚未建立。此时应等待主机主动连接或设备发起连接请求。
- 状态转换期间: 正在转换的消息应缓存,待状态稳定后再发送,避免消息丢失。
2.5 实践建议:状态机日志与监控
在调试超时与重传问题时,建议在设备端和主机端同时记录以下状态机事件:
- 状态转换时间戳(DISABLED → ENABLED → COMMUNICATING)
- 每次状态转换的原因(如:S1F13 超时、TCP 断开、应用层禁用)
- 当前状态下的消息队列长度(用于判断是否发生消息积压)
调试技巧: 使用 Wireshark 抓取 HSMS 数据包,结合状态机日志,可以快速定位是超时参数设置不当,还是网络链路本身存在丢包或延迟抖动。