
一台台达ES系列PLC、一台英威腾GD系列变频器中间只牵一根两芯屏蔽线就要让电机按照工艺要求精确转起来。这种组合在中小型设备里太常见了——皮带输送线、风机水泵、简易多段速设备几乎每天都有同行在干这件事。前阵子我刚把一个通讯程序从调试完成的设备上拷出来整理趁热打铁写一篇完整复盘把从接线、寄存器配置到PLC侧程序、变频器侧功能码的全链路思路讲清楚。如果你手里正好是这两类设备或者正打算把继电器控制改成通讯控制这篇文章可以直接当参考笔记用。这个项目做的是典型的“一主一从”通讯台达ES系列PLC作为Modbus RTU主站英威腾GD系列变频器作为从站PLC通过RS-485口发指令完成启停、频率给定、运行状态监测。整套逻辑并不复杂但真正把它跑到稳定、可交付中间踩的坑一点不少。下面从为什么这么选型开始一步步拆开讲。1. 为什么这套组合需要“对话”选型与方案的底层逻辑1.1 台达ES系列和英威腾GD变频器在设备里各自扮演什么角色台达ES系列PLC典型型号如DVP-ES2是小型整体式PLC逻辑处理能力足够覆盖大多数单机设备控制IO点数从十几点到几十点都有性价比很高。英威腾GD系列变频器是通用型变频器覆盖0.75kW到几百kW的电机驱动功能码体系清晰Modbus通讯能力属于标配。这两个设备在一条产线里PLC干的是“大脑”的活变频器干的是“肌肉”的活二者之间需要高速、可靠地交换数据。如果用端子硬接线的方式要控制正转、反转、多段速、故障复位并且还要反馈运行频率、电流、故障代码那IO点数和布线量会非常难看。尤其是需要多段速或需要根据工艺实时调节频率的场景硬接线几乎不可行。通讯控制的价值就是把几十根线变成一对双绞线把“每加一个功能就要加一根线”的局面变成“改一行程序、改一个寄存器”的事。1.2 为什么Modbus RTU是这场通讯的默认答案市面上的工业设备PLC和变频器之间可选的通讯方式有各自厂家私有协议、ProfiBus、DeviceNet、CANopen、EtherCAT等。但回到台达ES系列和英威腾GD变频器这个组合最稳妥、最省事的方案基本就是Modbus RTU。原因很实际台达ES2系列本身内置的RS-485口就支持Modbus主站功能不需要额外扩展模块英威腾GD系列变频器出厂默认就带Modbus RTU从站能力。两边都有现成资源不用花钱买通讯卡不用折腾网关甚至不用安装额外的组态软件。Modbus RTU的报文格式极其直白调试时用一个串口助手就能抓包分析现场出了问题好查。当然如果你手头的是支持CANopen或EtherCAT的高端变频器那另说。但对于GD系列这类定位通用变频器的产品Modbus RTU就是成本、可靠性、可维护性三者折中后的最优解。1.3 这套程序要解决的核心问题这个项目需要解决的实际问题可以归纳成三个第一启停控制。包括正转、反转、停止以及故障复位。要求PLC侧按钮或上位机指令能够可靠地控制变频器的运行状态。第二频率给定。工艺要求随时可能变频率PLC要把目标频率值实时写给变频器变频器按这个值运行。第三状态监测。PLC要能读回变频器的当前运行状态、实际输出频率、输出电流用于显示、联锁或报警。后续在这个基础上还能扩展出多段速切换、PID联动、多台变频器组网等需求。但核心骨架就是这三件事通讯程序的设计也是围绕它们展开的。2. 通讯前的物理准备从接线到参数对表的完整过程2.1 RS-485的两根线怎么接才稳决定通讯成不成功第一个节点不是程序而是物理接线。RS-485是差分信号靠A、B两根线的电压差来传数据所以极性必须接对。台达ES系列的RS-485口具体端子标注要看端子排上的丝印或手册通常是D和D-。英威腾GD变频器侧通常是RS485和RS485-也可能标成A和B。最让人头疼的是“A/B”和“D/D-”这两套命名体系在不同厂家之间经常是反的。经验上如果一台设备上的A另一台设备上恰好对应D那极性反了不会烧东西只会导致通讯完全不通或者偶尔能通但丢包严重。所以调试第一步永远是确认两边定义一致而不是直接怀疑程序。连接方式上我用的是两芯屏蔽双绞线屏蔽层在PLC这一端单端接地另一端悬空。如果是走线槽里有变频器动力线、接触器控制线在旁边务必让屏蔽层全程完整不要在中途断开。线尽量短波特率9600时几十米没有问题超过50米建议加粗线径并考虑终端电阻。长度很短、就两三米的情况下两端我一般不加终端电阻也能跑稳定距离长、现场干扰重就在链路两端各并一只120Ω电阻。2.2 台达ES系列PLC通讯口参数的初设思路台达ES2系列的RS-485口默认是用作编程口还是通讯口不同批次、不同型号有差异。项目里我要把它当作Modbus主站用第一步就是把通讯口参数配置成和变频器侧一致的格式。ES2系列的通讯格式设置是通过向特殊寄存器写入配置字来完成的。我在这个项目中COM2RS-485口用的波特率是9600数据格式是RTU、8位数据、无校验、2停止位。用MOV指令在首次扫描时把格式字写进去。需要注意不同机型的特殊寄存器编号不完全相同具体以你手里那台PLC的《DVP-ES2操作手册-程序设计篇》里“特殊数据寄存器”附表为准我项目里用到的是D1050和D1051这两个位置WPLSoft设定界面里也能直接填。比写寄存器更省事的办法是用编程软件WPLSoft的“PLC设定”界面直接配置通讯参数把COM2设为Modbus RTU主站模式、波特率9600、数据格式8N2下载到PLC之后重启即可。两种办法殊途同归建议第一次上手就用软件界面配置至少不会把寄存器编号记错。2.3 英威腾GD变频器侧需要动哪几个功能码变频器侧的参数直接决定它愿不愿意听 PLC 的话。GD系列变频器功能码按组划分通讯相关的参数集中在某个“通讯组”里不同子型号组号可能有差异比如GD100、GD200、GD300之间会有编号变化。我调试时手上的设备是按以下思路来设置的功能码示例设定值作用P00.012频率给定来源选择通讯P00.182运行指令来源选择通讯P11.000通讯协议选Modbus RTUP11.011从站地址设为1P11.029600通讯波特率P11.032或3数据格式必须与PLC一致P11.0520通讯超时时间秒这里有一个关键逻辑P00.01和P00.18决定的是“谁说了算”。如果P00.18还停留在面板控制那PLC发多少启停指令都进不了变频器变频器只认面板上的RUN键如果P00.01还停留在面板电位器那PLC写给它的频率值不会生效。很多人调试通讯时写入没反应第一反应是寄存器地址不对实际上十有八九是这两个“指令源”没切过来。通讯超时时间P11.05这个参数容易被忽略。如果把它设为0可能意味着禁用通讯超时保护如果设得太短PLC一旦有几个周期没应答变频器就报通讯断线故障设备直接停机。项目里我习惯设为2到5秒既不会因为偶发干扰停机又能起到保护作用。3. 英威腾GD变频器的寄存器地图与读写策略3.1 控制字、设定频率、状态字到底放在哪里Modbus通讯的关键是搞清楚变频器把“运行控制”“频率设定”“状态反馈”这些数据映射到哪些寄存器地址上。英威腾GD系列的寄存器分配在不同型号、不同固件版本之间会有调整但我调试过的设备映射逻辑基本是按照“控制类寄存器一组、运行状态寄存器一组、功能码寄存器一组”来划分的。项目里用到的寄存器地址整理出来大致是寄存器地址示例内容说明0x2000运行控制字bit0正转命令bit1反转命令等0x2001设定频率单位通常为0.01Hz0x2100状态字bit0运行中bit1正转bit2反转等待0x2101当前运行频率单位通常为0.01Hz0x2102输出电流单位通常为0.1A0x2103母线电压单位通常为0.1V0xF000功能码功能码寄存器通过Modbus直接读写P组参数这里特别提醒一句不要拿我这套地址当绝对标准去对号入座。每家每代的协议版本可能调整地址调试前一定翻变频器附带的《通讯协议手册》或《功能码表》里的寄存器分配章节。我就遇到过同系列不同功率、不同固件版本寄存器地址整体偏移的情况。3.2 读写该用哪个功能码H03、H06、H10的分工Modbus RTU里功能码决定了这次报文是干嘛的。在台达ES2的MBUS_R和MBUS_W指令里功能码是直接作为参数写进去的我用过的几个功能码总结如下H01读线圈状态用来读变频器的开关量输出端子状态。实际项目中我很少用因为状态字里已经够了。H03读保持寄存器读取状态字、当前频率、输出电流这些运行参数用这个。H06写单个保持寄存器写控制字、写设定频率这类单点写入用这个。H10写多个连续寄存器如果需要一次下发多段速的一组参数可以用这个。所以在这个项目里读侧一律用H03配合起始地址和读取长度写侧用H06每次写一个寄存器。比如发正转命令就是往0x2000地址写一个控制字值。如果需要同时写控制字和设定频率理论上也可以用H10一次写两个连续寄存器但调试时为了排查方便我分成了两条H06指令一条管运行命令一条管频率出问题好定位。3.3 数据单位的陷阱0.01Hz和十进制转换写频率和读频率时最容易栽在单位换算上。英威腾GD系列的频率寄存器常见的单位是0.01Hz也就是说你要设定30.00Hz实际写入的值是3000。如果直接用30去写变频器理解为0.30Hz电机几乎不转你还会以为是通讯坏了。项目里我在PLC侧专门开了几个寄存器做换算。目标频率的整数部分和小数部分分离处理比如上位机给出频率值30.00Hz在PLC里运算得到3000再通过MBUS_W写到0x2001。读回状态字里的当前运行频率同样也是0.01Hz单位读回3000时要显示成30.00Hz需要反向除以100。这个换算逻辑写清楚输出到触摸屏上才不会再出“频率显示差两个小数点”的尴尬问题。4. 台达ES系列PLC的MBUS指令实战4.1 MBUS_R和MBUS_W的正确触发方式台达ES2系列的MBUS指令最容易用错的地方是触发方式。MBUS_R和MBUS_W都属于“一触发就执行一次”的指令不能用常ON接点去驱动。如果前面接的是常ON触点PLC会周期性、满负荷地连续发送通讯请求一方面把变频器请求队列塞满另一方面现场通讯指示灯会亮成一片看着就头大。正确做法是给MBUS指令一个上升沿脉冲触发。我通常用PLS或者直接用按钮X触点的上升沿来产生一个扫描周期的脉冲驱动MBUS执行一次。执行完成之后通过错误码寄存器和完成标志来判断这轮请求是否成功然后再决定下一步。MBUS_R的基本操作数结构是“从站地址、功能码、起始地址、读取长度、数据存放起始寄存器、错误码寄存器”。比如读从站1的状态字和当前频率写法大致是// 读从站1的0x2100开始连续2个寄存器数据存到D100 LD M0 PLS M100 LD M100 MBUS_R H1 H03 H2100 K2 D100 D0其中H1是从站地址H03是读保持寄存器功能码H2100是起始地址K2表示读2个寄存器D100是存放数据的起始寄存器D0是错误码寄存器。MBUS_W的写法类似核心是把“要写的数据”准备好放到一个寄存器里再告诉指令写到哪个地址。比如写正转命令// 把正转控制字H0001放到D50 MOV H1 D50 LD M1 PLS M110 LD M110 MBUS_W H1 H06 H2000 K1 D50 D2这里D50里放的是要写入的数据H2000是目标寄存器地址写完之后的完成状态和错误码在D2里体现。程序里建议在MBUS指令前加通讯忙标志避免上一次请求还没结束又发下一次。4.2 一个可套用的启停加频率设定加状态监测框架把上面的指令组合起来就是一套完整的通讯控制框架。初始化部分在首次扫描时配置好COM2的通讯参数。然后主程序里分三块读状态、写命令、写频率。初始化片段// 首次扫描M1002 LD M1002 MOV H98 D1050 // COM2通讯格式RTU8位无校验2停止位寄存器编号以手册为准 MOV K9600 D1051 // 波特率9600 SET M0 // 启动周期读脉冲周期读状态片段用定时器产生周期脉冲每200ms读一次变频器的状态字和当前运行频率// 定时器T0产生200ms周期脉冲 LD M0 ANI T0 OUT T0 K200 LD T0 PLS M100 LD M100 ANI M200 // 写请求繁忙时暂停读请求 MBUS_R H1 H03 H2100 K2 D100 D0 // D100状态字 D101当前频率正转、反转、停止按钮的处理// X0正转按钮 LD X0 OR M200 ANI M201 ANI M202 OUT M200 LD M200 PLS M210 LD M210 MOV K1 D50 // 控制字正转 MBUS_W H1 H06 H2000 K1 D50 D2 // X1反转按钮类似处理控制字2 // X2停止按钮控制字0频率设定D60为目标频率值已经乘过100单位0.01Hz// 频率设定值有变化时触发一次写请求 LD M0 ANI M202 PLF M220 LD M220 MBUS_W H1 H06 H2001 K1 D60 D2这套框架的核心思路是读和写分开调度写请求期间读请求让路避免同一时刻出现两个在途的Modbus请求。实际跑下来一个200ms的读周期足够触摸屏刷新显示启停和频率设定是人手操作级别响应完全够用。4.3 轮询时序设计为什么重要很多初学PLC通讯的人容易忽略时序问题。Modbus RTU是半双工的同一时刻主站只能发一个请求等不到从站应答前不能发第二个。如果PLC程序里同时触发了MBUS_R和MBUS_W两条指令都开始执行报文就会在RS-485线上打架表现为“偶尔能通偶尔不通”错误码随机跳动。我的做法是用通讯忙标志寄存器做互锁。M200代表正转请求正在进行M201代表反转请求正在进行M202代表频率写请求正在进行。任何一个写操作没完成读操作都暂停写操作之间也互相错开。再加上请求之前检查远程设备的应答状态程序逻辑就非常稳了。5. 现场调试踩过的坑完整排查链路复现5.1 写入没反应先查“指令源”再查寄存器地址通讯调不通或者“写不进去”的时候不要急着改程序、换寄存器地址。我把它归纳成一套固定的排查顺序按顺序走基本都能找到问题。第一步看指示灯和菜单。英威腾GD变频器在通讯正常时面板或者指定功能码里能观察到从站通讯状态。如果PLC发的请求变频器根本收不到变频器侧就是完全没动静。这时候先量A/B线电压确认不是接线断路或极性反。空闲状态下A-B之间的电压正常在1.5V到5V之间如果测出来几乎为0线都没接对。第二步用串口助手单独测变频器。把USB转RS485的转换器直接连到变频器通讯端子上在电脑上发一条简单的Modbus RTU报文比如读状态字的03功能码请求看变频器有没有响应帧。如果电脑能读到数据说明变频器侧从站响应机制正常问题在PLC或PLC参数如果电脑也读不到说明变频器侧接线、从站地址、波特率格式三者之一仍然没对上。第三步回到PLC在线监视MBUS_R的D0错误码。台达ES2的MBUS指令错误码有明确含义比如0是正常其他值对应通讯无响应、CRC错误、功能码不支持等。看到错误码再去翻手册对应的故障定义很快能缩小范围。我在这类项目里遇到最多次的“写入没反应”最后都是同一个原因变频器的运行指令源没切到通讯P00.18还停在面板控制或者频率源P00.01还停在外端子。PLC这边每一帧报文其实都收到了变频器也回了正常应答但它就是“不接受命令”因为指令源根本轮不到通讯口。5.2 数据能读不能写功能码和写权限的坑有段时间调试时读取状态字和当前频率都很正常触摸屏上数据一直跳但一按启动按钮变频器就是不动。PLC在线监视发现MBUS_W的错误码一直在报错读功能完全没问题。后来顺着错误码查发现问题是写的时候用了不对的功能码。有些场合为了“省事”想把控制字和频率一起写用了H10写多个寄存器但变频器协议规定这两个寄存器不在同一个连续可写区块里H10请求被从站拒绝。换成H06分别写后就一切正常。另外还有一种情况是寄存器本身是只读的。比如有些人会把当前运行频率当成设定频率去写变频器返回异常响应。所以写之前一定要确认目标地址在协议表里标注的是“可读可写”而不是“只读”。5.3 通讯时断时续干扰、接地、终端电阻三板斧程序跑通之后碰到的最恼人的问题是通讯间歇性失败。可能连续正常通信几个小时然后突然报一次通讯故障过一会又自己恢复了。我处理这个问题的排查链路是这样的先看布线。通讯线是不是和变频器输出动力线走在了同一个线槽里变频器输出侧是高频PWM波形干扰耦合进RS-485线是常见原因。解决办法是把通讯线单独走线或者至少在靠近变频器侧的那一段和动力线保持20厘米以上间距。如果实在无法避免平行走线第一方案是换屏蔽层质量好的双绞线且屏蔽层单端可靠接地。再看屏蔽层接地方式。屏蔽层两端都接地容易形成地环路电流反而引入干扰只有一端接地又没接好屏蔽效果近乎为零。项目里的标准做法是屏蔽层在PLC侧或控制柜内做一个单点接地接地点要干净不是和变频器接地端子串在一起。最后是终端电阻。现场距离长、波特率又拉高了之后信号反射会明显导致误码。我在链路两端各并了120Ω电阻通讯误码率明显下降。如果距离短不加电阻也没问题一旦加了电阻记得两个端都要加只加一端反而会破坏匹配。5.4 现场调试的辅助工具清单排查通讯问题我手里长期维持这几样工具USB转RS-485转换器、一台装有串口调试助手的笔记本、一只万用表、还有一个带公头母头的DB9/端子转接头方便临时接线。电脑侧先用Modbus调试工具直接模拟主站和变频器单独对话确认从站侧没问题再切换到PLC作为主站。这个“先电脑后PLC”的顺序能帮你把问题干净地切到单个设备侧减少两头猜的情况。6. 这套通讯程序的扩展思路与现场实用备忘6.1 单机变多机从站地址轮询与请求队列这套程序如果只带一台变频器逻辑上就是“一个从站地址固定”。但如果一条线上挂了五台变频器主站就不能只对一个地址发请求了必须做地址轮询。常见做法是用一个轮询计数器把要读的从站地址依次放进MBUS_R的S1参数。每完成一轮读请求计数器加一指向下一台变频器。这样PLC就能一台一台轮流采集数据。需要注意的是读多台和读一台不一样通讯周期要重新评估。比如原来200ms读一次现在五台就是五倍时间触摸屏数据刷新会变慢这是正常现象。6.2 实用扩展故障复位、多段速与累计运行时间在启停、频率、状态监测这套核心功能跑稳定之后我通常会顺手把下面几个功能补进去成本很低但现场使用体验提升很大。故障复位变频器报故障后通过Modbus往控制字里写一个故障复位位PLC就可以远程复位不用跑到柜子面前按面板。这个功能对无人值守设备很重要。多段速工艺需要几档固定速度时可以提前在PLC程序里设定好各档目标频率端子或触摸屏选择档位PLC自动向0x2001发对应的频率值。这比用变频器自带多段速端子更灵活改参数不用跑现场。累计运行时间从状态字里判断运行位PLC内部累计变频器的运行时间用于提醒保养和检修。这个功能对后期维护很有价值。6.3 我在现场一定会做的工作清单最后把我实际做这类项目时必做的几件事列出来当成一张备忘清单一并给到大家第一抄录功能码表。调试前把变频器的铭牌型号、固件版本、通讯相关功能码原始值抄一遍改完参数再抄一遍留下纸质记录。现场设备多的时候这张纸比内存里的记忆可靠得多。第二记录寄存器地址。把实际测试过有效的控制字地址、设定频率地址、状态字地址记在程序注释里并标注单位。我见过太多人换个项目重新翻手册查地址浪费大量时间。第三备份程序。PLC程序和变频器参数都导出一份备份归档到项目文件夹。变频器的参数备份尤其容易被忽略一旦有人误操作恢复出厂设置没有备份就得重头一个个敲参数。第四打通讯测试记录。完成全部功能测试后把启停响应时间、通讯失败次数、诊断错误码记录成表格作为项目验收资料。这套做法在我后续的维护工作中帮了大忙。从接线到寄存器从MBUS指令到功能码这一套跑下来台达ES系列和英威腾GD变频器之间的通讯就已经被完全摸透了。项目本身不大但把每一个“为什么”想清楚、把每一次排查的过程走完整以后再遇到类似设备组合半天时间就能把通讯跑通。希望这篇复盘能帮你少走一些我走过的弯路。