家人们,是不是一听到 RS232、RS485、RJ45 还有 Modbus 协议,就脑袋发懵? 其实这些通信知识一点都不复杂,今天我就用咱们工控人能听懂的大白话,结合实际项目经验,把这些知识点拆解得明明白白,看完你肯定能豁然开朗!
先从电源插头说起:通信协议的底层逻辑
咱们先抛开复杂的通信术语,从生活中最常见的直流电源说起。你有没有留意过,直流电源的输出插座有三个管脚 —— 正极、负极、接地极,对应的负载插头也得有三个匹配的管脚,这样设备才能正常通电。
这里面藏着三个关键条件,其实就是电源插头的 "物理层协议",和通信接口的底层逻辑异曲同工:
第一,插头和插座的形状、大小、插针直径长度必须完全匹配,不然插都插不进去,这就是物理结构和管脚定义的规范;
第二,电源电压得符合设备需求,比如设备要 24V,你给个 12V 肯定用不了,这就是电平规范;
第三,电源输出阻抗和负载输入阻抗要匹配,不然供电不稳定,这决定了电源的工作性质。
通信接口的物理层(ISO/OSI 模型最底层)也是这个道理,它规定了接口的机械外形、管脚定义、电平和字节格式。咱们常说的字节格式,就是一个字节里包含多少数据位、起始位 / 停止位、奇偶校验位 —— 一般是 8 个数据位、1 个起始位、1 个停止位、1 个奇偶校验位(起始位和停止位可以合并理解)。
全双工 vs 半双工:通信就像打电话和用对讲机
通信接口的工作制,其实和咱们日常沟通特别像,我给大家举两个例子你就懂了:
全双工:就像咱们用手机打电话,你说话的时候能听到对方的声音,对方说话的时候你也能回应,双向同时能通信。RS232 和 RS422 接口就是全双工的;
半双工:更像对讲机,你按住说话的时候听不见别人说,别人说的时候你也插不上话,但双方都有说和听的能力。RS485 接口就是典型的半双工。
(说明一下:这些图是我早年在 ABB 做 MODBUS 通信培训时的 PPT 截图,虽然时间有点久,但核心内容绝对准确,大家可以放心参考~)
因为 RS485 是半双工,所以必须有 "指挥者" 和 "响应者"—— 也就是主站和从站。一般来说,一个 RS485 网络里主站只有 1 个,从站最多能接 32 个。这种主从关系,本质上是为了合理分配通信总线的控制权,避免大家同时 "说话" 造成混乱。
接线方式大不同:RS485 为啥不能像接电源那样接?
很多刚入行的朋友会犯一个错:把 RS485 通信线当成电源线路来接。咱们都知道,电源可以拉一条主干线,然后并联多个支路给不同设备供电,只要功率够就行。但 RS485 绝对不能这么接!
RS485 必须用 "菊花链"(也叫链形)接线方式:主站先接线到第一个从站,再从第一个从站接到第二个,依次类推直到最后一个从站,而且最后一个从站的终端必须接一个 100 欧的终端电阻。这种接线方式下,如果中间任何一点断了,后面的设备就都没法通信了。
可能有人会疑惑:从电气接线看明明是并联的,为啥通信上是链形?其实这就像排队买票,虽然大家都在同一个队伍里,但必须按顺序一个个来,不能插队,这样通信才不会乱。
这里给大家划重点:
RS485:链形菊花瓣接线,半双工通信;
RS232:点到点直接连接,全双工通信;
不管是哪种接口,都必须符合物理层的通信规约,不然根本没法正常通信。
Modbus-RTU 协议:让设备 "听懂" 彼此的 "语言规则"
有了物理层接口,设备就能通信了吗?答案是:不行! 就像两个人见面,虽然能说话(物理层连接正常),但一个说中文一个说英文,互相听不懂,还是没法沟通。这时候就需要 Modbus-RTU 协议来当 "翻译"。
Modbus-RTU 是数据链路层协议,相当于给通信双方制定了一套统一的 "语言规则"—— 也就是帧结构。物理层定义的是 "字"(字节),数据链路层则把这些 "字" 组织成 "句子"(帧),规定了语法结构,这样双方才能听懂彼此的意思。
Modbus 也是主从式结构,通信流程特别清晰:
主站先下达命令,占用通信总线;
主站释放总线,让从站回应;
从站完成回应后,再把总线还给主站,等待下一次命令。
不同的 Modbus 命令(功能码),帧结构也不一样。比如最常用的读寄存器命令:
主站发送帧:2 字节地址码 + 1 字节功能码 + 2 字节数据地址码 + 2 字节 CRC 校验码;
从站回应帧:2 字节功能码 + 1 字节回应区字节总数 + N 字节回应数据 + 2 字节 CRC 校验码。
这里要注意:数据链路层协议必须建立在物理层连接正常的基础上,这是 ISO/OSI 模型的基本原则 —— 低层协议要为上层协议提供无故障的连接和信息交换。
网络层与 RJ45:现场总线的 "交通枢纽"
从数据链路层再往上,就是网络层了,它的作用是构建现场总线的信息交换网,把通信帧打包成 "数据分组"(就像一篇短文或一页数据)发送给对方。
因为不同设备的网络结构可能不一样,所以需要专门的设备来连接:
同种网络用网桥连接;
不同网络用网关连接;
网络信道有多条时,用路由器选择最优路径 —— 路由器不仅能选真实路径,还能构建虚拟路径,决定数据发送顺序,是网络层最关键的设备。
ISO/OSI 模型里,物理层 + 数据链路层 + 网络层合称为现场总线,它的通信接口就是咱们常见的 8 针 RJ45 水晶头。这里要特别提醒:RJ45 和 RS232/RS485/RS422 完全不是一回事,千万别搞混了!
有了路由器,网络层支持星形网络结构,这和 RS485 的链形结构完全不同,适用场景也不一样 —— 星形结构更适合设备分布较散、需要灵活扩展的场景。
PLC 与电力仪表通信:实操步骤全拆解
很多工控人在工作中都会遇到 PLC 和电力仪表通信的需求,只要按以下 5 步操作,基本不会出错,我结合实际项目给大家详细说:
第一步:按规范接线
严格按照菊花瓣结构接线,把 PLC 的通信接口和 N 个电力仪表依次连接,最后一个仪表的末端一定要接 100 欧终端电阻(通信速率高于 19.2kbps 时必须接,低速时可酌情,但建议都接)。
第二步:设置从站地址
给每个电力仪表分配唯一地址,按地址递增原则设置,比如 01H、02H、1FH(H 代表 16 进制,1FH 就是十进制 31,刚好是最大从站数)。
第三步:匹配通信速率
在 PLC 编程软件中,设置和电力仪表一致的通信速率(比如 9600bps),速率不匹配会直接导致通信失败。
第四步:编写 Modbus 通信码
按电力仪表的数据区地址码,在 PLC 编程软件中编写 Modbus 通信码,还要设定好各从站的循环关系。这里要注意:Modbus 通信码需要符合 IEC 61131-3 编程模块要求,普通的 PLC 梯形图(只符合 IEC 61131-1)没有这个功能。
第五步:开辟专用数据区
在 PLC 内存中专门划分一块区域,用来存放从电力仪表读取并处理后的信息,这个区域叫 "数据点表",有时也简称通信协议,方便更高层的总站读取。
最后就是开机测试了,测试过程中要注意观察通信状态,遇到问题可以从接线、地址、速率这几个方面排查,大部分故障都能解决。
实战案例:Modbus-RTU 通信帧详解
光说理论不够,给大家举一个真实的通信案例,帮你更直观理解:
某电力仪表地址 01H,内存 2000 位置存放了三相电流、三相电压共 6 个数据,每个数据占 2 字节,共 12 字节,通信速率 9600bps。
先给大家算个账:bps 是比特率,代表每秒发送的 0/1 信号数。一个字节包含 8 个数据位 + 1 个起始位 + 1 个奇偶校验位,共 10 比特,所以 9600bps 的速率下,每秒能发送 9600÷10=960 个字节。
主站下行帧(读命令)
帧结构:01 03 07 D0 00 06 C5 45
01H:从站地址;
03H:功能码(读寄存器命令);
07D0H:内存地址 2000(16 进制转换);
0006H:读取 6 个数据;
C545H:CRC 校验码;
发送时间:8 字节 ×10 比特 ÷9600bps≈8.33 毫秒。
从站上行帧(回应)
帧结构:01 03 0C 00 64 00 64 00 64 00 DC 00 DC 00 DC D6 F5
01H、03H:和主站一致;
0CH:回应数据共 12 字节(16 进制 0C=12);
0064H:A 相电流 100A(16 进制 64 = 十进制 100),后面两组是 B、C 相电流;
00DCH:A 相电压 220V(16 进制 DC = 十进制 220),后面两组是 B、C 相电压;
D6F5H:CRC 校验码;
发送时间:17 字节 ×10 比特 ÷9600bps≈17.7 毫秒。
如果有 31 个相同仪表,主站轮询一遍的总时间≈(8.33+17.7+10)毫秒 ×31≈1.12 秒(10 毫秒是等待从站回应的时间),实际时间会略长,但这个周期在工业场景中完全够用。
这里提醒大家:模拟量(比如电流、电压)需要用 "字"(2 字节)来表达,单个字节只能表达 8 个开关量。比如 1250A 电流,16 进制是 04E2H,必须用 2 字节才能完整表达,这也是电力仪表中模拟量都用字存储的原因。
工控人常问的 10 个关键问题
结合多年培训和项目经验,整理了大家最常问的 10 个问题,逐一解答:
1. 从站有紧急事项,怎么打破 Modbus 轮询规则?
可以用 "令牌" 机制:令牌是一个 1 字节的信号,在总线上循环传递,谁拿到令牌谁就是临时主站,能优先发布信息,没信息就把令牌传给下一个站点,解决紧急通信需求。
2. RS485 链路断路了怎么办?
采用双主站措施:两个 PLC 主站的 RS485 接口用握手线连接,平时主用接口工作,备用接口浮空(高阻态,相当于脱离总线);一旦链路断路,从站确认后立即开通备用接口,从链路两头连接通信。也可以采用环状通信结构,提高可靠性。
3. Modbus 只能用于数据链路层吗?
不是!Modbus 也能工作在网络层,这时协议叫 Modbus-TCP,依然保持主从结构,适用于以太网通信场景。
4. Modbus 协议需要付费吗?
完全免费!它是美国莫迪康公司发明的公开协议,后来莫迪康被施耐德收购,施耐德继续保持其免费公开的属性,还延伸出了 Modbus-TCP 和内部专用的 Modbus-PLUS 协议。
5. RS232 和 RS485 的核心区别是什么?
关键在抗干扰和传输距离:
RS232 没有差分电路,抗干扰弱,传输距离只有十几米;
RS485 有差分电路(共模抑制比高,能消除共模误差),抗干扰强,传输距离可达 1200 米。
6. RS485 距离超 1200 米怎么办?
可以接入光纤!需要一对光纤转换器(一只电转光,一只光转电),中间用光缆连接(光纤是光缆的芯线,不是两种东西):
单模光纤:较细,光反射少、失真小,传输距离 15km 以上;
多模光纤:较粗,光反射多、失真大,传输距离 1.5km 左右。
7. CRC 校验码是干嘛的?
用来检验数据是否出错!CRC 是二进制不借位除法,主站发送帧前先计算 CRC 余数,附在帧尾;从站接收后,对帧(除去 CRC)重新计算,如果余数不一致,就要求主站重发,反之亦然,保证数据传输准确性。
8. Modbus-RTU、ASC、TCP 有啥区别?
核心是数据表达方式和工作层级:
Modbus-RTU:用 BCD 码表达数据,应用最广泛;
Modbus-ASC:用 ASCII 码表达数据;
Modbus-TCP:运行在网络层,适用于以太网。
注意:数据帧中的数值都用 16 进制表达,比如 100A=0X64H,380V=0X17CH。
9. RS485 通信线怎么选?怎么接地?
必须用双绞线(减少分布电容,增强信号),且要根据通信速率选择对应的对绞长度;屏蔽层必须单点接地,不能两头都接(防止地电流干扰),建议各线段独立接地,不要把所有屏蔽层连起来统一接地。
10. 菊花链接线有什么注意事项?
实际工程中没有绝对的菊花链,大多是 "链形网络下的准星形接线"(接线端子并联到各从站),但从端子到从站的双绞线长度不能超过 70cm(行业不成文规范),否则通信会不稳定;终端电阻:速率高于 19.2kbps 必须接,用于吸收反射波和驻波(就像敲击绳子会有反射波,驻波会严重影响通信质量),提升终端从站的电平水平。
最后想说的话
RS485 和 Modbus 这些通信知识,光看书、看文章很难真正掌握,必须结合实际项目操作。我当年也是在 ABB 做了无数次调试,踩了很多坑,才慢慢摸透其中的门道。
希望这篇文章能帮大家少走弯路,把复杂的理论转化为实操能力。如果大家在实际应用中遇到具体问题,或者想了解更多通信协议的实操技巧,欢迎在评论区留言交流,我会一一解答~
祝每一位工控人都能在技术道路上稳步前行,搞定各种通信难题!