☰
台达PLC与三菱变频器Modbus通讯实战:从接线参数到梯形图调试
2026/10/21 18:05:31 网站建设 项目流程

台达PLC和三菱变频器做Modbus通讯,这活儿看着不起眼,真正上手调试过的人都知道,细节能把人折腾疯。我最近刚给一条小产线的恒压供水系统做完联调,PLC用的台达DVP系列,变频器是三菱E700系列带泵的7.5kW电机,要求实现远程启停、无级调速,还要把实际频率和电流实时拉到触摸屏上显示。启动、停止、加速、减速、读电流、读频率、故障报警,全走RS-485一根两芯屏蔽线,彻底替换掉了原来那套又乱又占端子的硬接线。

这篇文章把这套方案的完整过程捋一遍:为什么选Modbus而不是硬接线和模拟量、变频器侧参数怎么设、PLC侧通讯参数怎么算、梯形图怎么写、调试时踩了哪些坑。适合正在做自动化改造和设备维护的同行参考,也适合刚接触Modbus通讯的新手照着抄作业。

1. 方案选型:为什么最后选了Modbus RTU

1.1 硬接线、模拟量、通讯三种控制方式怎么取舍

接手这个项目的时候,原来的控制方式是典型的“多段速+端子启停”:PLC输出点接变频器的STF、STR、RM、RH这些端子,用几个DO点的组合去切固定频率。缺点很明显——变频器只有几个段速档位可选,想连续调速根本没戏;每增加一个功能就要多占用一个PLC输出点,柜子里密密麻麻全是线,查线能查到怀疑人生。而且段速切换的时候,电机转速是阶梯式跳变的,做恒压供水控制时压力波动特别大,泵容易喘震。

第二种思路是上模拟量:PLC加一块DA模块,输出0~10V或者4~20mA给变频器的模拟量输入端子,调速是连续的,精度也比多段速好。但模拟量控制有两个痛点,一是需要额外的DA模块和AI模块(如果还要反馈电流电压的话),成本上去了;二是模拟量信号容易受干扰,电压信号传个二三十米线路衰减和电机的共模干扰就上来了,现场如果还有变频器、接触器这些强干扰源,模拟量飘起来很难查。

第三种就是Modbus通讯。两根线搞定一切:启停指令、目标频率、实际频率、输出电流、故障代码,全部走数据。要调速就改个寄存器数值,要监控就周期读寄存器,要多台变频器联动就改个站号把从站挂一串。这次项目要求频率能连续调节、面板实时显示电流频率、集成到触摸屏监控,还要方便以后扩容,Modbus是当前条件下最合适的选择。而且台达PLC本体就带RS-485口,三菱E700系列变频器的PU口原生支持Modbus RTU协议,不需要额外买通讯模块或者功能卡,硬件成本几乎为零,省下的DA模块钱足够买好几米的屏蔽电缆了。

1.2 Modbus RTU的底层逻辑,懂一帧报文就够了

很多刚接触通讯的同行一听到协议就头大,其实Modbus RTU非常朴素,一句话概括:主站发一条指令,从站回一条响应,一问一答,规矩简单。物理层用RS-485,两根线(A和B)差分传输,一主多从,最多可以挂32个设备(理论上更多,取决于驱动能力和总线上设备的数量)。

RTU模式下一帧报文长这样:从站地址(1字节)+功能码(1字节)+数据区(N字节)+CRC校验(2字节)。比如我要让1号从站的变频器正转,就发:01 06 00 00 00 01 48 0A。拆开看:01是从站号,06是“写单个寄存器”功能码,00 00是寄存器地址,00 01是要写入的数据(正转指令),最后48 0A是前面所有字节的CRC16校验码。读数据更简单,功能码03,后面带起始地址和读取数量,从站就会把数据按顺序回过来。

CRC校验这部分看起来麻烦,但不管是PLC的通讯指令还是变频器的协议栈,都替你算好了。你只需要搞清楚三件事:从站号是多少,要操作的寄存器地址是多少,写入的数据是什么含义。剩下的事情通讯指令全部代劳。搞懂这个,再去看台达的MODRD/MODRW指令,你会发现它其实就是在拼报文,只不过用梯形图把拼报文的过程包起来了。

