3、SECS-I 通信基础:RS-232 物理层、块传输协议、与 HSMS 的对比
聊到 SECS/GEM,很多人一上来就盯着 HSMS 看。毕竟现在 Ethernet 太普及了,谁还愿意碰串口?
但我得说一句:SECS-I 并没有死。我在不少老厂改造项目里,依然能看到 RS-232 线缆从设备屁股后面拖出来。你想想看,一台用了十几年的扩散炉,它不会因为你上了新系统就自动长出网口。
所以,这一章我们老老实实把 SECS-I 扒清楚。包括物理层怎么接、块传输怎么拆包、以及它跟 HSMS 到底差在哪。
3.1 RS-232 物理层:别小看那三根线
SECS-I 的物理层就是 RS-232。说白了,就是串口通信。但这里有个坑——它不是标准的 RS-232 电平。
标准 RS-232 用 ±12V 表示 0 和 1,但 SECS-I 规范里明确要求使用 20mA 电流环。为什么?因为抗干扰。工厂车间里电机一启动,电压波动能把你信号吃掉。电流环就不一样了,20mA 拉过去,干扰再大也拉不垮。
我曾经在一个光伏车间里调试,现场变频器多到离谱。用普通 RS-232 转换器,数据全是乱码。换成 20mA 电流环隔离模块,瞬间稳了。嗯,这里要注意:买设备时一定要确认是电流环还是电压型,否则你会怀疑人生。
3.2 块传输协议:数据是怎么切碎的?
SECS-I 的传输单位叫 Block(块)。一个块最大 254 字节。为什么是 254?因为头部只有 1 个字节表示长度,0 被保留,所以最大 255-1=254。
我习惯把块传输想象成寄快递:
- 一个 Message 可能很大,比如传 10KB 的配方文件
- 它会被切成多个 Block,每个 Block 就是一个包裹
- 接收方收到所有 Block 后,再拼回完整的 Message
每个 Block 的结构长这样:
+--------+--------+--------+--------+--------+--------+--------+--------+
| 长度(1B)| 设备ID | 控制位 | 消息ID | 块号 | 系统位 | 数据... |
| | (1B) | (1B) | (2B) | (1B) | (2B) | (0-244B)|
+--------+--------+--------+--------+--------+--------+--------+--------+
这里有个关键字段叫 控制位。它里面有个 E-bit(结束位)。当 E-bit=1 时,表示这是当前 Message 的最后一个 Block。接收方看到 E-bit=1,就知道可以开始拼装了。
3.3 传输流程:握手与重传
SECS-I 的传输是 半双工 的。也就是说,同一时刻只能一个方向发数据。发完一个 Block,必须等对方回 ACK,才能发下一个。
流程大致如下:
- 发送方发一个 Block
- 接收方收到后,回一个 ACK/NAK(1 字节)
- 发送方收到 ACK,继续发下一个 Block
- 如果收到 NAK 或超时没收到,重传当前 Block
超时时间是多少?规范里写的是 1 秒。但我在实际项目中,经常遇到老设备响应慢,1 秒不够用。我一般会设到 3 秒,同时加一个重试计数器,最多重试 3 次。超过 3 次,直接报通信故障。
3.4 与 HSMS 的对比:为什么 HSMS 成了主流?
HSMS(High-Speed SECS Message Services)是基于 TCP/IP 的。说白了,就是把 SECS 报文封装在 TCP 包里传。它跟 SECS-I 最大的区别在于:
| 对比项 | SECS-I | HSMS |
|---|---|---|
| 物理层 | RS-232(20mA 电流环) | Ethernet(TCP/IP) |
| 传输方式 | 半双工,逐块确认 | 全双工,可并发 |
| 最大块大小 | 254 字节 | 无限制(受 TCP 限制) |
| 传输效率 | 低(每块都要 ACK) | 高(批量确认) |
| 连接管理 | 无(物理连接即通信) | 有(Select/Connect 状态机) |
| 适用场景 | 老设备、短距离、低速 | 新设备、远距离、高速 |
你可能会问:既然 HSMS 这么好,为什么还要学 SECS-I?
原因很简单:很多老设备只支持 SECS-I。你不可能为了上 HSMS,把设备的主板都换了。而且,SECS-I 的逻辑其实更简单,适合初学者理解 SECS 协议的底层机制。我当年就是从 SECS-I 入门的,搞懂了块传输和 ACK 机制,再看 HSMS 的会话管理,一下子就通了。
3.5 知识体系图:SECS-I 的核心逻辑
下面这张图,是我自己画的一个 SECS-I 通信流程概览。你可以把它当作本章的思维导图:
这张图把 SECS-I 的三个核心层串起来了。从上往下看:物理层负责把电信号传过去,块传输协议负责把数据切成小包,传输流程负责保证每个包都安全到达。最下面是对比 HSMS 的结论——说白了,SECS-I 就是给老设备用的,新项目别折腾它。
3.6 本章小结
SECS-I 虽然老,但它是理解 SECS 协议的基础。搞懂了块传输和 ACK 机制,你再看 HSMS 的会话管理,会发现很多概念是相通的。
我个人觉得,学 SECS-I 最大的收获不是学会怎么接串口,而是理解「可靠传输」这件事在工业现场有多难。你想想看,一条 15 米的线,旁边就是大功率电机,数据还能不丢包——这本身就是工程艺术的体现。
下一章,我们会进入 SECS-II 的消息格式。到时候你会发现,SECS-I 传过来的那些字节,到底是怎么被解析成有意义的指令的。