4、有线通信协议简介:RS-232/485、CAN、Modbus、Ethernet/IP 在工业物联网中的应用
聊完了无线,咱们得回头看看有线。你别觉得有线“土”,在工业现场,有线通信才是真正的老大哥。我做了十几年物联网,见过太多无线信号被电机干扰、被金属机箱屏蔽的惨案。最后大家还是乖乖拉上了线。
今天咱们就聊聊工业物联网里最常见的四种有线协议:RS-232/485、CAN、Modbus 和 Ethernet/IP。它们各有各的脾气,选对了,项目稳如老狗;选错了,调试到怀疑人生。
4.1 RS-232 与 RS-485:串口通信的“老兵”与“中坚”
先说 RS-232。这玩意儿年纪比我还大,上世纪60年代就有了。它最大的特点就是“点对点”——一台设备只能跟另一台设备聊。
RS-232 的核心参数:
- 传输距离:通常不超过15米(我实测过,20米就开始丢包了)
- 速率:最高115200bps,一般用9600或19200
- 电平:±12V,抗干扰还行,但跟TTL电平不兼容
- 接口:DB9,你电脑上那个串口就是它
我个人习惯,只有在调试设备、或者连接近距离的PLC时才会用RS-232。它有个致命伤:不能多机通信。你想想看,一个车间几十台设备,总不能每台都拉一根线到电脑吧?
这时候,RS-485就登场了。
RS-485 说白了就是 RS-232 的升级版。它用差分信号传输,抗干扰能力极强。我在一个变频器堆成山的项目里用过,485信号愣是没被干扰到。
RS-485 的实战要点:
- 支持多点通信:一条总线上最多挂256个节点(实际建议不超过32个,否则信号会衰减)
- 传输距离:1200米(不加中继器),加中继能到几公里
- 速率:跟距离成反比,100米内能跑10Mbps,1000米就只能跑100kbps了
- 接线:A线、B线,千万别接反!我见过有人把A接B、B接A,折腾了一整天
避坑指南:
我曾经在一个项目里,485总线怎么调都不稳定。后来发现,终端电阻没加。记住:总线两端必须各加一个120欧姆的匹配电阻。不加的话,信号反射会让你怀疑人生。
4.2 CAN 总线:汽车和工业的“硬汉”
CAN 总线,全称 Controller Area Network。这玩意儿最早是博世为汽车设计的,后来被工业领域“借”走了。
为什么说它是硬汉?因为它太可靠了。
CAN 跟 RS-485 最大的区别在于:CAN 是“多主”的。什么意思?就是总线上任何节点都可以随时发消息,不需要等主机轮询。这在实时性要求高的场景里太重要了。
| 特性 | RS-485 | CAN |
|---|---|---|
| 通信方式 | 主从式 | 多主式 |
| 错误处理 | 靠软件 | 硬件自带CRC校验+重发 |
| 实时性 | 一般 | 高(优先级仲裁) |
| 典型速率 | 10Mbps(短距) | 1Mbps(40米内) |
| 成本 | 低 | 中 |
我记得有一次做AGV小车的项目,要求多台小车协同运动。用RS-485的话,主机轮询一圈下来,小车都撞上了。换成CAN之后,每台小车都能实时广播自己的位置,问题迎刃而解。
CAN 的典型应用场景:
- 汽车电子:发动机、ABS、气囊
- 工业自动化:机器人、CNC、AGV
- 医疗设备:CT机、监护仪
- 楼宇控制:电梯、消防系统
嗯,这里要注意:CAN 的物理层跟 RS-485 很像,也是差分信号。但它们的协议完全不同,不能混用。我见过有人把 CAN 收发器当 485 用,结果烧了一片。
4.3 Modbus:工业物联网的“通用语言”
Modbus 不是物理层协议,它是应用层协议。它跑在 RS-232、RS-485 甚至以太网上。
为什么说它是通用语言?因为几乎所有工业设备都支持它。PLC、变频器、温控器、电表……你随便找个工业设备,十有八九支持 Modbus。
Modbus 有两种模式:
- Modbus RTU:二进制传输,效率高,最常用
- Modbus ASCII:文本传输,可读性好,但效率低
我个人习惯,99%的场景用 RTU。ASCII 只有在调试时才用,因为能看到明文。
Modbus 的寄存器类型:
| 类型 | 范围 | 读写 | 用途 |
|---|---|---|---|
| 线圈 (Coil) | 00001-09999 | 读写 | 开关量输出 |
| 离散输入 (Discrete Input) | 10001-19999 | 只读 | 开关量输入 |
| 输入寄存器 (Input Register) | 30001-39999 | 只读 | 模拟量输入 |
| 保持寄存器 (Holding Register) | 40001-49999 | 读写 | 参数设置、数据存储 |
写个简单的读取示例:
// 读取从机地址1的保持寄存器,起始地址0,读取2个寄存器
// 请求帧:01 03 00 00 00 02 C4 0B
// 01: 从机地址
// 03: 功能码(读取保持寄存器)
// 00 00: 起始地址
// 00 02: 寄存器数量
// C4 0B: CRC校验
// 响应帧:01 03 04 00 0A 00 14 7A 9E
// 01: 从机地址
// 03: 功能码
// 04: 数据字节数(2个寄存器=4字节)
// 00 0A: 第一个寄存器值(10)
// 00 14: 第二个寄存器值(20)
// 7A 9E: CRC校验
避坑指南:
我曾经在一个项目里,Modbus 通信总是超时。查了半天,发现是设备地址冲突——两台设备都设成了地址1。记住:同一总线上每个设备的地址必须唯一,而且不能是0(0是广播地址)。
4.4 Ethernet/IP:工业以太网的“贵族”
Ethernet/IP 可不是“以太网/IP地址”的意思。它是 ODVA 组织制定的工业以太网协议,全称 Ethernet Industrial Protocol。
说白了,它就是让普通以太网能跑工业实时数据。它基于 TCP/IP 和 UDP,但加了一层 CIP(Common Industrial Protocol)。
为什么说它是贵族?因为贵。一个支持 Ethernet/IP 的模块,价格是 Modbus TCP 模块的3-5倍。但它的性能也确实好。
| 特性 | Modbus TCP | Ethernet/IP |
|---|---|---|
| 传输层 | TCP | TCP + UDP |
| 实时性 | 一般 | 高(支持CIP Sync) |
| 数据模型 | 简单寄存器 | 对象化模型 |
| 配置复杂度 | 低 | 高 |
| 生态 | 广泛 | 罗克韦尔主导 |
我记得有个汽车焊装线的项目,要求所有机器人、PLC、视觉系统在10毫秒内同步。Modbus TCP 做不到,因为 TCP 的握手太慢了。最后用了 Ethernet/IP 的 UDP 组播,延迟降到了2毫秒。
Ethernet/IP 的三种通信模式:
- 显式报文:基于TCP,用于配置、诊断等非实时数据
- 隐式报文:基于UDP,用于实时I/O数据,周期性发送
- CIP Sync:基于IEEE 1588精确时间同步,用于运动控制
嗯,这里要注意:Ethernet/IP 的配置很繁琐。你需要用 EDS 文件来描述设备,用 RSNetWorx 来组态。我第一次配置时,光看文档就看了一整天。
4.5 选型建议:到底用哪个?
说了这么多,你可能会问:到底选哪个?
我的建议很简单:
- 简单、低成本、低速:选 RS-485 + Modbus RTU。这是最经典的组合,稳定、便宜、好调试。
- 实时性要求高、多主通信:选 CAN。比如机器人、AGV、汽车电子。
- 需要跟IT系统对接、高速:选 Ethernet/IP 或 Modbus TCP。前者性能好,后者成本低。
- 调试、近距离、单台设备:RS-232 就够了,别折腾。
我的个人经验:
如果你刚开始做工业物联网,我建议先从 RS-485 + Modbus RTU 入手。这套组合的坑最少,资料最多,而且几乎所有的工业设备都支持。等你把这套玩熟了,再考虑 CAN 和 Ethernet/IP。
记住:在工业现场,稳定比速度重要,简单比功能重要。
好了,有线协议就聊到这儿。下一章咱们开始讲 MQTT,那才是物联网的“主角”。