4、可靠性机制:SECS I的硬件流控与CRC校验、HSMS的TCP重传机制与心跳包、断线重连策略对比
说到可靠性,这其实是选型时最容易被忽略、但出问题后最让人头疼的部分。我见过不少项目,前期只盯着传输速度选型,结果现场跑起来三天两头断线、数据错乱,最后不得不返工换方案。
SECS I 和 HSMS 在可靠性上的思路完全不同。一个靠硬件硬扛,一个靠软件协议兜底。咱们今天就把这两套机制掰开揉碎了讲清楚。
4.1 SECS I 的硬件流控与 CRC 校验
SECS I 是 RS-232 时代的产物。那个年代,线路质量不稳定,干扰也多。所以它的可靠性设计非常「物理」——直接在硬件层面做文章。
4.1.1 硬件流控(RTS/CTS)
说白了,就是靠两根额外的信号线来协调收发节奏。发送方在发数据前,先问接收方:「你准备好了吗?」接收方拉高 CTS 线,发送方才能开始发。
我在一条老旧的半导体封装线上遇到过一个问题:设备端的缓存只有 256 字节,但上位机一次发过来 1KB 的数据包。如果没有硬件流控,数据直接溢出丢失。后来我检查发现,CTS 信号线根本没接。嗯,这就是典型的「省一根线,多一堆坑」。
- RTS(Request To Send):发送方请求发送
- CTS(Clear To Send):接收方允许发送
- 流控粒度:按字符级别控制,不是按包
4.1.2 CRC 校验
SECS I 在 Message 层使用 CRC-16 校验。每一条完整的消息块(Block)末尾都会附加 2 字节的 CRC 值。接收方收到后重新计算,如果对不上,直接丢弃并要求重传。
你想想看,RS-232 在工厂环境里很容易受到电机启停、变频器干扰,偶尔会有一两个 bit 翻转。CRC 就是用来抓这种「小概率但致命」的错误的。
4.2 HSMS 的 TCP 重传机制与心跳包
HSMS 跑在 TCP/IP 上,TCP 本身已经提供了可靠传输。但半导体设备对可靠性的要求远高于普通网络应用,所以 HSMS 在 TCP 之上又加了两层保险:应用层心跳和连接监控。
4.2.1 TCP 重传机制
TCP 的重传是操作系统内核自动完成的。发送方发出数据后,会启动一个定时器。如果在超时时间内没收到 ACK,就自动重传。重传间隔会指数退避——第一次等 200ms,第二次 400ms,第三次 800ms……直到达到上限。
但这里有个坑:TCP 重传只保证数据到达,不保证应用层能及时处理。我遇到过一种情况:网络偶尔闪断 2 秒,TCP 重传成功了,但设备端的应用层因为超时已经断开了连接。这就是典型的「网络层 OK,应用层 NG」。
| TCP 重传参数 | 默认值 | 说明 |
|---|---|---|
| 初始 RTO | 200ms ~ 1s | 取决于操作系统和 RTT |
| 最大重传次数 | 5 ~ 15 次 | Linux 默认 15 次 |
| 指数退避因子 | 2 | 每次超时翻倍 |
4.2.2 心跳包(Heartbeat)
HSMS 定义了一种特殊的控制消息——Separate 和 Heartbeat。Separate 用于正常断开,Heartbeat 用于检测连接是否还活着。
实际项目中,我一般建议心跳间隔设为 10~30 秒。太短了浪费带宽,太长了发现断线不及时。你想想看,如果一条生产线每分钟生产 100 片晶圆,断线 30 秒才发现,那就是 50 片晶圆的数据丢了。
4.3 断线重连策略对比
断线重连是两种协议最大的差异点之一。SECS I 基本没有重连机制——线断了就是断了,需要人工干预。HSMS 则有一套完整的重连策略。
4.3.1 SECS I 的断线处理
SECS I 的物理层断线后,设备端和上位机都会进入「离线」状态。要恢复通信,必须重新执行一遍 ENTER/ONLINE 流程。说白了,就是人工插拔线缆或者重启设备。
我曾经在一个老工厂里看到,操作员每天上班第一件事就是检查 RS-232 线缆有没有松脱。这种场景在今天看来确实有点原始,但在一些老旧产线上依然存在。
4.3.2 HSMS 的自动重连
HSMS 定义了两种角色:主动方(Active)和被动方(Passive)。主动方负责发起连接,被动方负责监听。断线后,主动方会按照预设的重连策略自动尝试重新建立连接。
标准的重连策略是这样的:
- 检测到断线(TCP 连接断开或心跳超时)
- 主动方进入「等待重连」状态
- 等待固定间隔(通常 5~15 秒)
- 重新发起 TCP 连接
- 连接成功后,重新建立 HSMS 会话
- 如果失败,重复步骤 3~5,直到达到最大重试次数
4.4 核心对比:一张表说清楚
| 维度 | SECS I | HSMS |
|---|---|---|
| 流控方式 | 硬件 RTS/CTS | TCP 滑动窗口 |
| 校验方式 | CRC-16(Message 层) | TCP 校验和(传输层) |
| 重传机制 | 无(依赖硬件) | TCP 自动重传 + 应用层心跳 |
| 断线检测 | 物理层断开 | 心跳超时 + TCP RST |
| 重连策略 | 人工干预 | 自动重连(可配置) |
| 适用场景 | 短距离、稳定环境 | 长距离、网络环境复杂 |
4.5 知识结构图:可靠性机制全景
下面这张图把两种协议的可靠性机制放在一起对比,方便你快速理解整体架构。