我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

台达PLC与VFD变频器Modbus RTU通讯实战:从接线到程序调试

台达PLC与VFD变频器Modbus RTU通讯实战:从接线到程序调试 做现场设备改造的时候用台达PLC去控制台达VFD变频器我遇到过太多人一上来就问“能不能用通讯控制”其实这个问题在十年前就已经是标准答案了可以而且应该用。凡是需要启停、调速、读回频率和电流的设备拉一条RS-485线走Modbus RTU比一堆中间继电器加模拟量线不知道省多少事。这篇文章就是围绕“台达PLC与台达VFD变频器Modbus通讯案例实操”这件事把从硬件接线、参数设置到程序编写、现场调试的完整过程记录下来给那些准备上手通讯控制又不想翻一堆手册的同行做个参考。这套东西特别适合三类人刚接触PLC通讯的电气工程师、做设备维护想自己改控制方式的技术员、以及学校里学过梯形图但没见过真实变频器通讯现场的学生。整篇文章不讲虚的直接给你能用的参数、能抄的程序、能落地的排查思路。看完你至少能独立完成一台变频器的Modbus通讯控制。1. 案例整体思路Modbus通讯到底比硬线强在哪1.1 三种控制方式的成本账我在现场经常遇到两种极端一种是老师傅坚决用硬线觉得通讯不可靠另一种是年轻人上来就要Ethernet通讯把简单问题复杂化。实际上变频器控制方式就三种算清楚账就好选了。第一种是端子硬线控制。正转一个继电器、反转一个继电器、故障复位一个继电器加上多段速可能需要四五个输出点PLC侧得配继电器或晶体管输出柜子里光接线就一大把。这种方式的优点就是直接但缺点非常明显点一多故障率就上来了而且变频器实际运行频率、电流、母线电压这些东西你一样都看不到想监视就得额外加模拟量模块和变送器。第二种是模拟量控制。用0-10V或者4-20mA给定频率能实现连续调速但模拟量信号天生怕干扰线要屏蔽还要单端接地PLC侧得加模拟量输出模块变频器侧得加模拟量输入端子。调试的时候万用表量过来量过去稍微有点地电位差速度就飘。更难受的是模拟量只能“给指令”变频器的实际运行数据你还是读不回来。第三种就是Modbus通讯控制。一条双绞线走RS-485物理层协议用Modbus RTU启停、正反转、频率给定、加减速时间、故障复位全都可以写进去同时还能把输出频率、输出电流、直流母线电压、故障代码读出来。PLC侧不用额外加模块变频器侧内置RS-485接口线材成本基本可以忽略。我做过的那个设备改造项目原来柜子里光变频器控制相关的线就有14根改成通讯之后只剩3根两根通讯线加一根公共地线。调试时间从原来的两天压缩到半天而且运行数据直接上触摸屏操作工再也不用跑到变频器跟前看面板了。1.2 Modbus RTU为什么是这类项目的首选有人可能会问现在不是有CANopen、PROFIBUS、EtherNet/IP这些总线吗为什么偏偏选Modbus RTU核心原因有三个。一是台达PLC和台达变频器都内置了Modbus协议不需要额外的通讯模块成本上最划算。二是Modbus RTU在RS-485上的传输距离能达到1000米左右满足绝大多数车间和设备的布线需求。三是协议本身足够简单报文透明出问题之后用串口调试助手就能直接看数据排查起来非常直观。Modbus RTU是主从协议PLC做主机Master变频器做从机Slave。一个PLC的通讯口最多可以挂247个从站设备每个站通过站号区分。不过这里要泼盆冷水从站数量太多通讯周期会拉长我一个项目最多挂过8台变频器超过这个数我建议拆分通讯口或者换更高档的通讯协议。关键点在于Modbus RTU是半双工通讯也就是同一时刻只能有一个设备在发数据。所以写程序的时候读和写要分开安排不能像串口调试助手那样肆无忌惮地一直发。这个话题后面讲程序的时候会再展开。2. 硬件与接线准备RS-485首战最容易翻车的地方2.1 需要准备哪些东西这套方案需要的硬件非常少我列一个清单出来基本就是实际项目的标准配置。PLC方面台达DVP系列里我常用的是DVP14SS2这种带两个通讯口的经济型主机。其中COM1是RS-232编程和连接文本屏用COM2是RS-485专门用来跑Modbus RTU通讯。选型的时候千万注意台达有些更早期的型号只有一个RS-232口没有RS-485那就得加一块通讯扩展板才能做这个方案。所以买之前先查清楚型号尾缀和通讯口配置别等接线的时候才发现硬件不支持。变频器方面台达VFD-M、VFD-E、VFD-B、CP2000这些系列都内置RS-485端子。VFD-M的端子标的是SG和SG-VFD-E和CP2000标的是D和D-叫法不同本质都是RS-485的A和B。我做项目习惯用VFD-M参数简单价格也合适。线材方面推荐用屏蔽双绞线就是RS-485专用线或者带屏蔽层的两芯双绞线。两根芯线分别走A和B信号屏蔽层只在PLC这一端接地另一头悬空。别用普通的RVV平行线代替距离短还行距离一长干扰和信号反射就非常难受。另外建议准备一个USB转RS-485的调试工具几十块钱那种就行再搭配一个串口调试助手软件。这个东西在后面联机调试环节能帮你省大量时间可以先把PLC和变频器里的程序都断开直接用电脑往变频器发报文验证参数设置正确之后再回PLC侧排查。120欧终端电阻也要备两个。如果通讯线上设备只有两台理论上是两端各接一个120欧电阻。实际做的时候有些PLC或者变频器内部带了跳线电阻说明书上查一下就行。没有的话就外接一个拧在端子上就行。2.2 三根线解决启停、调速与监视RS-485的接线比大家想象的简单但细节上的坑特别多。我先说标准接法。先把变频器的通讯端子找到。VFD-M上有SG和SG-对应的是RS-485的A和B。然后用双绞线的一端A接PLC的COM2的A或者标着DATA的端子B接PLC的B-DATA-。这里有一个非常容易搞错的地方有些PLC的485端子是“A对B、B对A”的交叉接法但台达DVP的COM2和台达变频器的端子是“正对正、负对负”的直连接法也就是A接AB接B。接反了你可能发现PLC发命令变频器完全没反应或者偶尔能通一下马上断。公共地线是第三根线把PLC的SG信号地和变频器的GND端子连起来。很多人两台设备之间只接两根信号线距离短没问题距离一长或者现场有大功率设备启动通讯就容易莫名其妙地中断。加了公共地线之后两边的信号参考电位一致稳定性会明显好一截。终端电阻的处理上只有两台设备一般可以不接通讯距离超过50米再考虑加。加了之后要确认设备本身的RS-485驱动能力如果通讯质量还是不行优先检查接地和屏蔽别老想着加电阻能救一切。接线的同时把屏蔽层处理好只在PLC端接地变频器端悬空。屏蔽层一定不能两端都接地这样会形成地环路反而把干扰引进来了。我见过一台设备通讯频繁报错最后发现就是屏蔽层两端都接在柜体上把柜体之间的地电位差全引到了通讯信号上改成单端接地后问题直接消失。3. 通讯参数配置变频器这5个参数没改对后面全是白干3.1 变频器参数设置清单通讯协议本质上就是两台设备说同一种语言。站号相当于门牌号波特率相当于语速数据格式相当于口音。任何一个对不上通讯就起不来。我以台达VFD-M系列为例给出必须修改的参数项。不同系列编号有差异但思路完全一样改之前先翻对应手册的参数表。VFD-M参数设置参考表参数编号功能含义推荐值说明00-21通讯站号01从站地址1~247和PLC程序里的站号必须一致00-22通讯波特率39600bps0120012400248003960041920000-23通讯数据格式38-E-107-E-117-O-127-N-238-E-148-O-158-N-102-00主频率指令来源5RS-485不改成通讯写入频率无效02-01运转信号来源5RS-485不改成通讯写入启停命令无效注意看00-23这个参数我推荐用8-E-1也就是8个数据位、偶校验、1个停止位。为什么不用8-N-1因为Modbus RTU标准报文里本身就带CRC校验加上偶校验是双重保险。PLC侧的通讯格式一定要和变频器保持一致否则你发出去的数据帧变频器直接当噪声丢弃。02-00和02-01这两个参数是最容易忽略的也是最多人“通讯正常但电机不动”的根源。很多新手把站号波特率全设对了频率也写进去了但变频器就是不理你就是因为频率来源还停留在面板电位器或者端子模拟量输入上。通讯数据写进来但是变频器的内部资源根本没分配给通讯自然不动。这两项设成5之后面板上的旋钮和端子给定就失效了所有指令只走RS-485口。还有几个建议一起设置的00-24通讯异常处理建议设成1也就是通讯超时后减速停车。假设通讯线中途被砸断或者插头松了变频器不会继续按最后的指令傻跑而是自动进入减速停车流程这对设备安全非常重要。00-25是通讯超时时间一般设个0.5到1秒就够了太长不安全太短容易误动作。调完参数记得按面板上的“ENTER”或者“SET”键保存同时把变频器断电重启一次。有些参数是运行中不允许修改的一定要在停机状态下改。3.2 PLC侧通讯口与数据格式设置PLC侧其实要做的事情不多因为台达DVP系列的内置RS-485口默认就跑Modbus RTU协议不需要额外的初始化代码。但有几个细节必须确认。首先确认PLC的通讯格式和变频器一致。在ISPSoft软件里双击左侧“通讯设置”找到COM2的配置界面把波特率设成9600数据格式设成8-E-1。这里有个容易踩的坑PLC出厂默认可能是7-E-1或者8-N-1你只改了变频器忘了改PLC两边永远握不上手。然后在程序里用特殊寄存器确认通讯状态。台达PLC在COM2通讯过程中有一些特殊标志位可以反映通讯错误比如M1143之类具体型号对应关系查手册。调试阶段我经常在触摸屏上做一个“通讯心跳”页面用PLC的通讯错误计数显示到底成不成功非常直观。PLC的协议格式设置接口在不同软件版本里位置略有差异如果在树形菜单里找不到也可以直接用指令M1132COM2协议切换来做控制。不过我平时更建议在软件里做整体配置程序里保持干净。到这里硬件和通讯格式都准备好了可以进入核心的寄存器读写环节。4. 核心实操Modbus读写指令与完整程序示例4.1 搞懂变频器的寄存器地址Modbus通讯的本质就是读写寄存器。你把数据写到变频器的某个寄存器里变频器就执行对应动作你从某个寄存器里读数据就能拿到变频器的运行状态。所以寄存器地址表就是整个通讯方案的“地图”。台达VFD-M系列变频器最常用的寄存器如下寄存器地址功能单位/数值说明读写属性2000H通讯命令字0001H正转0002H反转0005H停止写2001H频率指令0.01Hz为单位50.00Hz写入5000写2002H加速时间0.01秒为单位写2003H减速时间0.01秒为单位写2100H运行状态bit0运行中bit1反转读2101H输出频率0.01Hz为单位读2102H输出电流0.01A为单位读2103H直流母线电压0.1V为单位读2104H输出电压0.1V为单位读这里特别注意频率的数值不是直接写50而是要写成50.00Hz对应的5000。Modbus寄存器本身不带小数点小数点的位置完全靠你手动约定。VFD-M的频率单位是0.01Hz所以50Hz就是50除以0.01等于5000。如果用了VFD-B系列频率单位可能是0.1Hz那就是500数值差10倍。这也是很多二次开发的人说“我写了5000变频器怎么不转”的原因之一——先查型号再查单位。命令字也值得细说。2000H寄存器写0001H是正转0002H是反转0005H是停止。这里有个细节停止命令分为减速停止和自由停止0005H在VFD-M中对应的是减速停止也就是按03-00甚至更精细的减速时间参数停下来。如果是急停场景需要写0006H或者2000H的特定bit组合具体看手册。日常工艺里用0005H就够了。4.2 PLC读写指令怎么用台达DVP系列的SS2/SA2/SV机型在ISPSoft中提供了专门的Modbus读写指令用起来比通用RS指令简单太多。以MODRW指令为例基本格式是MODRW 通讯口地址 从站号 寄存器地址 要写入/读出的数据 功能代码实际梯形图里是这样写的MODRW K2 K1 H2000 K1 D100拆开来看K2表示使用COM2口K1是从站号对应变频器00-21设的01H2000是变频器寄存器地址K1代表数据长度是1个字D100是写入或者读取的数据存放位置。MODRW这个指令同时具备读写两种能力通过后面的功能码或者数据方向来区分。台达还有一种更明确的读写分离指令MODRD用于读MODWR用于写参数结构更直观MODWR K2 K1 H2000 D100 // 把D100的数据写入1号站的2000H寄存器 MODRD K2 K1 H2101 D110 // 读取1号站2101H的数据存到D110这两个指令是一条执行一条动作每执行一次只完成一次报文收发。所以在程序里要注意执行条件用脉冲执行不要用连续执行。意思就是这条指令只在条件从OFF变ON的那一瞬间执行一次然后立刻被跳过。如果放在常开触点后面每个扫描周期都发一次报文不仅通讯口忙不过来还可能把变频器给搞晕。脉冲执行在梯形图里就是在指令前面的触点输出上加个上升沿微分台达软件里一般用PLS M0这样的方式或者直接在指令框里选择上升沿触发。别嫌啰嗦这一步做错了后面会有一堆莫名其妙的问题。4.3 一个可以直接抄的启停调速监视程序下面用一个完整案例来讲程序结构。假设现场是一台输送带PLC控制变频器驱动电机要求柜门上的启动按钮X0控制正转启动停止按钮X1控制停止电位器对应模拟量通道或者触摸屏设定值控制频率触摸屏实时显示输出频率和电流。第一步先处理频率给定。用一个寄存器D0存放目标频率单位是0.01Hz。触摸屏直接绑定D0操作工在屏上输入5000就表示50.00Hz。PLC每次启动前先把D0的值写入变频器的2001H寄存器MOV D0 D100 MODWR K2 K1 H2001 D100这里为什么要先MOV到D100因为MODWR指令的最后一个参数最好用寄存器方便在程序里做数据中转也避免指令执行过程中数据被外部修改。第二步启动逻辑。X0按下的瞬间先写频率延时100毫秒确保写频率报文已经发出再写命令字X0 - PLS M0 M0 - MOV D0 D100 M0 - TMR T0 K10 (延时1秒实际上100ms就能到) T0 - MOV K1 D101 // 正转命令值1对应0001H T0 - MODWR K2 K1 H2000 D101为什么启动前必须先给频率再给命令因为如果先给了正转命令变频器立刻运行但此时频率寄存器还是上一次的旧值电机就会出现一次短暂的错误转速阶跃轻则设备抖一下重则直接过流报警。先频率后命令这是变频器通讯控制的铁律。第三步停止逻辑。X1按下直接写停止命令字5到2000HX1 - MOV K5 D102 X1 - MODWR K2 K1 H2000 D102停止的时候不需要先写频率为0因为变频器收到停止命令后会按照减速时间自己把速度降下来。你如果先把频率改成0再发停止命令变频器会直接自由停车对机械冲击很大。第四步运行监视。用一个1秒的时钟脉冲台达PLC里有自带的时间脉冲特殊继电器M10121秒周期每秒去读一次2101H和2102HM1012 - MODRD K2 K1 H2101 D110 M1012 - MODRD K2 K1 H2102 D120读回的值D110就是输出频率0.01Hz单位D120就是输出电流0.01A单位。触摸屏上绑定这两个寄存器除以100显示带两位小数的真实值即可。整套程序的核心逻辑就是一个频率寄存器、一个命令寄存器、两个监视寄存器。这套结构可以扩展到几乎所有变频器控制场景。加个反转就是写命令2加个故障复位就是写特定的命令值多段速就是多个频率切换写入。4.4 如果PLC型号老只能用RS指令怎么办有些老型号的台达PLC不支持MODRW这一类封装好的指令那就要用RS指令自己组报文。RS指令本质上就是把你要发送的一组数据放到发送缓冲区然后从接收缓冲区把收到的数据读回来。报文格式需要自己按Modbus RTU拼CRC校验也要自己算。这里给一个CRC16-Modbus校验的参考实现用的Python方便调试阶段用电脑模拟PLC发报文def crc16_modbus(data): crc 0xFFFF for byte in data: crc ^ byte for _ in range(8): if crc 1: crc (crc 1) ^ 0xA001 else: crc 1 return crc实际PLC程序里不用这么复杂。台达PLC有现成的CRC计算指令或者在程序设计阶段直接用MODRW封装指令就行。只有在做自定义通讯协议或者PLC型号确实不支持时才需要考虑手拼报文。大多数情况下封装指令够用了。5. 联机调试与常见问题排查5.1 上电前的检查清单联机调试之前先对照检查一遍能省下后面大量的排查时间。我自己调过太多套系统90%的问题都出在这几个低级项目上。第一站号检查。PLC程序里的从站号和变频器00-21设置的站号是否一致必须一字不差。第二波特率检查。PLC通讯设置和变频器00-22是否都是9600。很多时候你变频器设了19200PLC还是9600两边都在发数据但谁也收不到谁的话。第三数据格式检查。8-E-1还是8-N-1两边必须完全一致包括校验位和停止位。第四接线检查。A接AB接B公共地接了没有屏蔽层是不是单端接地。第五变频器频率来源和运转来源是否已经改成了通讯模式。这一条我反复强调因为它是“通讯正常但不动”的经典原因。还有一条很多人不注意变频器在本地键盘控制模式下即使通讯参数全对面板的RUN/STOP键也会优先占用运行权限。如果参数已经改成通讯控制那面板的RUN键就没用了这是正常的别误判成故障。5.2 用串口助手先验证变频器程序上机之前强烈建议先用USB转RS-485串口连接变频器发几条手动报文验证一下通道是否打通。这个习惯能帮你把问题范围从“PLC程序问题”缩小到“硬件和参数问题”。Modbus RTU报文有一个固定结构从站地址 功能码 数据 CRC校验。例如让1号站变频器停止的报文是01 06 20 00 00 05 CRC高 CRC低拆解一下01是从站地址06是Modbus功能码“写单个保持寄存器”20 00是寄存器地址2000H这里注意高位在前00 05是写入的数据0005H也就是停止命令最后两个字节是CRC16校验值。给1号站写入50.00Hz频率的报文是01 06 20 01 13 88 CRC高 CRC低20 01是寄存器地址2001H13 88是十六进制的5000也就是50.00Hz。注意写入的值不能超过变频器设定的最高频率否则变频器会报参数错误。在串口助手里发这些报文观察变频器有没有动作。如果变频器没有反应检查一下串口参数是不是9600/8-E-1确认485口和USB转485的A B有没有接反。如果收到了返回报文但格式错乱大概率是校验位设置不对。调试完确认变频器应答正常后再把485线从电脑换到PLC的COM2上。这个切换过程记得断电操作别热插拔485端子容易损坏收发芯片。5.3 常见问题速查表把我在现场踩过和帮别人排过的坑整理成一张表。问题现象可能原因处理方法变频器完全没反应A/B接反通讯口选错站号不一致检查接线确认COM2核对站号能写频率但电机不转频率来源或运转来源没设为通讯检查02-00和02-01参数偶尔通讯中断又恢复缺少公共地线屏蔽层两端接地补公共地屏蔽层单端接地一启动就通讯超时报警波特率不一致数据格式不匹配核对通讯参数设置频率写入值和实际转速差10倍频率单位选错0.1Hz和0.01Hz查变频器型号按手册换算停止时机械冲击大停止命令前先清了频率停止时直接写停止命令字触摸屏读到的电流值偏大电流比例系数错误确认2102H单位是0.01A换算显示通讯线一捆进线槽就报错动力线和通讯线同槽捆扎通讯线单独走线加屏蔽分开线槽PLC发数据时变频器偶尔收到乱码终端电阻缺失或波形反射通讯距离长时两端加120欧电阻上电通讯正常几分钟后失联变频器通讯超时停车设置检查00-24和00-25参数5.4 实操心得这套方案我做过的项目不算少从单台泵站的启停控制到几条输送线的联锁调速积累了一些实实在在的经验。调试顺序上我强烈建议“先读后写”。先把变频器的2101H输出频率读回来数据能正确显示说明通讯链路完全正常再去写2001H频率和2000H命令字。一上来就写命令如果写不进去你很难判断是链路问题还是参数问题。先读能打通说明链路和设备都没问题后面的写操作基本就是参数层面的核对。通讯周期上一个口带多台变频器时要算好总周期。每读一个寄存器大约需要20毫秒左右的报文往返时间8台变频器每台读2个寄存器一个周期就是320毫秒也就是说触摸屏上看到的电流值每300多毫秒才刷新一次。这个响应速度足够工艺监控但别指望用Modbus RTU做高速闭环同步那是伺服总线的活。程序里一定要做通讯故障检测。用每秒读频率的同一个扫描周期去判断一个心跳标志有没有翻转。如果连续两三秒都没读到频率值立即输出一个报警位触摸屏上弹“变频器通讯故障”同时把运行命令字清零。通讯断线的后果非常严重设备可能以最后的速度一直跑下去轻则产品报废重则机械损坏。有了故障检测断线后设备能自动停下来。参数备份上变频器调好后一定要做一次参数上传备份。台达VFD-M可以用面板或者软件把参数导出保存成文件下次再买一台同型号的直接灌回去省得一台台重新设。这种习惯在设备批量交付的时候特别重要一台台手输参数又慢又容易错一个00-22波特率输错了整批调试都得停工排查。最后再分享一个小技巧台达变频器的2002H和2003H寄存器是加减速时间可以在PLC的触摸屏上做成数值输入运行中动态调整加减速而不需要跑到变频器前面操作面板。特别是设备调试期间工艺人员经常要现场改加减速时间用通讯在线修改几秒钟就能生效比停机上电改参数痛快太多。不过注意有些机型运行中写加速时间是无效的必须在停机状态下修改这个细节看手册确认一下。
返回列表