自动化项目里,“一台PLC带多台变频器”绝对是最常见的需求之一。早些年大家习惯用模拟量端子控制,线多、调试麻烦、现场抗干扰还差;现在基本都走现场总线了。这个项目是用台达DVP-24ES系列的PLC,通过Modbus RTU协议,在RS-485总线上挂两台施耐德ATV310变频器,实现两台风机的独立启停、联动调速和运行状态监视。我一路从接线、参数设置、寄存器映射到PLC程序调试走下来,踩了不少坑,也总结出一套稳妥的做法。这篇就是把整个通讯示例掰开揉碎讲清楚,给准备做一拖二、一拖多变频通讯的同行一份可以直接参考的实操笔记。
1. 项目全貌:为什么是台达24ES配两台ATV310
1.1 从控制需求拆解硬件选型逻辑
先把这个项目的控制需求说清楚。现场是两台风机,工艺上要求两套设备可以各自启停,转速可以分别给定,同时中控室还要实时看到每台风机的运行状态和当前频率。控制点在电控柜里,距离风机本体大概有几十米,这个距离其实已经很尴尬了。
如果走传统方案,一台变频器要占用PLC的两路模拟量输出(一路给启停/方向,一路给频率),还要再加一路模拟量输入读反馈。两台变频器就是六路模拟量,24ES的模拟量扩展模块要加好几个,而且模拟量信号长距离传输容易衰减、容易被变频器输出侧干扰。算下来硬件成本不低,调试工时也不少,后期维护还麻烦。
所以决定改用通讯方案。RS-485总线加Modbus RTU协议,一根屏蔽双绞线就可以把所有变频器串起来,不需要额外模拟量模块。PLC侧只需要一个RS-485通讯口,变频器侧用自带的Modbus接口,硬件成本几乎为零,多一台设备只是多一段线的事情。
选台达DVP-24ES的理由很简单:点数够用(14点输入、10点输出),自带两个通讯口(COM1为RS-232、COM2为RS-485),支持Modbus RTU主站功能,编程软件上手也快。对于这种纯逻辑加通讯的控制场景,性能完全冗余,性价比很合适。
两台施耐德ATV310变频器则是因为现场原有设备就是它,而且ATV310本身支持Modbus RTU,参数表里通讯功能配置得比较清楚,面板调试也方便。一拖二是Modbus通讯最典型的起步场景,弄清楚这个规模,后面扩展到五台、八台只是站号和轮询逻辑的复制而已。
1.2 Modbus RTU通讯机制,用“班长点名”来理解
很多刚接触通讯的朋友看到“Modbus RTU”几个字就发怵,其实原理没有想象中复杂。Modbus RTU是一个主从协议,整个总线上一台主机(这台项目里就是台达PLC),其他都是从机(两台ATV310)。
工作方式可以理解成班长点名。班长(PLC)挨个问“一号士兵,你跑多快了?”,一号士兵回答一个数据;班长接着问“二号士兵,你跑多快了?”,二号士兵再回答。所有从机都在总线上听着,但是广播帧里带有站号,不是你的事情你不要应答。主机发一帧,对应从机回一帧,一问一答,循环往复。
每个通讯帧的结构也很固定:
- 从站地址(1字节):标明这帧是发给谁的
- 功能码(1字节):告诉从机要干什么
- 数据区(若干字节):具体要读写的寄存器地址和数据
- CRC校验(2字节):检查这帧数据有没有传错
举例来说,PLC要读1号变频器的运行状态,发送的帧就是“01 03 21 37 00 01 某某某”(01是站号,03是读保持寄存器功能码,2137是寄存器地址)。变频器收到后会返回“01 03 02 数据 高字节 低字节 CRC”,PLC收到后解析数据区即可。
为什么选RTU而不是ASCII?RTU数据密度高,同样的波特率下能传更多数据,通讯周期更短。对于控制类用途,轮询周期越短,系统响应就越快。虽然CRC校验的计算比ASCII的LRC要麻烦一点,但PLC里加一个CRC子程序就能解决,后面我会详细写。
2. 硬件接线与通讯参数:先把物理层的坑填平
2.1 台达24ES的RS-485接口与接线要点
台达DVP-24ES的COM2口就是RS-485,一般在PLC端子排右上角标着D+、D-、SG三个接线点。D+接通讯线正极,D-接负极,SG是信号参考地。注意DVP系列的D+/D-标识在不同批次上位置可能略有差异,接线前先看一眼外壳丝印,不要想当然。
RS-485的接线拓扑要求是“手拉手”,也就是菊花链。PLC作为主机,第一台变频器接在总线上,再从这台变频器的通讯端口向下引出到第二台变频器,而不是PLC引出两根线分别接到两台变频器上。星形接法容易造成信号反射,距离远了通讯就会莫名丢包甚至完全中断。
通讯线我建议直接用屏蔽双绞线,型号比如RVSP 2×0.5或者2×0.75。两根芯线分别接D+和D-,屏蔽层单端接地。单端接地的意思是屏蔽层只选一个点接大地,一般接在PLC柜体的接地排上,变频器侧屏蔽层悬空不接。如果两端都接地,就会形成地环路,干扰反而会更大。
终端电阻也是个容易忽略的点。RS-485总线的特点是两端需要各并联一个120欧姆的终端电阻,用来匹配线路阻抗、减少信号反射。短距离(几十米以内)不接也能跑,但既然做了正规项目,我建议在总线的首端和末端各接一个。也就是PLC侧D+和D-之间并联一个120欧姆电阻,最后一台变频器的D+和D-之间也并联一个。很多变频器通讯扩展口旁边本来就预留了终端电阻跳线或端子,直接插上跳线帽就行。
SG信号地比较特殊。有些485网络不接SG也能工作,但在变频器这种强干扰环境下,我建议把SG和变频器的0V参考地连起来,这样总线电平有共同的参考点,抗共模干扰能力会好很多。前提是现场接地系统可靠,如果地线质量很差,SG不接反而更稳,这个要现场实测。
2.2 ATV310变频器侧Modbus设置与站号规划
施耐德ATV310的面板操作逻辑并不复杂,默认状态下按“导航”键进入菜单,在“通讯”相关子菜单里能找到Modbus配置项。需要设置的参数主要有三块:本机地址、波特率和通讯帧格式。
两台变频器的站号我分别设为1和2,这个站号在Modbus总线上必须是唯一的。站号设置不当是最早期的低级错误,两台都设成1,PLC点名一号时两台都应答,总线立刻冲突,什么数据都读不回来。
波特率和帧格式必须和PLC侧保持一致。常用组合是19200bps、8数据位、偶校验(E)、1停止位,也就是“19200 8E1”。如果现场干扰严重,可以把波特率降到9600,牺牲一点速度换稳定性。注意RTU模式的数据位是固定8位,所以必须选8数据位,不能选7位。
除了通讯参数本身,ATV310还要设置“控制模式”和“给定模式”,否则就算Modbus通讯通了,变频器也不认你发的启停命令和频率。这个通常叫“组合模式”或者“命令通道”配置。要做的就是把命令通道设为“Modbus通讯”(或“隔离链路”),把频率给定通道也设为“Modbus通讯”。设置完这两个项,面板上的本地启停按钮就不再直接控制电机了,控制权交给了总线。
这里有个操作陷阱:ATV310的参数修改是有优先级的,有些参数在电机运行状态下不允许修改,必须先按停机。而且修改通讯类参数后,很多情况下需要断电重启才生效。我习惯的做法是先把参数面板上能看的都看完、记下原值,改完关键参数后断电再上电,重新进面板确认一遍设置值已经生效,再进行下一步通讯测试。
2.3 三台设备参数一致性检查清单
通讯调不通的时候,十有七八是参数不一致。我整理了一张表格,上电调试前过一遍比什么都强:
| 检查项 | PLC侧(台达24ES) | 变频器1号(ATV310) | 变频器2号(ATV310) |
|---|---|---|---|
| 协议模式 | Modbus RTU | Modbus RTU | Modbus RTU |
| 从站地址 | 主机(无地址或忽略) | 1 | 2 |
| 波特率 | 19200 | 19200 | 19200 |
| 数据位 | 8 | 8 | 8 |
| 校验位 | 偶校验(E) | 偶校验(E) | 偶校验(E) |
| 停止位 | 1 | 1 | 1 |
| 命令通道 | 不涉及 | 通讯控制 | 通讯控制 |
| 频率给定通道 | 不涉及 | 通讯给定 | 通讯给定 |
台达DVP-24ES的COM2通讯格式需要通过特殊寄存器D1120来设定。不同波特率和校验组合对应的数值不一样,编程软件或者手册里有一张对照表。举个例子,如果D1120的设定值对应“RTU模式、19200、8E1”,程序里直接执行MOV H87,D1120这种写法。具体数值以你手上手册的表格为准,不要凭记忆硬套,因为DVP老款和ES2系列的定义略有出入。
参数确认一致后,再用PLC的在线监控或者电脑上的串口调试助手发一帧“01 03 2137 0001 计算CRC”,如果能收到变频器的正常应答,物理层和参数层就通了,可以开始写正式程序。
3. 寄存器映射与控制逻辑:搞清读写什么数据
3.1 看懂ATV310的Modbus寄存器表
Modbus协议本身不关心你读的是什么数据,它只负责把你指定的寄存器地址里的内容传过去。真正要下功夫的是搞清楚ATV310的寄存器表,也就是“哪个地址对应什么含义”。
ATV310的寄存器映射在随机附带的手册里有一张专门的表格,不同固件版本可能会有细微差异,上电前务必对照现场机器核对。常见的几类寄存器如下:
| 含义 | 读写方向 | 寄存器地址(十六进制) | 数据说明 |
|---|---|---|---|
| 控制字(CMD) | 写 | 0x2135 | 0停止、2正转启动、3反转启动、4快速停止 |
| 频率给定(LFRD) | 写 | 0x2136 | 0~10000对应0~最大频率 |
| 状态字(ETA) | 读 | 0x2135 | bit0运行、bit2反转、bit7故障 |
| 输出频率(RFRD) | 读 | 0x2136 | 0~10000对应0~最大频率 |
乍看可能会觉得奇怪,控制字和状态字用的是同一个地址,频率给定和输出频率也是同一个地址。这是施耐德变频器常见的设计思路,同一个寄存器读的时候是反馈值,写的时候是给定值,功能码(读用03、写用06/10)决定了实际方向。理解了这一点,后面的程序就顺了。
需要注意寄存器编号的两种表达方式。手册上经常看到的是“十进制的寄存器编号”或“十六进制的地址”,比如0x2137这个地址,如果换算成Modbus协议里常见的“4xxxx”编号体系,它就是“4”开头的一个数值。很多人在这个转换上栽过跟头,在PLC里填地址时直接填了手册上表格的编号,结果差了偏移量,怎么读都是“非法地址”响应。最稳妥的办法是直接用十六进制地址,核对好手册中线缆标注的是“Modbus地址”还是“参数编号”。
3.2 控制字的位定义与频率给定标定
控制字这个寄存器是整个通讯控制的核心。ATV310的控制字是按位定义的,想要启动就写入2,想要反转就写入3,想要急停就写入4。这些并不是随便定的,施耐德变频器沿用了系列一贯的寄存器控制字约定,所以如果你以前用过ATV12、ATV312,会发现地址和值差不多。
在PLC程序里,设置两组状态位比较方便。比如M0对应启动请求,M1对应反转请求,通过组合逻辑把M0/M1的值映射成控制字的写入值:
- 停止:控制字=0
- 正转启动:控制字=2
- 反转启动:控制字=3
- 快速停止:控制字=4
梯形图里就是基本的触点串联并联,输出到D寄存器,然后触发Modbus写指令。注意写入控制字的值是瞬时性的还是保持性的,取决于变频器的配置。有的设置下,只要通讯正常且控制字保持为2,变频器就一直运行;有的则把“启动”当上升沿命令,执行一次即可。这两种模式在掉线恢复处理上差别很大,建议在调试时记录一下实际行为。如果设置为“控制字保持有效”,那么PLC每次轮询写频率的时候,也要顺带把控制字重新写一遍,防止变频器因一帧丢失而停机。
再说频率给定。ATV310内部把频率归一化到了10000这个刻度,写入5000就代表50%的给定值。如果最大频率参数HSP设的是50Hz,那5000对应的就是25Hz;如果HSP设的是60Hz,那5000对应的就是30Hz。计算公式很简单:
写入值 = (目标频率 / 最大频率)× 10000
举例,最大频率50Hz,想给到37Hz,写入值就是37÷50×10000=7400。这个数据要先放进寄存器,再通过Modbus写指令送出去。
读回来的输出频率也是同样规则,程序里显示时反算一下:实际频率 = 读回值÷10000×最大频率。如果需要精确到0.1Hz,直接把比例换算做成浮点数运算,或者扩大倍数后用整数运算处理,精度完全够用。
4. 台达24ES的通讯程序编写实战
4.1 方案一:用MODRW指令实现,省心高效
台达DVP系列PLC自带Modbus读写指令MODRW,这个指令封装了帧组装、发送、接收、CRC校验的全部细节,程序里只需要指定端口、站号、功能码、寄存器地址和数据地址即可。虽然指令格式在不同型号的PLC上略有区别,但思路是通用的。
MODRW指令的基本逻辑是:功能码为0x03时读保持寄存器,功能码为0x06时写单个寄存器,功能码为0x10时写多个寄存器。举个例子,读1号变频器状态字和输出频率,可以这样组织:
MODRW K2 K1 H03 H2135 D100 K2解释一下:K2表示使用COM2口,K1是从站号1,H03是读功能码,H2135是要读的起始寄存器地址,D100是读回数据存放的首地址,K2表示连续读2个寄存器。执行结果就是D100里存1号机状态字,D101里存1号机输出频率。
写控制字和频率给它则是:
MODRW K2 K1 H10 H2135 D110 K2功能码0x10表示写多个寄存器,D110里存控制字,D111里存频率给定。执行一次,两个数据一次性写过去,比单独写两次效率高,也能减少控制字和频率不同步的概率。
MODRW指令需要注意它是脉冲执行还是电平执行。我习惯用脉冲执行,一个扫描周期触发一次,防止每一扫描周期都往总线上丢一帧,把总线挤爆。触发条件的写法跟普通指令一样,用上升沿触点驱动。
4.2 方案二:用RS指令手写Modbus帧,灵活通用
MODRW虽然方便,但如果你想深入理解协议、将来移植到其他PLC,或者处理官方指令不支持的寄存器段,手写RS指令是绕不开的。RS指令是串口收发指令,它不管内容是什么,只负责把发送缓冲区的数据从通讯口发出去,再把接收缓冲区收进来的数据放到指定寄存器。帧内容全部由程序自己组,包括CRC16校验也要自己算。
一条完整的读状态帧(读站号1、地址0x2135、2个寄存器)内容为:
01 03 21 35 00 02 CRC_L CRC_H其中01是站号,03是功能码,2135是寄存器地址,0002是寄存器数量,CRC_L和CRC_H是CRC16校验值的低字节和高字节。
在台达PLC里用RS指令,先要把待发送的字节按顺序填到D120开始的寄存器中,然后用RS指令指定发送区和接收区。发送区里每个寄存器存两个字节,高字节和低字节要注意摆正位置。
CRC16的计算是手写帧的核心。Modbus RTU用的CRC16多项式是0xA001,初始值为0xFFFF。计算流程:把每个字节和当前CRC做异或,然后右移8次,如果移出的位是1就再异或0xA001。计算完成后的CRC,先发低字节再发高字节。
CRC子程序在PLC里一般用循环移位实现,伪代码可以写成:
FUNCTION_BLOCK CRC16 VAR_INPUT DataStart : POINT TO BYTE; Length : INT; END_VAR VAR CRC : WORD := 16#FFFF; i : INT; j : INT; Temp : BYTE; END_VAR FOR i := 0 TO Length - 1 DO CRC := CRC XOR WORD(DataStart[i]); FOR j := 0 TO 7 DO IF (CRC AND 16#0001) = 16#0001 THEN CRC := SHR(CRC, 1) XOR 16#A001; ELSE CRC := SHR(CRC, 1); END_IF; END_FOR; END_FOR;梯形图实现会比ST繁琐一些,需要借助几个中间寄存器和循环计数器,但是逻辑完全一样。写完CRC子程序后用串口调试助手校验一帧,确保算出来的CRC和标准工具一致,再往下走。
RS指令方式最大的好处是帧结构完全可控。比如你不想用标准的03功能码读,想用04读输入寄存器,MODRW不一定支持,但RS指令随便改。它的缺点是程序量大,通讯逻辑要自己管理好错误标志和超时时间,适合对性能有要求或者特殊协议场景。
4.3 轮询调度:两站循环,别让总线堵死
Modbus是半双工主从协议,主机同一时刻只能和一个从机对话,所以两台变频器必须轮询。轮询设计最忌讳的是“把一个站的发帧和应答写完再处理下一个站的发帧”,那样程序耦合度太高,后期加第三台很难改。我用步序状态机来做。
定义寄存器和标志位:
- 使用一个轮询计数器,0到3循环
- 步骤0:读1号机状态
- 步骤1:写1号机设定(如果需要)
- 步骤2:读2号机状态
- 步骤3:写2号机设定(如果需要)
每进入一个步骤,先判断通讯是否空闲,空闲就组帧发送,并启动一个200毫秒的看门狗定时器。如果在200毫秒内收到正确应答,数据存入对应寄存器,轮询计数器加一;如果超时,则记录一次通讯失败,计数器也加一,不能卡死在当前站,否则另一台设备永远没机会被问候。
台达PLC里有专门的通讯收发特殊标志位。RS指令发送请求可以用M1143触发,接收完成标志和错误标志也可以直接查询。用MODRW指令时更简单,指令自带的执行标志位就能判断完成和错误,程序里把两个标志位引出来做计数和报警即可。
轮询周期需要把握一个度。两台设备、每站读写各一帧,19200波特率下,每帧大约10到20毫秒,加应答和等待,一轮循环100毫秒左右非常轻松。如果把波特率降到9600,周期会翻倍,实际工程中这个响应速度仍然可以接受。过度压缩等待时间反而容易因为偶发干扰导致丢帧重试,得不偿失。
4.4 一拖二启停控制与故障互锁逻辑
通讯程序不只是收发数据,更重要的是把收发的数据应用起来。我的做法是:PLC内部先建立两台电机的启停逻辑,每个电机的启动命令不是一个硬输出点,而是通过Modbus写控制字发给变频器;变频器的运行状态也通过Modbus读回来,再反馈到PLC内部的运行指示灯和联锁逻辑里。
具体到程序结构,写频率通道的值来自哪里很关键。我习惯用两个保持寄存器存放目标频率,PID调节器或者触摸屏设置值都写到这里,然后每轮轮询时把这个值换算成0~10000的标定值,加载到发送缓冲区。
故障互锁要覆盖几种情况:
- 变频器报故障(状态字bit7为1),PLC立即把该台控制字写成0,并触发声光报警
- 连续3次通讯超时,认为该台变频器失联,按故障处理,停止写入该台的控制字
- 现场急停按钮按下,同时给两台变频器发快速停止命令,控制字写4
这些互锁逻辑写起来不复杂,但一定不要漏。通讯控制的设备,最怕的就是通讯丢了一帧、命令没送达,设备还在傻傻地转。只要状态字没有定期刷新,就要安排安全动作,这是做通讯控制的基本底线。
5. 调试实录与常见问题排查
5.1 第一次上电就通讯失败,按这个顺序查
新项目第一次上电,通讯ping不通几乎是必然的,区别只是问题多少而已。我的排查顺序是从物理层到参数层到程序层,不要跳步。
先看物理层。用万用表量一下D+和D-之间的电压,正常情况下空闲时应该在1.5V到5V之间。如果是0V,说明总线没有偏置,可能线断了或者设备没供电。接线端子松脱、压线压到屏蔽层、端子排氧化,这类低级问题占了失败原因的四成。
再看参数层。三台设备的波特率、校验位、停止位是不是完全一致。最常见的错误是PLC设了偶校验,变频器默认却是不校验;或者变频器站号设为1,PLC程序里读的却是2。把第二小节的参数表打印出来,逐项核对。
最后看程序层。先用编程软件的在线监控看MODRW指令有没有执行,有没有触发错误标志。如果指令根本没执行,查触发条件;如果指令执行了但一直报错,把寄存器地址和手册再核对一遍,特别注意地址偏移。
我调试的时候习惯在电脑上挂一个USB转RS-485调试助手,并到总线上做监听。这个做法帮我快速定位问题帧。Modbus RTU的帧结构一看就知道是“从机不应答”、“从机返回异常码”还是“主机发的帧本身就不对”,比在PLC里猜快得多。
5.2 运行中偶发通讯中断,重点查干扰和接地
系统运行几个小时才断一次,这种偶发故障最让人头疼。根据我的经验,这类问题九成出在干扰和接地上。
变频器是出了名的干扰源,输出侧的PWM载波会在电缆周围产生很强的电磁场。如果通讯线跟变频器输出动力线在同一个线槽里走了十几米,那偶发丢包完全是意料之内。处理办法是通讯线全程单独走线管,或者至少和动力线保持20厘米以上的距离;实在没条件,就选屏蔽双绞线并把屏蔽层接地。
总线供电问题也要留意。RS-485是差分信号,本身有一定的抗共模能力,但如果两端设备的地电位差太大,超过了通讯芯片的共模输入范围,通讯就会随机出错。这种情况接好SG线往往能解决。
另外检查一下轮询程序里有没有因为某个步骤异常导致总线被占死。比如某一次应答没收到,接收缓冲区里的旧数据没有清空,下一帧发送前又被当成了本次应答。我就在程序里踩过这个坑:接收完成标志复位早了,导致把上一次的残留数据当成有效应答,状态字读到的是上一次的值,偶尔还会和实际状态对不上。
5.3 PLC侧通讯超时和错误标志的处理细节
台达PLC的RS指令有专门的接收超时判定,超时时间可以通过特殊寄存器设定。我建议不要设得太短,一般300毫秒以内。太短了,变频器应答稍慢一点就误判超时;太长了,轮询周期被拖慢。
超时处理要分两类。第一类是单次超时,不用马上报警,因为干扰导致的偶发丢帧时有发生,一次超时后下一个轮询周期可能就恢复正常了。第二类是连续超时,连续三次没有应答,基本可以判定设备和总线的通讯彻底断了,这时必须报警并让设备进入安全状态。
错误标志复位也很关键。通讯错误标志一旦置位,必须在下一次发送前复位,否则程序会一直认为“上次还没发完”,导致后续帧全部卡住。我的经验是每轮轮询的第一步统一复位通讯错误标志,然后再触发新的发送请求。
变频器侧也有通讯掉线保护。ATV310参数里有一项是通讯断线后的处理策略,可以设为“自由停车”、“按停机斜坡减速”或“保持最后给定值”。从安全角度我强烈建议设为减速停车,不要保持最后值。你想想,如果总线断开,变频器收不到新的频率指令,却还保持之前的高速运行,这是很危险的事情。只有某些特殊工艺要求设备在失联时维持运行,才考虑保持最后给定,而且这种场合一定要配合独立的硬接线急停回路。
5.4 避坑清单:把踩过的坑一次说透
| 现象 | 根本原因 | 解决办法 |
|---|---|---|
| 通讯完全不通,总线无反应 | RS-485正负反接 | 核对D+、D-接线,调换线序 |
| PLC发帧后参数地址报错 | 寄存器地址偏移换算错误 | 用十六进制地址并对照手册明细 |
| 一台PLC带两台变频器,运行正常但偶尔掉线 | 终端电阻缺失或位置不对 | 总线首尾两端各并120欧姆电阻 |
| 一开机通讯就乱码 | 波特率或校验不一致 | 三台设备严格按参数表统一 |
| 变频器收到启停帧但电机不动 | 命令通道/给定通道未切到Modbus | 进入面板菜单设置组合模式 |
| 读回的频率值明显不对 | 标定规则理解错误 | 确认最大频率,按比例公式换算 |
| 运行几分钟后通讯中断且不再恢复 | 变频器检测到掉线并锁死 | 设置掉线保护为可重新通讯,检查程序错误标志复位 |
这里面的每一行都是我实际调过的真实情况,尤其是“一台带两台运行时偶发掉线”,几乎每个项目都要跟它见一面。看起来玄乎,其实就是终端电阻和地环路的问题,物理层处理好了能解决一半以上的怪毛病。
5.5 老手建议:调试顺序和备份习惯
调试多台变频器通讯,千万不要“一把梭”。我的铁律是先单机后多机:把1号变频器单独挂到总线上,PLC只轮询1号,调通启停、调频、读状态,再做2号;2号也调通后,再合并成完整轮询程序。这样每个阶段的问题范围都很小,出错了也好定位。
参数备份是很多人忽略的环节。ATV310的参数修改完之后,用面板把所有非默认参数抄录下来,或者如果有软件工具直接备份到电脑。千万别觉得“反正参数不多”,现场调试时改来改去,最后很可能记不清哪个参数被改过。等设备运行半年后出问题,手里有一份基线参数表,排查速度完全不同。
台达PLC程序里,把通讯相关的站号、波特率、寄存器地址都做成常量或注释清楚,是为数不多不会让你后悔的习惯。后期换一台变频器、加一台设备、或者替换某个型号,改起来一目了然。
最后再分享一个小技巧。调试Modbus RTU通讯时,可以在PLC程序里加一个“到当前为止通讯成功次数”的计数器,再配合一个“连续失败次数”的计数器。这两个值做成数据寄存器,就能通过触摸屏或者上位机随时观察通讯品质。正常情况下成功次数持续增长、失败次数基本不动;如果失败次数间歇性跳动,就算设备还在运行,也要提前排查干扰源,别等出了问题再抢救。这个习惯帮我提前发现过好几次线缆老化问题,也算是在长期运行中省了很多事。