ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

S7-200 SMART RS485 Modbus RTU通信实战:从接线到32台变频器轮询

S7-200 SMART RS485 Modbus RTU通信实战:从接线到32台变频器轮询 1. 为什么RS485在S7-200 SMART上依然是主流选择搞工控的都知道PLC和变频器、仪表之间的通信方式五花八门以太网、Profibus、CANopen各有各的适用场景。但只要涉及到多台设备、几十米到上千米的传输距离、现场电磁环境复杂的场合RS485基本是绕不开的选项。S7-200 SMART作为西门子面向小型自动化市场的主力机型本体自带一个RS485口Port 0再配一块SB CM01信号板就能扩展出第二个串口这套组合在实际项目里用得非常多。我接触过的项目里从简单的两三台变频器调速到一条产线上三十二台变频器同步控制S7-200 SMART配合Modbus RTU协议几乎成了标配方案。原因很直接RS485是差分信号传输抗共模干扰能力强双绞线一对就能跑成本低接线简单而且Modbus RTU协议开放、通用几乎所有品牌的变频器、温控器、称重仪表都支持。你不需要买昂贵的专用通信模块也不需要研究各家私有协议只要把Modbus的寄存器地址表拿到手剩下的就是读写操作。但问题也恰恰出在这里。很多人第一次上手RS485通信接线接错了、终端电阻没加、波特率对不上、校验方式搞混、轮询程序写得一塌糊涂最后通信时断时续甚至完全不通查半天查不出原因。这篇内容就是把我自己在S7-200 SMART上做RS485 Modbus通信的完整流程梳理一遍从硬件接线、参数配置、程序编写到调试排查每一步都讲清楚为什么这么做、不这么做会出什么问题。不管你是刚接触PLC通信的新手还是做过一些项目但总在调试环节卡壳的同行应该都能从中找到有用的东西。2. 硬件接线RS485组网的物理层细节2.1 S7-200 SMART的串口引脚定义S7-200 SMART本体上的Port 0是一个9针D-sub母头物理形态跟老式电脑的COM口一样但它输出的是RS485差分信号不是RS232电平。这一点必须先搞清楚因为引脚定义完全不同。RS232用的是±12V左右的高电压单端信号而RS485用的是0到5V之间的差分信号A线和B线之间的电压差决定逻辑状态。S7-200 SMART Port 0的引脚定义如下引脚3是RS485信号B也叫D或TxD/RxD引脚8是RS485信号A也叫D-或TxD-/RxD-引脚5是公共地GND。注意不同厂家对A和B的命名习惯可能反过来有的把A叫正、B叫负有的反过来。西门子的定义是引脚3为B、引脚8为A而很多变频器说明书上标的A和B跟西门子正好相反。这是实际接线时最容易踩的坑之一。注意如果你用万用表量S7-200 SMART的引脚3和8静态时电压差很小不要试图用测量RS232的方式去判断。确认A/B极性最可靠的方法是查双方手册的引脚定义表或者用示波器看通信时的波形。2.2 手拉手总线拓扑与终端电阻RS485组网必须采用手拉手菊花链拓扑也就是从主站出发依次连接到第一个从站、第二个从站一直到最后一个从站。绝对不能采用星型拓扑或者树型分支因为分支会产生信号反射导致通信不稳定。我见过一个现场工程师为了接线方便从主站拉一根线到接线端子排然后从端子排分叉到各台变频器结果通信距离不到五十米就频繁丢包。后来改成手拉手串联同样距离下通信立刻稳定。终端电阻的作用是匹配总线特性阻抗吸收信号到达末端时的反射。RS485总线的特性阻抗通常是120欧姆所以需要在总线的物理两端各接一个120欧姆的终端电阻。中间节点不需要接。很多变频器上自带终端电阻拨码开关拨到ON就是接入120欧姆电阻。如果设备上没有就需要在接线端子处并联一个120欧姆电阻。实际项目中如果通信距离短比如十米以内、波特率低比如9600bps不加终端电阻往往也能凑合工作。但只要距离超过五十米或者波特率到19200以上终端电阻就必须加。我个人的习惯是不管距离长短都加上反正成本极低省得后面出问题再回头查。2.3 屏蔽层与接地处理RS485通信线必须使用双绞线最好是带屏蔽层的双绞线。双绞的作用是让两根线上的干扰信号共模在接收端被差分放大器抵消掉。屏蔽层的作用是阻挡外部电磁干扰。屏蔽层怎么接地有讲究通常建议在总线的一端接地另一端悬空防止两端接地形成地环路电流。但在实际工业现场如果所有设备都通过导轨接地屏蔽层两端接地反而更常见因为地环路电流在工业频率下影响有限而屏蔽效果更重要。我的做法是屏蔽层在PLC侧通过电缆夹连接到柜体接地排在变频器侧如果变频器本身接地良好屏蔽层也接上。如果发现通信有干扰再尝试只在一端接地。线缆走向要尽量远离动力电缆特别是变频器的输出电缆因为变频器输出是PWM波形含有大量高频谐波对通信线干扰极大。如果必须交叉尽量垂直交叉不要平行走线。2.4 一个典型的32台变频器组网接线方案假设你要用一台S7-200 SMART控制32台变频器全部通过RS485 Modbus RTU通信。接线方案是这样的PLC的Port 0引脚3接第一台变频器的B或D引脚8接第一台变频器的A或D-引脚5接变频器的通信地如果有的话。然后从第一台变频器的通信端子再手拉手接到第二台依次类推直到第三十二台。最后一台变频器的通信端子上并联一个120欧姆终端电阻PLC这一端也并联一个120欧姆终端电阻。这里有一个实际问题32台变频器的通信口通常都是接线端子形式每个端子只能插一根线怎么实现手拉手通常的做法是用双线并压的方式也就是一个端子孔里压两根同规格的线一根来自上一台一根去下一台。如果端子太小的可以外接一个接线端子排做转接但转接排到各台变频器的线仍然要保持手拉手关系不能从转接排星型发散。3. Modbus RTU参数配置与地址映射3.1 波特率、数据位、校验位、停止位怎么选Modbus RTU通信的串口参数必须主从双方完全一致否则一个字节都收不到。S7-200 SMART的Port 0支持多种波特率从4800到115200都有。变频器端通常也支持多种波特率。选择哪个波特率主要考虑通信距离和实时性要求。波特率和最大通信距离的关系大致是9600bps可以跑1200米19200bps可以跑1200米但余量小一些38400bps建议不超过800米115200bps建议不超过200米。实际项目中如果变频器数量多、轮询周期要求短波特率就要高一些。但波特率越高对线缆质量和终端电阻的要求也越高。数据位通常固定为8位。校验位有None、Even、Odd三种选择。停止位有1位和2位。最常见的组合是8位数据、无校验、1位停止位简称8N1。也有用8E1的即偶校验。我一般优先选8E1因为偶校验能检测出单比特错误提高通信可靠性。但如果变频器只支持8N1那就只能跟着变频器走。提示有些变频器手册上写的通信格式是“9600, 8, N, 1”有的写“9600, 8, 1, N”顺序可能不同一定要看清楚每个字段的含义不要想当然。3.2 Modbus寄存器地址与PLC数据区的对应关系Modbus协议定义了几种数据类型线圈Coil可读写1位、离散输入Discrete Input只读1位、保持寄存器Holding Register可读写16位、输入寄存器Input Register只读16位。变频器控制中最常用的是保持寄存器用来读写频率设定值、运行命令、状态字、实际频率、电流、电压等。Modbus的寄存器地址通常用5位或6位表示比如40001、40100、400001等。这里的4表示保持寄存器后面的数字是偏移量。在S7-200 SMART的Modbus库指令中需要把Modbus地址映射到PLC的V存储区地址。比如你要读变频器的实际频率变频器手册上写的是“输出频率40071”那么Modbus地址就是40071对应到Modbus功能码03读保持寄存器起始地址是71减1等于70因为Modbus协议中地址从0开始而文档中从1开始。S7-200 SMART的Modbus主站指令MBUS_MSG有一个参数叫Addr填的就是这个从0开始的Modbus地址。比如读40071Addr填40070。这个地址计算是新手最容易搞错的地方一定要仔细核对。3.3 从站地址分配与轮询策略每台变频器在Modbus网络上必须有一个唯一的从站地址范围通常是1到247。地址0是广播地址所有从站都能收到但不回应。地址248到255保留。实际分配时我习惯按设备编号顺序分配比如1号变频器地址12号变频器地址2以此类推。这样在程序里用循环处理时地址就是循环变量加1非常方便。轮询策略是指主站依次向各从站发送请求等待回应后再发下一个。S7-200 SMART的Modbus主站库支持同时激活多个MBUS_MSG指令但同一时间只能有一个指令在发送请求。所以轮询程序的核心逻辑是用一个小状态机或者步进计数器依次触发每个从站的读写请求每个请求完成后计数器加1指向下一个从站。对于32台变频器如果每台需要读两个寄存器比如状态字和实际频率每台需要两次请求总共64次请求。如果波特率是19200每次请求加回应大约需要20到30毫秒64次就是1.3到2秒。也就是说整个轮询周期大约1.5到2秒。对于大多数风机水泵类负载这个刷新速度完全够用。但如果要求更快的响应就需要提高波特率或者减少每次请求的寄存器数量。4. S7-200 SMART Modbus主站程序编写4.1 调用Modbus主站库指令S7-200 SMART的Modbus RTU主站通信是通过MBUS_CTRL和MBUS_MSG两个指令实现的。MBUS_CTRL用于初始化通信端口设置波特率、校验方式、超时时间等。MBUS_MSG用于发送具体的读写请求。MBUS_CTRL指令的Mode参数设为1表示启用Modbus协议设为0表示PPI协议。Baud参数填波特率比如9600、19200。Parity参数填校验方式0为无校验1为奇校验2为偶校验。Timeout参数填超时时间单位毫秒一般设1000毫秒。Done和Error是输出参数用于判断初始化是否完成和是否有错误。MBUS_MSG指令的Slave参数填从站地址RW参数填0表示读、1表示写Addr填Modbus起始地址Count填读写的数据个数DataPtr填PLC中数据缓冲区的起始地址。Done和Error同样是输出参数。4.2 轮询状态机的实现轮询程序的核心是一个步进计数器从1到32循环。每一步触发对应从站的一个MBUS_MSG请求。请求完成后Done位变为1计数器加1进入下一步。如果Error位变为1说明通信出错可以选择跳过该从站或者重试。具体实现时可以用一个整数变量Step范围1到64假设每台变频器需要两次请求。在梯形图中用比较指令判断Step的值分别触发不同的MBUS_MSG。每个MBUS_MSG的Done位通过上升沿检测触发Step加1。当Step超过64时重置为1。这里有一个细节MBUS_MSG指令不能同时激活多个。所以必须确保前一个请求的Done或Error变为1之后再触发下一个请求。如果前一个请求还没完成就触发下一个会导致指令冲突通信失败。4.3 数据缓冲区的规划对于32台变频器每台需要读状态字、实际频率、输出电流、输出电压等参数每台可能需要读4到8个寄存器。如果每台读8个寄存器32台就是256个寄存器对应512个字节的V存储区。再加上写频率设定值和运行命令还需要额外的缓冲区。我的习惯是给每台变频器分配一个固定大小的数据块比如每台16个字节8个寄存器32台就是512个字节。在V存储区中从VB1000开始1号变频器占VB1000到VB10152号占VB1016到VB1031以此类推。这样在程序里计算地址时用公式起始地址 1000 (从站号 - 1) * 16。这个公式在间接寻址时非常有用。4.4 读写请求的分离处理读请求和写请求要分开处理。读请求是周期性的每轮都要执行。写请求是事件驱动的比如操作员按下启动按钮才需要写一次运行命令。如果把写请求也放在轮询循环里会导致通信负担加重而且写操作频繁执行也没有必要。我的做法是轮询循环只处理读请求写请求单独用一个标志位触发。当需要写数据时设置一个写请求标志在主循环中检测到这个标志后暂停读轮询执行写请求写完成后再恢复读轮询。这样可以保证写操作的实时性同时不影响正常的读轮询。5. 调试工具与实操排查方法5.1 用Modbus Poll和Modbus Slave做模拟调试在PLC程序写完之后不要急着连变频器调试。先用电脑上的Modbus调试软件做模拟测试。Modbus Poll可以模拟主站Modbus Slave可以模拟从站。你可以用Modbus Poll通过一个USB转RS485转换器连接到PLC的Port 0模拟主站向PLC发送请求测试PLC的Modbus从站功能。反过来也可以用Modbus Slave模拟从站测试PLC的主站程序。这种模拟调试的好处是你可以完全控制通信的每一个字节观察PLC的响应是否正确。如果模拟调试都通不过那连变频器肯定也通不过。模拟调试通过之后再连变频器问题范围就缩小到变频器参数设置和接线上了。5.2 常见通信故障排查表故障现象可能原因排查方法完全无响应A/B线接反交换A/B线再试完全无响应波特率不一致核对双方波特率设置完全无响应从站地址错误核对变频器地址设置偶尔丢包终端电阻未加在总线两端加120欧姆电阻偶尔丢包屏蔽层未接或接地不当检查屏蔽层接地偶尔丢包线缆质量差或走线不合理更换双绞屏蔽线远离动力线通信一段时间后断开超时时间设置过短增大MBUS_CTRL的Timeout值读写数据错误寄存器地址计算错误核对Modbus地址偏移量读写数据错误数据类型不匹配确认是16位还是32位数据5.3 用示波器看RS485波形如果以上方法都查不出问题就需要用示波器看RS485的差分波形了。把示波器的两个探头分别接A线和B线地线接通信地。正常的RS485波形应该是清晰的差分方波高电平和低电平之间的电压差在1.5V以上。如果波形幅度很小说明驱动器能力不足或者线缆太长。如果波形上有明显的振铃或过冲说明终端电阻不匹配或者有反射。如果波形上有高频噪声说明屏蔽或走线有问题。我遇到过一个问题通信距离只有三十米但通信时断时续。用示波器一看波形上有周期性的尖峰干扰频率跟旁边一台变频器的载波频率一致。后来把通信线从动力线槽里拿出来单独走线问题立刻解决。这种问题用软件调试是查不出来的必须看物理层的波形。6. 多台变频器轮询的优化与避坑经验6.1 轮询周期与实时性的平衡32台变频器的轮询周期直接决定了系统的响应速度。如果每台变频器需要读4个寄存器波特率19200每次请求加回应大约25毫秒32台就是800毫秒。如果每台需要读8个寄存器每次请求加回应大约35毫秒32台就是1.1秒。这个周期对于大多数应用是够的但如果你需要做闭环控制比如根据实际频率调整输出1秒的延迟可能就太大了。优化的方法有几种一是提高波特率到38400或57600但要注意通信距离和线缆质量二是减少每次请求的寄存器数量只读必要的参数三是把32台分成两组用两个串口分别轮询S7-200 SMART加一块SB CM01信号板就有两个串口了。我一般推荐第一种和第二种结合先优化寄存器数量再考虑提高波特率。6.2 通信中断后的自动恢复工业现场难免有干扰导致通信中断。如果程序里没有自动恢复机制一旦某个从站通信失败整个轮询循环就可能卡死。我的做法是每个MBUS_MSG指令的Error位如果为1不等待Done位直接跳到下一个从站。同时记录该从站的错误次数如果连续错误超过3次就跳过该从站并在HMI上报警。这样即使某台变频器出问题也不会影响其他变频器的通信。另外MBUS_CTRL指令的Done位如果变为0说明通信端口初始化失败需要重新初始化。可以在主程序中检测这个位如果为0就重新触发MBUS_CTRL。6.3 写频率设定值的注意事项写频率设定值时要注意变频器的频率分辨率。很多变频器设定频率的单位是0.01Hz比如要设50Hz需要写5000。如果写50变频器会认为是0.5Hz。这个换算关系一定要看变频器手册。另外写频率之前要先确认变频器处于远程控制模式否则写了也不起作用。还有一个坑有些变频器的通信写入值需要使能一个“通信写入允许”参数默认是禁止的。如果不改这个参数通信读正常但写不进去。这个参数在手册里通常叫“命令源”或“频率源”要设为通信控制。6.4 接地与防雷的实战经验RS485总线在室外或者跨车间走线时容易受到雷击或感应雷的影响。我建议在总线两端加装RS485防雷器特别是通信线出柜的场合。防雷器要可靠接地接地电阻小于4欧姆。如果现场没有条件做地网至少要把防雷器的接地端接到柜体的接地排上。另外通信线的屏蔽层在进入柜体后要用电缆夹固定在柜体接地排上剥开屏蔽层的位置尽量靠近接线端子裸露的屏蔽线越短越好减少天线效应。7. 从单台调试到整线联调的完整流程7.1 先通一台再通全部调试的时候千万不要一上来就把32台变频器全部接上。正确的做法是先接一台变频器把通信调通确认读写都正常。然后再接第二台调通。再接第三台。这样逐步增加每增加一台都确认通信正常。如果一次全接上出了问题你根本不知道是哪台的问题排查起来非常痛苦。我一般会先接一台用Modbus Poll模拟主站确认变频器参数设置正确、接线正确。然后用PLC做主站确认PLC程序正确。两台都确认之后再接第三台测试轮询程序。三台通了基本就说明程序框架没问题后面就是批量复制的工作。7.2 参数备份与批量修改32台变频器的参数设置如果一台一台手动改工作量巨大而且容易出错。很多变频器支持参数拷贝功能可以把一台调好的参数拷贝到其他变频器。如果变频器不支持拷贝可以用通信的方式批量写参数。但前提是通信已经调通而且你知道每个参数的Modbus地址。我的做法是先手动调好一台变频器记录所有需要修改的参数和对应的Modbus地址。然后写一个临时的PLC程序通过通信把参数批量写到其他变频器。这样效率高而且不会漏改。7.3 联调时的干扰排查整线联调时如果发现通信不稳定首先要怀疑的就是干扰。排查步骤是先断开所有变频器的输出负载电机线只保留通信线和控制电源看通信是否稳定。如果稳定说明干扰来自变频器输出。然后逐台启动变频器观察通信质量变化。如果某台变频器启动后通信变差重点检查该变频器的输出线是否与通信线平行走线或者该变频器的接地是否良好。另一个常见问题是变频器的载波频率设置过高。载波频率越高输出PWM的谐波越丰富对通信的干扰越大。如果通信不稳定可以尝试降低变频器的载波频率比如从8kHz降到4kHz或2kHz。当然这会影响电机噪音需要权衡。7.4 最终验收的检查清单联调完成后做一次完整的验收检查所有32台变频器的通信地址是否正确且唯一波特率和校验方式是否全部一致终端电阻是否在总线两端正确接入屏蔽层是否可靠接地轮询周期是否满足工艺要求通信中断后是否能自动恢复HMI上的数据显示是否与实际一致写频率和启停命令是否响应正确。把这些都确认一遍基本就可以交付了。8. 写在最后的一点个人体会做RS485通信调试这些年我最大的感受是软件问题好查硬件问题难查。程序写错了仿真一下或者看代码就能发现。但接线接错了、终端电阻没加、屏蔽层没接好这些问题在软件层面看不出来只能靠万用表、示波器和经验去排查。所以每次做新项目我都会在硬件接线上花足够的时间确认每一根线都接对了、每一个终端电阻都加了、每一处屏蔽都接地了然后再去调程序。这样看起来前期慢实际上后期省了大量的排查时间。另外Modbus地址的计算和变频器参数的设置是两个最容易出错的环节。我的习惯是拿一张纸把每台变频器的地址、每个参数的Modbus地址、对应的PLC数据区地址全部列出来一个一个核对。这个笨办法看起来费事但比在程序里瞎试要快得多。
返回列表