2. 接线与参数设置:大部分通讯故障死在这一步

2.1 RS-485接线看着简单,踩坑全在这一环

接线这步看起来就是“A接A、B接B”六个字,但现场十个通讯故障里至少有五个跟接线有关。变频器侧的PU插头上有A和B两个接线端子,台达PLC侧是DATA+和DATA-,做通讯电缆时一定要把A对DATA+、B对DATA-对齐,弄反了通讯完全不通,而且错了之后收发指示灯经常是亮的,非常迷惑人。

线材我习惯用RVSP 2×0.75或者2×1.0的屏蔽双绞线,双绞这个概念别忽略,两根线绞合可以大幅降低共模干扰的耦合,普通平行线临时试机凑合可以,长期运行不建议。这次项目通讯距离大概30米,敷设路径和变频器输出动力线有一段并行了几米,所以屏蔽层必须要处理:屏蔽层做单端接地,我习惯在PLC这一侧接地,另一侧悬空不接,防止形成地环路。这一点非常关键,有次贪省事把屏蔽层两端都接了地,结果地电位差在屏蔽层里形成环流,通讯反而频繁丢包。

线路较长或者总线挂的设备多时,最远端的两个节点之间需要并接终端电阻,阻值一般取120欧姆,与线缆的特性阻抗匹配,防止信号反射。这次的30米距离只有一台变频器,短距离不并电阻也凑合能跑,但我还是把总线上最远端(变频器侧)并了一个120欧的可插拔端子电阻,实测波形干净很多。要注意的是终端电阻是并在线路的最末端两端,不是随便挂在中间某个设备上,挂错了反而破坏阻抗特性。

另外强烈建议PLC和变频器做可靠接地,接地电阻满足电气规程要求,而且不要跟电机、接触器的地混在一起。我见过一个现场,PLC不接地,手摸上去麻酥酥的,Modbus通讯十分钟一断,接地之后稳定运行几个月再没出过事。

2.2 三菱变频器参数设置,照着这张表设就行

三菱E700系列启用Modbus RTU通讯,关键在于把Pr.549设为1,这是协议选择,决定走Modbus RTU而不是三菱自家的PU口协议。然后是对通讯帧格式的参数:站号、波特率、数据位、停止位、校验位,这五个参数必须和PLC侧一字不差地对齐,差一个bit都通讯失败。以下是我这次项目实际使用的参数配置,变频器型号为FR-E700系列:

参数号参数名称设置值说明
Pr.549协议选择1选择Modbus RTU
Pr.117通讯站号1从站地址,多台变频器分别设为1、2、3
Pr.118通讯速率9696表示9600bps
Pr.119数据长度/停止位18位数据位+2位停止位
Pr.120校验方式00为偶校验
Pr.121重试次数1通讯异常时重试1次
Pr.122通讯校验时间间隔60设为60秒,掉线后报E.PUE
Pr.124CR/LF选择0Modbus RTU模式必须为0
Pr.79运行模式10网络运行模式,启停频率都由通讯给定

注意Pr.549一旦改动,变频器会重新初始化通讯相关参数,改完后最好断电重启一次再试通讯。Pr.122这个参数容易被人忽略,它相当于“从站看着主站是否还活着”的看门狗:如果在这个时间内没收到主站任何有效报文的次数达到Pr.121+1次,变频器就直接报警停机(E.PUE),防止通讯断线后设备失去控制继续运行,这是安全保护,千万别图省事把它设成0。Pr.79设10以后,面板上的启动按键就不灵了,启停只能走通讯端子排或通讯指令控制,这是正常的,不是坏了。

2.3 台达PLC侧通讯参数初始化,D1120的计算方法

台达DVP系列PLC的RS-485口(一般叫COM2)通过特殊寄存器D1120设定通讯格式,D1121设定本机站号。这个D1120的值不是随便填的,它的每个bit都有具体含义,包括数据长度、校验方式、停止位、波特率、协议模式等。不同系列PLC的bit位定义略有不同,最稳妥的办法是翻开你手上那台PLC对应的《通讯控制技术手册》,找到COM Port Setting(D1120)那一页对照填写。

