台达PLC通过Modbus RTU控制两台ATV310变频器实操指南

发布时间:2026/10/20 8:24:03
台达PLC通过Modbus RTU控制两台ATV310变频器实操指南 自动化项目里“一台PLC带多台变频器”绝对是最常见的需求之一。早些年大家习惯用模拟量端子控制线多、调试麻烦、现场抗干扰还差现在基本都走现场总线了。这个项目是用台达DVP-24ES系列的PLC通过Modbus RTU协议在RS-485总线上挂两台施耐德ATV310变频器实现两台风机的独立启停、联动调速和运行状态监视。我一路从接线、参数设置、寄存器映射到PLC程序调试走下来踩了不少坑也总结出一套稳妥的做法。这篇就是把整个通讯示例掰开揉碎讲清楚给准备做一拖二、一拖多变频通讯的同行一份可以直接参考的实操笔记。1. 项目全貌为什么是台达24ES配两台ATV3101.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而不是ASCIIRTU数据密度高同样的波特率下能传更多数据通讯周期更短。对于控制类用途轮询周期越短系统响应就越快。虽然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总线上必须是唯一的。站号设置不当是最早期的低级错误两台都设成1PLC点名一号时两台都应答总线立刻冲突什么数据都读不回来。波特率和帧格式必须和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 RTUModbus RTUModbus RTU从站地址主机无地址或忽略12波特率192001920019200数据位888校验位偶校验E偶校验E偶校验E停止位111命令通道不涉及通讯控制通讯控制频率给定通道不涉及通讯给定通讯给定台达DVP-24ES的COM2通讯格式需要通过特殊寄存器D1120来设定。不同波特率和校验组合对应的数值不一样编程软件或者手册里有一张对照表。举个例子如果D1120的设定值对应“RTU模式、19200、8E1”程序里直接执行MOV H87D1120这种写法。具体数值以你手上手册的表格为准不要凭记忆硬套因为DVP老款和ES2系列的定义略有出入。参数确认一致后再用PLC的在线监控或者电脑上的串口调试助手发一帧“01 03 2137 0001 计算CRC”如果能收到变频器的正常应答物理层和参数层就通了可以开始写正式程序。3. 寄存器映射与控制逻辑搞清读写什么数据3.1 看懂ATV310的Modbus寄存器表Modbus协议本身不关心你读的是什么数据它只负责把你指定的寄存器地址里的内容传过去。真正要下功夫的是搞清楚ATV310的寄存器表也就是“哪个地址对应什么含义”。ATV310的寄存器映射在随机附带的手册里有一张专门的表格不同固件版本可能会有细微差异上电前务必对照现场机器核对。常见的几类寄存器如下含义读写方向寄存器地址十六进制数据说明控制字CMD写0x21350停止、2正转启动、3反转启动、4快速停止频率给定LFRD写0x21360~10000对应0~最大频率状态字ETA读0x2135bit0运行、bit2反转、bit7故障输出频率RFRD读0x21360~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×100007400。这个数据要先放进寄存器再通过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是从站号1H03是读功能码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为1PLC立即把该台控制字写成0并触发声光报警连续3次通讯超时认为该台变频器失联按故障处理停止写入该台的控制字现场急停按钮按下同时给两台变频器发快速停止命令控制字写4这些互锁逻辑写起来不复杂但一定不要漏。通讯控制的设备最怕的就是通讯丢了一帧、命令没送达设备还在傻傻地转。只要状态字没有定期刷新就要安排安全动作这是做通讯控制的基本底线。5. 调试实录与常见问题排查5.1 第一次上电就通讯失败按这个顺序查新项目第一次上电通讯ping不通几乎是必然的区别只是问题多少而已。我的排查顺序是从物理层到参数层到程序层不要跳步。先看物理层。用万用表量一下D和D-之间的电压正常情况下空闲时应该在1.5V到5V之间。如果是0V说明总线没有偏置可能线断了或者设备没供电。接线端子松脱、压线压到屏蔽层、端子排氧化这类低级问题占了失败原因的四成。再看参数层。三台设备的波特率、校验位、停止位是不是完全一致。最常见的错误是PLC设了偶校验变频器默认却是不校验或者变频器站号设为1PLC程序里读的却是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程序里加一个“到当前为止通讯成功次数”的计数器再配合一个“连续失败次数”的计数器。这两个值做成数据寄存器就能通过触摸屏或者上位机随时观察通讯品质。正常情况下成功次数持续增长、失败次数基本不动如果失败次数间歇性跳动就算设备还在运行也要提前排查干扰源别等出了问题再抢救。这个习惯帮我提前发现过好几次线缆老化问题也算是在长期运行中省了很多事。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询