2. 通讯协议基础:串口、以太网与工业总线
做运动控制上位机开发,说白了就是跟各种设备「对话」。你得知道对方用什么语言、什么规矩来收发数据。这一章我就带你捋一遍最常用的几种通讯方式——串口、以太网,还有工业现场常见的总线协议。
我个人习惯把通讯协议分成两类:一类是物理层怎么接线的,另一类是数据怎么组织的。咱们先看物理层,再聊数据层。
核心观点:选对通讯协议,比写好代码更重要。协议选错了,后面再怎么优化也白搭。
2.1 串口通讯:RS232 与 RS485
串口通讯,老一辈工程师叫它「串行口」。它一次只传一个 bit,一根数据线走天下。虽然速度不快,但胜在简单、可靠,工业现场至今还在大量使用。
2.1.1 RS232——点对点的老将
RS232 是最早的串口标准之一。我记得刚入行时调试一台老式 PLC,用的就是 RS232。它有几个特点:
- 全双工:发送和接收可以同时进行,用 TX、RX 两根线。
- 电压摆幅大:逻辑 1 是 -3V ~ -15V,逻辑 0 是 +3V ~ +15V。抗干扰能力还行,但距离一长就衰减。
- 传输距离短:一般不超过 15 米。我试过拉 20 米线,数据就开始丢包了。
- 点对点:一台设备只能跟另一台设备通信,不能组网。
| 参数 | RS232 | RS485 |
|---|---|---|
| 传输方式 | 单端(不平衡) | 差分(平衡) |
| 最大距离 | 约 15 米 | 约 1200 米 |
| 最大节点数 | 1 对 1 | 最多 32 个(标准) |
| 电压范围 | ±3V ~ ±15V | ±1.5V ~ ±6V |
| 常用场景 | 调试口、短距设备 | 工业总线、多站通信 |
小技巧:调试 RS232 时,我习惯先用串口助手发一个 0x55(二进制 01010101),看波形是不是交替翻转。如果波形不对,先查电平转换芯片(比如 MAX232)的供电。
2.1.2 RS485——工业现场的主力
RS485 用的是差分信号,两根线(A、B)传一路数据。抗干扰能力比 RS232 强得多,距离也能拉到上千米。
我曾经在一个自动化产线上用过 RS485,挂了 16 台伺服驱动器,用一条双绞线就搞定了。不过要注意:
- 半双工:同一时刻只能发或收,需要软件控制收发切换。
- 终端电阻:长线传输时,必须在总线两端各加一个 120Ω 电阻,防止信号反射。
- 共模电压:虽然差分信号抗干扰,但共模电压不能超过 -7V ~ +12V,否则会烧芯片。
避坑指南:我曾经遇到过 RS485 通信时好时坏,查了半天发现是地线没接。RS485 虽然用差分信号,但设备之间最好还是共地,否则共模电压漂移会导致数据错乱。
2.2 以太网通讯:TCP 与 UDP
以太网在工业领域越来越普及。速度比串口快得多,而且能跟办公网络共用。但工业以太网和普通办公网络有个本质区别——实时性。
2.2.1 TCP——可靠但慢
TCP 是面向连接的协议。它像打电话一样,先建立连接,再传数据,最后挂断。TCP 保证数据不丢、不乱序,但代价是额外的握手和确认包。
我做上位机时,如果传输的是配置文件、固件升级包这类数据,一定用 TCP。丢一个字节都不行。
- 三次握手:SYN → SYN-ACK → ACK,建立连接。
- 重传机制:如果没收到 ACK,发送方会重传数据包。
- 流量控制:接收方可以告诉发送方「慢点发,我处理不过来」。
2.2.2 UDP——快但不可靠
UDP 像发短信——你只管发,对方收没收到你不管。它没有握手、没有重传,所以延迟很低。
在运动控制中,如果传输的是实时状态数据(比如位置、速度),偶尔丢一帧没关系,但延迟必须低。这时候 UDP 比 TCP 更合适。
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 可靠(重传、校验) | 不可靠(尽力而为) |
| 延迟 | 较高(握手+确认) | 低(无握手) |
| 适用场景 | 配置、文件、指令 | 实时状态、视频、音频 |
经验之谈:如果你用 UDP 传运动指令,建议在应用层加一个简单的序列号。接收方发现序列号跳变时,可以判断丢包,然后主动请求重传。这样既保留了 UDP 的低延迟,又弥补了不可靠的短板。
2.3 工业总线协议:EtherCAT 与 CANopen
串口和以太网是通用协议,但工业现场有更专业的总线协议。它们针对运动控制做了专门优化,实时性、同步性远超通用方案。
2.3.1 EtherCAT——高速同步之王
EtherCAT 是德国 Beckhoff 公司开发的实时以太网协议。它的核心思想是「飞读飞写」——数据帧经过每个从站时,从站直接读取或写入数据,延迟只有纳秒级。
我记得第一次用 EtherCAT 控制 8 轴伺服时,同步抖动小于 1 微秒。相比之下,传统脉冲方向控制根本做不到这个精度。
- 拓扑灵活:支持线型、星型、树型,甚至环形冗余。
- 分布式时钟:所有从站自动同步,精度可达 100ns 以内。
- 数据率:100Mbps 全双工,实际有效载荷利用率很高。
关键点:EtherCAT 的从站控制器(ESC)是硬件实现的,所以延迟极低。上位机只需要发一个帧,所有从站的数据都在这个帧里完成读写。
2.3.2 CANopen——稳健的现场总线
CANopen 基于 CAN 总线,最早用在汽车电子,后来被工业自动化广泛采用。它不像 EtherCAT 那么快,但胜在成熟、稳定、成本低。
我曾经用 CANopen 控制一个 4 轴机器人,虽然速度不如 EtherCAT,但抗干扰能力极强。工厂里电机启停、变频器干扰,CANopen 从来没掉过链子。
- 对象字典:每个设备都有一个标准化的数据字典,通过索引和子索引访问。
- PDO/SDO:PDO 用于实时数据交换(高速),SDO 用于配置参数(可靠)。
- 心跳与同步:支持节点心跳检测和同步报文,保证多轴协调。
| 协议 | 最大速率 | 同步精度 | 典型从站数 | 成本 |
|---|---|---|---|---|
| EtherCAT | 100Mbps | < 1μs | 100+ | 较高 |
| CANopen | 1Mbps | < 100μs | 32~64 | 较低 |
注意:CANopen 的 1Mbps 是理论最大值,实际应用中我一般只跑到 500kbps。线缆长度、节点数量都会影响实际速率。别被数据手册上的极限值忽悠了。
2.4 本章知识体系总览
下面这张图把本章的核心知识点串起来了。你可以把它当作一个快速索引,以后遇到通讯问题,先看这张图定位到对应章节。
2.5 小结
这一章我们聊了三种通讯方式:串口(RS232/RS485)、以太网(TCP/UDP)、工业总线(EtherCAT/CANopen)。每种协议都有自己的脾气和适用场景。
你想想看,如果你只是调试一台伺服,用 RS485 就足够了。但如果你要控制 8 轴联动、同步精度要求微秒级,那 EtherCAT 几乎是唯一选择。
嗯,这里要注意:协议只是工具,没有绝对的好坏。我在项目中见过有人用 TCP 传实时数据,结果延迟高到没法用;也见过有人用 RS232 控制 4 轴机器人,虽然慢但稳定可靠。关键是你得清楚自己的需求——速度、距离、节点数、实时性,把这些列出来,协议自然就选出来了。