以我调试的这台DVP系列PLC为例,我选用的通讯格式是9600bps、8位数据、偶校验、2位停止位、Modbus RTU模式,最终计算得到D1120填H0087(或者是H0097,取决于具体系列)。很多同行在网上问“D1120到底填多少”,我只能说别照抄网上的数字,不同型号真不一样。但计算逻辑是一样的:确定你要的波特率、校验位、数据位、停止位,查手册里对应的位编码,逐位拼起来转成十六进制。这一步不要偷懒,让人帮你远程调试的时候,多半就是D1120填错导致两边参数对不上。

除了D1120和D1121,还有两个特殊继电器值得关注:M1120是Modbus ASCII/RTU模式切换位,有的系列设置D1120时一并处理;M1129是通讯超时标志,D1129存放超时时间设定值和当前剩余时间。我习惯把超时时间设到100左右,单位是10ms,也就是1秒收不到响应就判定超时,然后再配合轮询重试逻辑处理。这个值设得太短容易被干扰导致频繁误判,设得太长又会在断线时响应迟钝,调试中可以根据实际调整。

上电初始化千万别忘了写这段:用M1002(上电瞬间ON一次的特殊继电器)触发MOV指令,把D1120和D1121的值装进去,否则PLC默认的通讯格式可能不是你设的这组参数,通讯自然不通。这属于“初始化只做一次”的经典场景,我见过有人把MOV写在每个扫描周期都执行的段里,结果通讯参数被反复改写,现象极其诡异。

3. PLC程序与通讯指令实战,从寄存器地址到梯形图

3.1 三菱变频器Modbus寄存器地址,必须背下来的那张表

写程序之前,先要把变频器的寄存器地址表搞清楚。E700系列的Modbus寄存器采用Modbus标准映射方式,PLC发报文时的地址从0x0000开始对应40001号保持寄存器。这次用到的核心寄存器如下:

寄存器地址对应编号功能读写数据格式
0x000040001运行指令读写0x0001正转、0x0002反转、0x0000停止
0x000140002频率设定读写单位0.01Hz,50Hz写5000
0x000240003输出频率只读单位0.01Hz
0x000340004输出电流只读单位0.1A
0x000440005输出电压只读单位0.1V
0x000540006报警状态只读对应位表示不同故障

很多第一次接触的人容易踩坑:PLC的通讯指令里填的是0x0001,而不是40002。因为Modbus协议报文里的寄存器地址是“偏移地址”,40001对应0x0000,40002对应0x0001,以此类推,这个换算关系一定要心里有数。调试时发现能写能读但总觉得数据对不上,往往就是这里差了1个地址。

3.2 频率和指令的换算,别把数值直接怼进去

频率设定值为什么50Hz要写5000?因为寄存器精度是0.01Hz,实际值必须乘以100再写入。反过来说,从40003读回来的“5000”要除以100才是实际频率50Hz。在触摸屏或者HMI上显示时,这一步换算别丢,不然面板上会显示出5000Hz这种吓人的数据。

运行指令的数据格式也要注意,有些资料写成bit位组合:bit0正转、bit1反转,0001就是正转,0002就是反转,0003是正转+反转(实际不会这么用)。但更常用的写法是把整个寄存器值当成命令字,0x0000停止、0x0001正转、0x0002反转。发送正转指令之前,最好先发一条0x0000停止指令再把反转指令置0,防止状态切换时出现瞬时短路刹车的情况。尤其是在正转直接切反转这种场景,电机负载大的时候机械冲击非常大,我在程序里做了正反转互锁和延时,这属于现场安全细节,别偷懒。

3.3 梯形图核心逻辑:初始化、写频率、写指令、轮询读状态

整个PLC程序按功能分成四块。第一块是上电初始化,前面说过,用M1002搬运通讯参数到D1120和D1121。第二块是频率写入:触摸屏设定目标频率(比如30.0Hz),PLC程序里先乘以100存到数据寄存器D1150(格式化成整数5000相应的值),再用通讯指令把D1150的值写到从站1的0x0001地址。这里推荐用MODRW或者类似的写指令,在目标频率值发生变化时才触发写入,没必要每个扫描周期狂刷。

