第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 实际接线中的常见问题
最后,我总结几个现场容易踩的坑:
- 地线问题:RS-485虽然用差分信号,但最好还是把各个设备的GND连起来。否则共模电压可能超出芯片承受范围。我见过一个案例,两个设备距离200米,GND没连,结果通信时好时坏,最后发现共模电压高达十几伏。
- 线缆选择:用双绞线,不要用平行线。双绞线能有效抑制共模干扰。我习惯用屏蔽双绞线,屏蔽层单端接地。
- 分支问题:RS-485总线应该是直线拓扑,不要有长分支。分支长度超过1米,反射就会变得明显。如果实在避免不了,分支长度控制在30厘米以内。
- 速率和距离的权衡:速率越高,可靠传输的距离越短。9600 bps可以跑1200米,但115200 bps可能只能跑100米。别指望高速率还能跑远距离。
好了,这一章的内容就这些。物理层虽然看起来枯燥,但它是整个通信系统的基础。基础打不牢,后面全是坑。下一章咱们开始讲Modbus的报文格式,那才是真正有意思的部分。