污水处理厂PLC读不到第8台仪表的数据,一根屏蔽线折腾了我三天——Modbus RTU多站轮询的那些坑

今年三月份接了个污水处理厂的改造项目,说实话我一开始觉得挺简单的——就是PLC通过RS485轮询读取现场十几台仪表的数据,温度、PH值、液位、流量,再根据数据控制加药泵和阀门。Modbus RTU嘛,搞工控的谁不会?结果这活儿差点把我整不会了。

PLC是西门子S7-1200,挂了个CB1241 RS485通讯模块。现场仪表11台,分布在厂区三个不同的区域,最远的离PLC柜有将近300米。按道理说RS485传个1200米都没问题,但这300米让我折腾了整整三天。

PLC Modbus RTU RS485通讯调试

第一天:前7台仪表都正常,第8台开始出幺蛾子

接线、设参数、写程序,前半天一切顺利。我先把最近的4台仪表接上,用Modbus Slave调试工具一个一个轮询,数据都读回来了。PLC程序写的是用循环轮询,每台仪表给300ms的超时,11台轮完一圈大概3.3秒,对于污水处理来说这个速度完全够了。

然后我把剩下的仪表一台一台接上去。第5台、第6台、第7台都没问题。接第8台的时候,奇怪的事情来了——有时能读到数据,有时读不到。而且不是完全读不到,是读个两三遍就超时一次,然后又好了。间歇性抽风,最让人头疼的那种。

我一开始怀疑第8台仪表本身有问题。拆下来拿到PLC柜旁边单独测——一切正常,通讯稳稳的。装回去又不行了。这就排除了仪表本身的故障。

第二天:用示波器看波形才发现问题

我带了示波器去现场。把探头夹在RS485的A线和B线之间看波形,这才发现问题在哪。

第8台仪表位置在一个提升泵房旁边,那个房间有3台37kW的污水提升泵。虽然仪表装在仪表箱里,但RS485线走的桥架跟动力电缆桥架叠在一起走了大概15米。示波器上一看,通讯波形上全是毛刺,信号幅度从标准的5V降到了2V左右,而且上升沿和下降沿都变圆了。

后来问了厂里的电工才知道,那个泵房的3台泵是用变频器驱动的,变频器的谐波干扰通过动力电缆辐射出来,耦合到了RS485通讯线上。而且这15米叠在一起的桥架,简直就是个完美的干扰耦合通道。

解决方案:

  • 把RS485线从动力桥架里抽出来,单独走线,实在绕不开的地方用金属穿线管屏蔽
  • RS485通讯线换成双绞屏蔽电缆(之前用的就是普通4芯线,也是坑),屏蔽层在PLC柜单端接地
  • 在第8台仪表端加了120Ω终端电阻(之前只在PLC端加了一个)

RS485通讯屏蔽接地施工

改完之后波形好了很多,第8台能读到了。但是!!!第10台又出问题了。

第二天晚:第10台,接地环路把我坑哭了

第10台仪表在厂区最远端,距离PLC柜大概250米。它的通讯倒不是完全中断,而是偶尔把别的仪表的数据读乱了。比如轮询到第5台PH计时,读回来的数据却是第10台流量计的数。明显是RS485总线上的数据帧冲突了。

我一开始以为是程序问题,把PLC的轮询逻辑检查了三遍——没问题啊,轮询顺序是严格的时间片分配,一台回完才叫下一台的。那问题一定在物理层。

用万用表量了一下PLC柜的接地端和第10台仪表端的接地——发现两点之间有0.8V的电位差。注意这不是220V的电压差,而是地电位差。

问题出在哪?仪表是装在金属管道上的,管道本身接地了,PLC柜那边也有独立的接地。两个接地点之间存在电位差,这个电位差通过RS485线的屏蔽层(我在两端都接了地)形成了一个地环路。地环路电流在屏蔽层上产生压降,再感应在信号线上,就把正常的通讯波形给搞乱了。

解决方案:屏蔽层单端接地。把第10台仪表那边的屏蔽层不接地(包好绝缘胶带),只保留PLC柜那一端接地。同时在第10台仪表端也加了一个偏置电阻(把A线拉到5V,B线拉到0V),确保总线空闲时电平是确定的。

搞完之后再测,波形干净了,数据也再没乱过。

第三天:终端电阻和偏置电阻到底怎么算

这个问题其实第二天解决了干扰问题之后就差不多了,但我发现一个有意思的事情——大多数兄弟对RS485的终端电阻和偏置电阻的理解都有误区,包括我自己之前也是半懂不懂。

终端电阻的误区:不是每个设备都加的。终端电阻加在总线的最远两端,作用是匹配特性阻抗,消除信号反射。中间节点不需要加。如果你的通讯距离短(几十米内)、波特率低(9600bps以下),不加终端电阻也能工作。但距离一长、波特率一高,不加就是各种间歇性故障。

偏置电阻的误区:很多人把终端电阻和偏置电阻混为一谈。偏置电阻的作用是当总线上没有设备发送数据时(空闲状态),把A-B之间的电压拉到正电平(≥200mV),防止空闲时的杂波被当成有效数据。一般加在主机端,计算方法是让A-B之间的差分电压在200mV以上。

这个污水处理厂的项目,最终终端电阻加在了PLC柜(主机端)和最远端的仪表(约250米外),120Ω,跟通讯电缆的特性阻抗匹配。偏置电阻加在PLC柜的主机端,R上拉到5V、R下拉到0V,算下来用了两个1kΩ的电阻。

一顿操作下来,11台仪表,轮询一圈3.3秒,连续跑了48小时零丢包。

总结一下RS485多站轮询的几个血泪教训

1. 布线是头等大事。RS485线单独走桥架,跟动力电缆保持至少20cm距离。实在绕不开的,用金属穿线管+双绞屏蔽电缆。别图省事省那几块钱电缆钱,后面调试省十倍的时间都不止。

2. 屏蔽层单端接地。两端接地必出地环路,几乎是个定律。只在主机端接地就对了。

3. 终端电阻加两端。距离超过100米或者波特率9600以上,一定要加。只加一端还不如不加。

4. 偏置电阻加主机端。如果总线空闲时数据老是乱跳,就是缺偏置。算好阻值加上去。

5. 波特率不是越高越好。很多兄弟喜欢设成115200甚至更高,觉得速度快。但在工业现场,距离一长、干扰一大,高波特率反而更容易出错。能用9600就用9600,污水处理这种几秒一个数据的需求,完全够用。

6. 隔离别省钱。如果现场环境恶劣(变频器多、大电机多),花几百块钱在PLC侧加个RS485隔离模块,能省掉你80%的通讯故障排查时间。别问我怎么知道的。

写在最后

说实话,RS485通讯这种”老古董”技术,现在很多搞工控的年轻人已经不太当回事了——什么以太网、Profinet、EtherCAT不香吗?但在咱们实际项目里,各种仪表、传感器、变频器,十个里有六个还是RS485接口。老归老,用对了路子一样稳定可靠。

上面说的那几个坑——屏蔽层接地、终端电阻、地环路——你们在项目里遇到过吗?有没有比我更离谱的RS485翻车经历?来评论区聊聊,一起涨涨经验。

上一篇 AI帮工厂找出3台'电老虎',一个月省了2万多电费——我用机器学习给36台注塑机做能效诊断的真实记录
下一篇 低空经济火了,我接了个无人机自动机场的PLC项目——搞工控的兄弟们又多了一条路