第三块是启停逻辑。X0启动、X1停止、X2急停,通过类似如下的指令表逻辑实现:

// 梯形图示意,具体指令以实际PLC型号为准 // 启动:X0上升沿,先发停止再发正转 LD X0 ANI M1170 // 急停标志 SET M100 // 正转请求标志 // 急停优先级最高 LD X2 SET M1170 // 急停置位 RST M100 // 清除正转请求

当正转请求标志M100为ON时,把0x0001写入从站1的0x0000地址;停止指令就是写0x0000。为了防止重复写同一条指令产生不必要的总线流量,我用“请求标志上升沿”触发写指令,写完成之后复位标志。

第四块是状态读取,也是最体现轮询功底的部分。我建立了一个100ms的定时器循环:第一次轮询读40003(输出频率),第二次轮询读40004(输出电流),第三次轮询读40006(报警状态),轮流执行,类似一个简单的分时调度。这么做的好处是避免一次读出太多寄存器把总线占满,也减少与写指令冲突的几率。轮询结果分别存到D1151、D1152、D1153,触摸屏直接读取这些数据寄存器显示。整体程序骨架如下:

// 轮询计数控制 LD T0 // 100ms定时器 OUT T0 K10 // 定时1秒,每100ms产生一个脉冲(配合计数) // 计数器从0到2循环 LDP T0 INC D200 LD D200 CMP K3 RST D200 // 超过2则归零 // 根据计数值分别读三个寄存器 LD D200 K0 MODRD K1 H0002 D1151 K1 // 读40003输出频率,数据存D1151 LD D200 K1 MODRD K1 H0003 D1152 K1 // 读40004输出电流,数据存D1152 LD D200 K2 MODRD K1 H0005 D1153 K1 // 读40006报警状态,数据存D1153

上面代码的关键在于MODRD指令调用前,一定要确认上一条通讯指令已经完成,也就是看M1127(通讯完成标志)或者类似的状态位。如果在通讯忙的状态下再次触发新指令,轻则指令不执行,重则报文互相覆盖,调试时表现出来就是“读着读着突然卡住”。我习惯在每条通讯指令前串一个“非忙”条件,确保一次只发一条报文。

3.4 多台变频器并联,轮询策略怎么调整

如果以后产线扩容,再加一台变频器,Modbus的优势就出来了。第二台变频器把Pr.117设为2,硬件上并联到同一对RS-485线上即可(注意带载能力和终端电阻调整)。程序上轮询逻辑变成:每个轮询周期依次访问1号机的频率、2号机的频率、1号机电流、2号机电流,按从站号分组。写指令时注意同时只能有一个写操作占用总线,所以多台设备的启停和频率写入也要纳入统一调度。

很多人在多台设备轮询时贪快,把两三条MODRD指令连续往下写,以为每条指令自动排队。实际上大多数PLC的通讯指令是“发完一条、等回应、再发下一条”的串行机制,如果不加完成标志就连续写指令,后面的指令根本发不出去。这算是我调试多台通讯设备时印象最深的一个坑,希望你们不要重复踩。

4. 联调测试与故障排查:从死寂到稳定运行

4.1 联调测试的正确顺序,先读后写先频率后运行

通讯程序写完,先别急着按启动按钮,按顺序做三轮测试能省下大把排查时间。第一步测试读:只执行MODRD读取40003,在PLC编程软件里在线监控D1151,看能不能读到变频器当前实际频率数。如果读到数据且数值合理(停机时为0),说明物理链路、变频器参数、PLC通讯格式三者全部打通,这是整个调试的地基。此时直接在触摸屏上显示频率,通常都是正常的。

