4、HSMS连接建立过程:主动连接与被动连接、Select/Connect流程、连接超时处理
HSMS(High-Speed SECS Message Services)作为SECS/GEM通信的TCP/IP传输层,其连接建立过程是链路保活与异常恢复的基础。本章深入剖析HSMS连接建立的完整机制,包括主动/被动连接角色、Select/Connect握手流程以及关键的超时处理策略。
4.1 主动连接与被动连接角色模型
在HSMS通信中,两个实体分别承担主动连接方(Active Entity)和被动连接方(Passive Entity)的角色。角色分配决定了谁发起TCP连接请求,谁监听等待连接。
| 角色 | 职责 | 典型设备 | 连接行为 |
|---|---|---|---|
| 主动连接方(Active) | 主动发起TCP连接请求,发送Select.req | Host(上位机) | 调用connect(),等待被动方Accept |
| 被动连接方(Passive) | 监听端口,接受连接,响应Select.req | Equipment(设备) | 调用listen(),accept()后等待Select |
工程实践提示:在半导体工厂自动化中,通常Host作为主动方,Equipment作为被动方。但HSMS标准允许角色互换,具体由双方配置决定。建议在系统设计阶段明确角色分配,避免双方同时主动连接导致端口冲突。
4.2 Select/Connect流程详解
HSMS连接建立的核心在于Select流程,它发生在TCP三次握手之后,用于在已建立的TCP连接上协商HSMS会话。完整的连接建立分为两个阶段:
4.2.1 阶段一:TCP连接建立(Connect)
- 主动方调用
connect()向被动方的监听端口发起TCP连接请求。 - 被动方通过
accept()接受连接,完成TCP三次握手。 - 此时TCP连接已建立,但HSMS会话尚未激活,双方处于未选择(Not Selected)状态。
4.2.2 阶段二:HSMS Select握手
Select流程使用HSMS控制消息完成会话协商,具体步骤如下:
| 步骤 | 方向 | 消息类型 | 说明 |
|---|---|---|---|
| 1 | 主动方 → 被动方 | Select.req | 请求将连接设置为活动会话 |
| 2 | 被动方 → 主动方 | Select.rsp | 响应Select请求,携带状态码 |
| 3 | — | 通信建立 | Select.rsp状态为0x0000表示成功 |
Select.rsp状态码:
- 0x0000 — 成功(Success),连接进入Selected状态
- 0x0001 — 连接已存在(Already Selected),拒绝新Select
- 0x0002 — 连接未就绪(Not Ready),暂时无法处理
- 0x0003 — 拒绝(Refused),因配置或资源原因拒绝
4.3 连接超时处理机制
HSMS定义了多个超时定时器来保障连接建立的可靠性。其中与连接建立直接相关的超时包括:
| 超时名称 | 符号 | 默认值 | 触发条件 | 超时后行为 |
|---|---|---|---|---|
| 连接响应超时 | T3 | 45秒 | 发送Select.req后未收到Select.rsp | 关闭TCP连接,重试或报错 |
| 连接建立超时 | T5 | 10秒 | TCP connect() 未完成 | 重试连接,累计失败次数 |
| 连接间隔超时 | T6 | 5秒 | 连续两次连接尝试的最小间隔 | 防止连接风暴 |
4.3.1 超时处理策略
- T3超时处理:主动方在发送Select.req后启动T3定时器。若超时未收到Select.rsp,主动方应关闭TCP连接并记录错误。建议重试3次后上报通信故障。
- T5超时处理:TCP连接建立阶段,若connect()在T5时间内未完成,主动方应取消连接尝试,等待T6间隔后重试。
- T6间隔控制:两次连接尝试之间必须至少间隔T6时间,避免频繁连接请求导致网络拥塞或对端过载。
常见陷阱:部分实现将T3和T5混淆,导致Select.req超时后立即重连而不等待T6间隔,可能触发对端连接拒绝或资源泄漏。务必区分T3(应用层响应超时)和T5(传输层连接超时)的适用场景。
4.4 连接建立异常场景与处理
在实际工程中,连接建立可能遇到多种异常情况,需要针对性地设计处理逻辑:
| 异常场景 | 可能原因 | 推荐处理方式 |
|---|---|---|
| TCP连接被拒绝 | 被动方未启动、端口错误、防火墙拦截 | 等待T6间隔后重试,累计失败次数,超过阈值则告警 |
| Select.req无响应 | 被动方协议栈异常、网络丢包 | T3超时后关闭连接,重试连接流程 |
| Select.rsp返回拒绝 | 连接已存在、资源不足 | 记录错误原因,等待T6后重试或切换备用连接 |
| 双方同时主动连接 | 配置错误,双方均为Active | 检测到重复连接后,一方主动关闭,按优先级决定保留 |
最佳实践:建议在连接建立模块中实现指数退避重试策略。首次失败后等待T6(5秒),第二次等待2×T6,第三次等待4×T6,最大不超过60秒。同时记录重试次数和失败原因,便于运维排查。
4.5 连接建立参数配置建议
以下参数配置基于SEMI E37.1标准及工程实践经验,适用于大多数半导体设备通信场景:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| T3(连接响应超时) | 45秒 | 标准默认值,网络延迟较大时可适当增加至60秒 |
| T5(连接建立超时) | 10秒 | TCP连接超时,局域网环境可缩短至5秒 |
| T6(连接间隔) | 5秒 | 防止连接风暴,不可小于1秒 |
| 最大重试次数 | 3~5次 | 超过后上报通信故障,进入维护状态 |
| 监听端口 | 5000~5009 | SEMI标准推荐端口范围,需与对端一致 |
正确理解和实现HSMS连接建立机制,是构建可靠SECS/GEM通信链路的第一步。在实际部署中,建议通过日志记录每次连接建立的全过程,包括TCP握手时间、Select.req/rsp交互时间以及超时事件,以便在链路异常时快速定位问题。