第2章:Modbus物理层与电气特性

各位同学,咱们今天聊聊Modbus的物理层。说白了,就是信号到底怎么在线上跑的。

很多人学Modbus,上来就盯着报文格式看,结果到了现场发现设备死活连不上。嗯,我当年也犯过这个错。后来才明白,物理层搞不定,上层协议再漂亮也是白搭。

2.1 RS-232、RS-485、RS-422标准对比

这三个标准,是Modbus最常用的物理层载体。我习惯把它们分成两类:RS-232是一对一的,RS-485和RS-422是一对多的。

特性 RS-232 RS-485 RS-422
传输方式 单端不平衡 差分平衡 差分平衡
最大节点数 1发1收 32个(标准) 1发10收
最大距离 约15米 约1200米 约1200米
最大速率 115.2 kbps 10 Mbps 10 Mbps
信号线数 TX、RX、GND A、B(两线) T+、T-、R+、R-(四线)
抗干扰能力

你看这个表,RS-232的距离限制很明显。我在一个老旧工厂里见过,有人用RS-232拉了30米线,结果数据全是乱码。后来换成RS-485,问题立马解决。

核心区别一句话:

  • RS-232:单端信号,共地干扰大,适合短距离
  • RS-485:差分信号,两线半双工,适合多站组网
  • RS-422:差分信号,四线全双工,适合一对多高速通信

2.2 两线制与四线制接线

这个知识点,说白了就是RS-485和RS-422的区别。但很多人到了现场就搞混。

两线制(RS-485)

两线制只有A和B两根数据线。发送和接收共用同一对线,所以是半双工——同一时刻只能发或者只能收。

我个人的习惯是:A接A,B接B。但有些厂家把A标成D+,B标成D-,或者反过来。嗯,这里有个坑——不同厂家的A/B定义可能相反。我曾经遇到过,两台设备A对A、B对B接上,死活不通。后来用万用表一量,发现其中一台的A其实是B。所以,接线前最好用示波器看看波形,或者查清楚手册。

// 两线制接线示意
设备1 A —— 设备2 A
设备1 B —— 设备2 B
设备1 GND —— 设备2 GND(建议接,但不是必须)

四线制(RS-422)

四线制有T+、T-(发送对)和R+、R-(接收对)。发送和接收各走各的线,所以是全双工——可以同时发和收。

你想想看,四线制的好处是什么?主机可以一直发,从机可以一直回,不用等。但代价是多两根线。我在一个高速数据采集项目里用过RS-422,因为主机需要连续下发指令,从机要实时回传数据,半双工根本扛不住。

// 四线制接线示意
主机 T+ —— 从机 R+
主机 T- —— 从机 R-
主机 R+ —— 从机 T+
主机 R- —— 从机 T-
主机 GND —— 从机 GND

我的建议:

如果现场只有几个设备,距离不远,用RS-485两线制就够了。如果主机需要频繁下发指令,从机又要实时响应,那就上RS-422四线制。别为了省两根线给自己挖坑。

2.3 终端电阻的作用

终端电阻,说白了就是在线路两端各加一个电阻,用来消除信号反射。

为什么会反射?因为信号在线上跑,遇到阻抗突变的地方就会反弹回来。如果反射信号和原始信号叠加,波形就变形了,数据就错了。

终端电阻的值一般取120Ω,和双绞线的特性阻抗匹配。我见过有人不加终端电阻,短距离(比如10米以内)也能用。但一旦距离超过50米,或者速率高了,不加终端电阻就是找罪受。

注意:

终端电阻只加在总线的最两端。中间节点不要加。我曾经见过一个项目,每个设备都加了120Ω电阻,结果整个总线负载太重,信号幅度被拉低,通信直接瘫痪。

2.4 偏置电阻的作用

偏置电阻,很多人容易和终端电阻搞混。它们的作用完全不同。

偏置电阻是用来保证总线在空闲状态时,A和B之间有一个确定的电压差。RS-485标准规定,A比B高200mV以上才算逻辑1,A比B低200mV以上才算逻辑0。如果总线空闲时没有偏置,A和B的电压差可能在0V附近飘,接收器就会输出不确定的状态。

偏置电阻的接法:在主机端,A线通过一个电阻上拉到5V,B线通过一个电阻下拉到GND。这样空闲时A比B高,总线处于逻辑1状态。

// 偏置电阻接法示意
5V —— 偏置电阻(约680Ω)—— A线
B线 —— 偏置电阻(约680Ω)—— GND

偏置电阻的值怎么选?我一般用680Ω到1kΩ之间。太小了功耗大,太大了偏置效果不够。具体可以算一下:假设总线有32个节点,每个节点的输入阻抗是12kΩ,那么总线的等效阻抗是12kΩ/32=375Ω。偏置电阻和这个等效阻抗分压,要保证A-B电压差大于200mV。

避坑指南:

我曾经在一个项目里,RS-485总线偶尔会收到乱码。查了半天,发现是偏置电阻没加。总线空闲时,A和B的电压差只有几十毫伏,接收器随机输出0或1。加上偏置电阻后,问题彻底消失。

2.5 实际接线中的常见问题

最后,我总结几个现场容易踩的坑:

  1. 地线问题:RS-485虽然用差分信号,但最好还是把各个设备的GND连起来。否则共模电压可能超出芯片承受范围。我见过一个案例,两个设备距离200米,GND没连,结果通信时好时坏,最后发现共模电压高达十几伏。
  2. 线缆选择:用双绞线,不要用平行线。双绞线能有效抑制共模干扰。我习惯用屏蔽双绞线,屏蔽层单端接地。
  3. 分支问题:RS-485总线应该是直线拓扑,不要有长分支。分支长度超过1米,反射就会变得明显。如果实在避免不了,分支长度控制在30厘米以内。
  4. 速率和距离的权衡:速率越高,可靠传输的距离越短。9600 bps可以跑1200米,但115200 bps可能只能跑100米。别指望高速率还能跑远距离。

好了,这一章的内容就这些。物理层虽然看起来枯燥,但它是整个通信系统的基础。基础打不牢,后面全是坑。下一章咱们开始讲Modbus的报文格式,那才是真正有意思的部分。