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,那才是物联网的“主角”。