第二步测试写频率:手动给D1150(频率设定寄存器)赋一个值,比如5000(对应50Hz),触发写指令,然后去变频器面板上看设定频率显示,如果能从0变成50Hz,说明写通路没问题。这一步完成后再测运行指令:先写0000停止,再写0001正转,观察电机是否缓慢启动转向是否正确。务必先确认转向!我有个习惯,第一次带载启动前先把电机和泵的联轴器脱开,等确认转向正确再连上,看似多花五分钟,实际是防止反转烧泵的保命操作。

4.2 常见故障排查,一张速查表拿走

现场调试遇到的问题五花八门,但绝大多数都能归到下表这几类,按照“先物理层后协议层再应用层”的顺序排查,基本都能定位:

故障现象排查思路常见根因
完全无响应,PLC通讯超时用万用表量AB线电压,正常应在2V以上;检查接线是否A/B反接;核对变频器Pr.117/118/119/120与PLC-D1120是否完全一致接线错误、参数不一致
通讯时好时坏,偶发超时检查屏蔽层接地是否单端可靠;检查变频器输出侧动力线是否与通讯线并行走线过长;考虑并接终端电阻干扰、线路过长、屏蔽不当
能读到频率,但电机不转查Pr.79是否设为10(网络模式);查Pr.338/Pr.339相关的运行指令来源是否允许通讯给定;确认运行指令数据格式正确运行模式没切到通讯控制
写入频率后实际速度不对核对寄存器单位是否为0.01Hz;确认HMI侧是否做了除以100的换算;检查是否有其他段速参数抢占频率来源单位换算遗漏
多台设备时某台总超时确认从站站号是否唯一;检查是否总线上最后一个设备未接终端电阻;检查该设备的通讯线缆端子是否松动站号冲突、终端电阻缺失
通讯正常但报E.PUEPr.122通讯校验时间过短或主站轮询周期太长,调大Pr.122或缩短轮询间隔看门狗超时

遇到完全无响应的情况,我的排查手法是:先用一个串口调试助手接在485线上,手动发一帧报文,比如01 03 00 02 00 01 CRC,看变频器会不会回数据。能回,说明变频器侧和线路都正常,问题在PLC侧的参数配置;不回,说明变频器或者接线有问题。这种“物理层手动验证法”能把故障定位时间缩短一半以上,强烈推荐。

4.3 通讯可靠性优化,把这四项做了基本无忧

项目稳定运行之后,我还会做几项收尾优化。第一,有条件的话把通讯波特率从9600提高到19200甚至38400,但是前提是所有设备和现场干扰条件允许,波特率提高后同样距离下抗干扰能力会下降,要权衡。恒压供水这种几百毫秒的实时性要求,9600波特率完全够用,反而不建议盲目提速。第二,PLC程序里对读回来的数据进行合理性判断,比如频率读回来大于某个上限或者为负值时,显示“通讯异常”而不是显示一个乱七八糟的数,这对操作工很重要。

第三,考虑通讯断线的安全处理:PLC一旦检测到通讯超时,应该把写频率寄存器的值清零,并触发报警,严禁在通讯断开的情况下让变频器保持继续运行。三菱变频器侧的Pr.122本身就是一道断线保护,但PLC侧的主动判断同样不能少,这叫双重保护。第四,我在触摸屏上做了一个“通讯尝试次数”的隐藏画面,平时看不到,出问题时让维护人员进去看数值,能快速判断是偶发干扰还是彻底断线,这个小功能在实际维护中非常实用。

写在最后的一点体会

这套台达PLC配三菱变频器Modbus通讯的方案,单论技术难度其实不算高,但真正动手做一遍,从选型、接线、参数、程序到排障,每一步都有值得记下来的细节。我个人的体会是:Modbus调试过程中的疑难杂症,十有八九出在“两边参数没对齐”而不是程序逻辑上,所以动手之前拿张纸,把PLC通讯格式和变频器通讯参数一项项列出来逐项比对,比抱着一堆仪表反复测量都管用。另外就是养成用串口调试助手先手动验证通讯链路的好习惯,链路一通,后面的事就顺了。这套方法后续还可以继续扩展,比如接多台变频器挂恒压供水联动,或者把变频器的故障代码解析出来做成中文报警,都不是问题,核心思路都是同一套Modbus主从通讯逻辑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询