4、HSMS连接建立:主动连接(Active)与被动连接(Passive)模式、连接超时参数T5/T6/T7/T8
HSMS(High-Speed SECS Message Services)是建立在TCP/IP之上的SECS/GEM通信层。连接建立是HSMS通信的第一步,也是最容易因网络配置、防火墙规则或参数设置不当而失败的环节。本节将深入剖析主动连接与被动连接两种模式的工作原理,以及四个关键超时参数(T5、T6、T7、T8)对连接稳定性的影响。
4.1 主动连接(Active)与被动连接(Passive)模式
在HSMS协议中,通信双方的角色分为主动连接方(Active)和被动连接方(Passive)。主动方负责发起TCP连接请求,被动方则监听指定端口等待连接。这种角色分配与设备在产线中的物理位置和控制层级密切相关。
4.1.1 连接建立流程对比
| 阶段 | 主动连接(Active) | 被动连接(Passive) |
|---|---|---|
| 角色定义 | 发起TCP连接请求的一方 | 监听端口、等待连接的一方 |
| 典型设备 | Host、上位机、MES系统 | 半导体设备、PLC、传感器 |
| 端口配置 | 需要知道被动方的IP和端口 | 绑定本地端口,等待入站连接 |
| 连接发起时机 | 应用启动或重连策略触发 | 始终处于监听状态 |
| 防火墙影响 | 出站规则(通常较宽松) | 入站规则(通常较严格) |
| 重连责任 | 主动方负责重连 | 被动方只需保持监听 |
4.1.2 连接建立状态机
HSMS连接建立遵循严格的状态机转换。从初始状态到连接建立完成,需要经过以下关键步骤:
- 未连接状态(Not Connected): 双方均未建立TCP连接。
- TCP连接建立: 主动方发起SYN,被动方回复SYN-ACK,完成三次握手。
- HSMS选择(Select)阶段: 主动方发送Select.req消息,被动方回复Select.rsp。
- 连接就绪(Connected): 双方进入数据通信状态。
4.2 连接超时参数:T5、T6、T7、T8
HSMS协议定义了四个关键超时参数,用于控制连接建立、消息确认和连接保活等行为。这些参数的设置直接影响通信的可靠性和故障恢复速度。
4.2.1 超时参数总览
| 参数 | 名称 | 默认值 | 作用范围 | 超时后果 |
|---|---|---|---|---|
| T5 | 连接尝试间隔 | 10秒 | 主动连接方 | 重连延迟增加 |
| T6 | 消息回复超时 | 45秒 | 双方 | 消息重发或连接断开 |
| T7 | 连接空闲超时 | 120秒 | 双方 | 发送心跳包 |
| T8 | 心跳回复超时 | 5秒 | 双方 | 连接断开 |
4.2.2 各超时参数详解
T5:连接尝试间隔
T5仅适用于主动连接方。当主动方尝试建立TCP连接失败后,必须等待T5时间才能发起下一次连接尝试。T5的典型值为10秒,但可根据网络环境调整。
T6:消息回复超时
T6是HSMS协议中最关键的超时参数。它定义了发送方在发送需要回复的消息(如Select.req、Linktest.req、Data消息)后,等待回复的最大时间。如果T6超时,发送方认为消息丢失或对方不可达。
- 默认值: 45秒(SEMI标准建议)
- 适用场景: Select阶段、Linktest阶段、数据消息交换
- 超时处理: 发送方重发消息或断开连接
- 调试要点: 如果频繁出现T6超时,检查网络延迟、防火墙是否丢弃数据包、对方是否过载
T7:连接空闲超时
T7用于检测连接是否处于空闲状态。如果连接在T7时间内没有任何数据交换,主动方应发送Linktest.req心跳消息以验证连接活性。T7的默认值为120秒。
T8:心跳回复超时
T8与T7配合使用。当发送Linktest.req后,如果在T8时间内未收到Linktest.rsp,则认为连接已断开。T8的默认值为5秒。
4.3 防火墙规则对连接建立的影响
防火墙是HSMS连接建立中最常见的故障点。由于半导体工厂网络通常采用多层防火墙隔离策略,HSMS通信必须穿越这些安全边界。
4.3.1 常见防火墙拦截场景
| 场景 | 现象 | 排查方法 |
|---|---|---|
| TCP SYN被丢弃 | 连接超时,无任何响应 | 使用telnet或nc测试端口可达性 |
| TCP RST被发送 | 连接立即被拒绝 | 检查防火墙日志中的拒绝记录 |
| 数据包被静默丢弃 | 连接建立后T6超时 | 抓包分析是否有数据包丢失 |
| 状态检测防火墙拦截 | 连接建立后一段时间断开 | 检查防火墙会话超时设置 |
| 端口未开放 | 连接被拒绝(Connection refused) | 确认被动方监听端口是否正确 |
4.3.2 防火墙规则调试步骤
- 确认通信方向: 明确主动方和被动方,确定出站和入站规则。
- 测试基础连通性: 使用ping测试IP层可达性,使用telnet或nc测试端口可达性。
- 抓包分析: 在主动方和被动方同时抓包,对比数据包是否到达对方。
- 检查防火墙日志: 查找被拒绝的数据包记录,确认规则ID。
- 调整超时参数: 如果网络延迟较大,适当增大T6和T8的值。
- 验证状态检测: 确保防火墙会话超时大于T7+T8,避免空闲连接被中断。
4.4 连接建立常见异常及处理
| 异常现象 | 可能原因 | 排查方向 |
|---|---|---|
| TCP连接超时 | 防火墙拦截、IP不可达、端口未监听 | 检查网络连通性、防火墙规则 |
| Select.rsp超时 | T6设置过小、被动方负载过高、网络丢包 | 增大T6、检查被动方处理能力 |
| 连接频繁断开 | T7/T8设置不合理、防火墙会话超时 | 调整T7/T8、检查防火墙会话超时 |
| 心跳失败 | T8超时、网络不稳定、防火墙丢弃心跳包 | 增大T8、检查防火墙是否拦截心跳 |
| 连接建立后立即断开 | Select被拒绝、设备未就绪 | 检查设备状态、Select.req参数 |
4.5 最佳实践与参数推荐
- T5设置: 默认10秒,对于高可靠性要求的场景可缩短至5秒,但需注意避免网络风暴。
- T6设置: 默认45秒,对于高延迟网络(如跨地域连接)可增大至60-90秒。
- T7设置: 默认120秒,对于需要快速检测断线的场景可缩短至30-60秒。
- T8设置: 默认5秒,建议保持默认值,过小容易误判断线,过大会延迟故障发现。
- 防火墙规则: 放行HSMS端口(默认5000),确保状态检测防火墙的会话超时大于T7+T8。
- 日志记录: 在主动方和被动方均开启HSMS日志,记录连接建立和超时事件。