三菱FX3G与E700变频器485通讯实战:Modbus RTU从接线到调试

发布时间:2026/10/16 8:48:25
三菱FX3G与E700变频器485通讯实战:Modbus RTU从接线到调试
前阵子接了一个产线改造的小项目核心就是标题里那句话三菱FX3G/FX3S和四台三菱E700变频器做485协议通讯。简单说就是用PLC的一条485总线把四台变频器的启停、频率给定、输出频率读取全部接管过来。这类需求在小型产线里非常普遍成本敏感又不值得上总线模块485通讯基本是最优解。这篇文章把我从硬件接线、参数设置、程序框架到实际调试踩坑的整个流程都整理出来给后面要碰三菱PLC和E700通讯的朋友做个参考尤其是那些对Modbus RTU不是特别熟又想快速把项目跑起来的同行。1. 项目需求与方案选型解析1.1 现场控制需求拆解这个项目最初的状态是四台E700变频器分别驱动四条小输送线每台变频器旁边有一个电位器做手动调速启动停止用端子开关控制。控制柜离设备本体有十几米远从柜子到现场拉了好几根0.75平方的控制电缆其中模拟量线最容易受干扰偶尔还出现电机转速漂移的问题。改造的目标很明确把四台变频器集中到触摸屏和PLC控制操作员在中控屏上选择每台电机的运行频率按下启动停止按钮同时要能看到每台电机的实际输出频率。拆开来看核心需求其实是三个远程给定频率、远程启停、运行状态监视。频率给定如果用模拟量每组需要一路模拟量输出加一路模拟量输入反馈四台就是八路线PLC点数不够而且布线复杂。改成485通讯之后物理上只需要一对双绞线串联四台变频器数据全在报文里走速度和反馈都能同时搞定。这个就是485方案最直接的价值。1.2 为什么选FX3G/FX3S加E700这套组合选PLC的时候其实纠结过FX3U和FX3G。FX3U综合性能更强但价格也高而且这个项目不需要高速计数、定位控制这些高级功能。FX3G和FX3S自带一个RS-485接口这是它们相比FX3U一个很实在的优势——FX3U本体不带485口要额外配一块FX3U-485ADP或者加BD板成本和安装步骤都上去了。FX3S更小巧适合点数要求不高的场合但这项目四台变频器需要扩展的IO不算少最后选了FX3G-24MR性价比和点数空间都合适。E700是三菱的轻负载小功率变频器设备上本来就在用所以没有换品牌的理由。E700支持Modbus RTU协议通讯参数可设最关键是它作为从站响应很规范用PLC的RS指令直接发Modbus帧就能控制不需要额外买网关。如果你手头是别的品牌变频器只要支持Modbus RTU这套思路同样适用区别主要在对寄存器地址表和功能码的理解上。1.3 485总线拓扑与轮询策略485通讯是半双工主从结构FX3G作为主站四台E700都是从站。从站不能主动发数据只能等主站点名。E700上电之后不会自己往总线上发东西主站问它一句它才回一句。这个机制有个好处总线不会冲突也不需要复杂的仲裁。我们只需要按顺序轮询每一个站号就够了。拓扑上采用手拉手的菊花链接法从PLC 485口出来先到1号机再从1号机串到2号机再到3号机、4号机。有人习惯从PLC分别拉四根线到每台变频器也就是星形接法这在485总线上是大忌线缆分支会产生反射距离一长数据就出错。总线两端还要考虑阻抗匹配一开始距离短没加终端电阻也没问题后来有一台变频器和其他设备拉开了距离信号偶发异常在首尾两端各加了120欧电阻就好了。这个后文会专门说。轮询策略上我没有用广播方式而是每台变频器独立执行写频率、写启停、读输出频率三个操作四台一共十二步循环。E700支持广播地址0但广播只适合所有设备同时执行同一个命令比如急停置停频率给定这种现场可能每台电机转速都不同的需求广播完全用不上。逐台轮询最稳妥一圈下来也就几百毫秒对输送线这种控制对象来说实时性完全够。2. 硬件接线与参数设置详解2.1 PLC端485口引出与接线FX3G本体自带的485接口在正面是一个圆形的通信座随机配了一根带端子台的引出线。端子台上有SDA、SDB、RDA、RDB、SG这五个关键点。这里有个很容易被绕晕的地方PLC的485接口其实是四线制RS-422风格有独立的发送线和接收线而E700通讯口既有四线也有两线接法实际工程中我们一般都只用两线制半双工所以必须做并线处理。并线方法是在PLC引出端子一侧把SDA和RDA短接在一起作为A端把SDB和RDB短接在一起作为B端SG作为信号地。如果直接用四根线分别接E700的SDA、SDB、RDA、RDB也能通但两线制更简洁且所有标准485设备都兼容。A端对应E700的S1正B端对应E700的S2负SG对应E700的S3屏蔽地。E700的通讯端子位置在控制回路端子的下方盖板内侧有接线示意图不同批次脚位标注可能有细微差异安装时以那幅图为准。我用的是0.5平方的屏蔽双绞线屏蔽层在PLC侧单端接到SG变频器那侧屏蔽层悬空不接避免形成地环路。早期我做这个项目时偷懒没接SG只接了两根信号线结果通讯时好时坏手摸到信号线时还会变化。后来把SG共地接上问题直接消失。这个地线不是可选项必须接。2.2 E700通讯参数设置E700的通讯相关参数主要分布在Pr.117到Pr.124这一组。四台变频器的站号分别设为1、2、3、4。具体设定如下表参数号设定值含义Pr.792外部运行模式运行指令来源为通讯端口Pr.1171~4通讯站号四台分别设1/2/3/4Pr.1181通讯速率9600bpsPr.1192数据格式8位数据、无校验、1停止位Pr.1202通讯超时时间单位0.1s即0.2sPr.1210通讯重试次数现场要求不要自行重试Pr.1230通讯等待时间Pr.1240数据帧末尾不加CR/LFPr.119这里特别容易踩坑。三菱变频器的数据格式设定里0是偶校验、1是奇校验、2才是无校验和很多国产设备“0代表8N1”的习惯不一样。如果PLC侧D8120配好了8N1E700这侧Pr.119却留在默认的0偶校验报文发过去全部石沉大海。我在现场见过太多这种案例通讯建不起来第一个查的地方不是接线而是Pr.119和PLC侧通讯格式必须一致。Pr.79的运行模式也很关键。如果只改通讯参数不改Pr.79运行指令从通讯口下发可能无效。设成2之后外部端子仍然可以控制紧急停止这个对安全非常重要。操作面板上的RUN键还能不能用实测设成2之后面板RUN键仍然可以启动但频率源如果由通讯给定面板给定就被覆盖。调试阶段我建议保留面板操作能力方便单台试机。2.3 PLC侧通讯格式D8120设置PLC侧所有串口通讯格式都集中在一个特殊数据寄存器D8120里。这个寄存器的值是十六进制位组合每一位对应一个通讯参数选择。我要用的配置是9600bps、8位数据、无校验、1位停止位、无协议通讯。在这个配置下D8120的常用值是H0005。为什么是这个值D8120的低4位是波特率9600对应二进制0101也就是0x5数据长度8位对应bit4、bit5都是0校验位bit6为0表示无校验停止位bit7为0表示1位停止位协议选择bit10、bit11保持00表示无协议通讯正好就用RS指令收发自由报文。这几个条件合在一起就是H0005。如果你的PLC手册里标注的位定义和我描述的有差异就以你手册位表重新算一遍。三菱早期FX系列的D8120定义基本一脉相承但严谨一点总没错。D8120的设置在程序初始化阶段用MOV指令写入比如上电开始脉冲后执行MOV H0005 D8120。注意D8120的值改变后串口通讯参数立刻生效但最好在PLC停止状态下设置再切换运行否则偶发通讯异常。设置完D8120还没完RS指令必须同时启用PLC的485口才会进入数据收发状态这个放在程序部分说。3. PLC程序构建从RS指令到轮询逻辑3.1 RS指令的发送接收机制三菱FX3G无协议通讯的核心指令是RS。RS指令在梯形图里的标准格式是RS D10 D0 D20 D0意思是从D10开始的寄存器作为发送数据区发送长度为D0指定的点数接收数据保存到D20开始的寄存器接收长度为D0指定的点数。RS指令本身的作用是“打开通讯通道并設定缓冲区”真正触发一次发送的是特殊辅助继电器M8122。把发送缓冲区填好数据后置位M8122PLC就会把缓冲区里的数据按照D8120配置的波特率格式发出去。发送完成后PLC自动复位M8122。对方应答数据到达后接收完成标志M8123会置位。程序处理完这些数据后必须手动复位M8123否则后续接收会被锁住。还有一个特殊继电器M8129是接收超时标志。E700作为从站响应速度很快正常情况下几十毫秒内数据就到齐了。但如果站号不对、总线开路或者报文错了主站就会一直等不到应答此时M8129会置位表示本次通讯超时。编程时要对M8129做处理否则程序会卡在一次失败的通讯里出不来。3.2 Modbus RTU报文生成与CRC16校验E700走的是Modbus RTU协议每条报文的格式很固定从站地址、功能码、数据区、CRC校验。比如要把站号1的变频器频率设定为50.00Hz报文是01 06 00 02 13 88 CRC低 CRC高。拆开看01从站地址对应1号变频器06功能码写单个寄存器00 02寄存器地址对应Modbus协议地址4000340001对应0x000040003就是0x000213 88要写入的数据0x1388等于十进制5000代表50.00Hz。我这里实测的项目中E700的40003寄存器按0.01Hz为单位标定5000就是50.00Hz。部分版本按0~16383对应0~400Hz标定50Hz就是2048。以你手上的E700通讯手册为准程序里换算系数按实际情况选一种。后面两个字节是CRC16校验码低字节在前。读输出频率的报文稍微不一样01 03 00 05 00 01 CRC低 CRC高。功能码03是读保持寄存器00 05是寄存器地址对应4000600 01表示读1个字。E700响应报文会返回01 03 02 数据高字节 数据低字节 CRC低 CRC高。其中02表示后面跟着2个字节数据。CRC16的计算方法网上很多但PLC里实现建议用查表法或者移位循环。我这里用移位法C语言思路如下crc 0xFFFF; for (i 0; i 报文长度; i) { crc ^ data[i]; for (j 0; j 8; j) { if (crc 0x0001) crc (crc 1) ^ 0xA001; else crc crc 1; } } // crc低字节放前面高字节放后面在FX3G梯形图里把这个算法写成子程序输入参数是报文首地址和长度输出CRC两个字节到指定寄存器。这一步如果直接用上位机软件算好CRC然后写死在程序里轮询逻辑就没法做。写一个通用CRC子程序后面的截获和发送都会轻松很多。3.3 四台变频器轮询状态机程序整体的思路是做一个简单的状态机用计数器D0作步号总共12步站1写频率、写启停、读频率站2同样三个动作一直到站4。每执行一个动作之后等接收完成然后再切到下一步。梯形图可以这样组织先用一个1秒时钟或定时器T0作为轮询节拍到达触发时间后把D0加1D0在0到11之间循环。然后用比较指令或DECO解码指令把D0的值对应到每步的功能代码。每一步里按照该步的预设参数把站号、功能码、寄存器地址、数据值填入发送缓冲区D10到D17然后调用CRC子程序把两个校验字节填入D18和D19最后SET M8122启动发送。发送完成后等M8123置位复位M8123再把D0加1继续下一步。这里有个编程习惯提醒不要在M8123置位后立即进行下一步发送哪怕E700响应再快也要给它留一点处理时间。我在每步切换后加了一个20ms的延时T0定时器实测下来稳定性比连续发要好很多。另外接收缓冲区D20到D27也是八个字节对应E700的响应帧。如果这一步是读频率那D22和D23里就是输出频率值的高低字节需要把这两个字节合并成一个16位数据实际频率寄存器值 D22高字节左移8位 位或 D23低字节。换算成实际频率时如果寄存器返回值是5000那么就是50.00Hz直接除以100。如果是16383标定换算公式就是400.00乘以寄存器值除以16383。3.4 程序框架示例为了看起来更直观我把一个站的动作拆成三个小步骤伪梯形图思路如下第一步写频率设定。发送缓冲区内容依次是站号D10、功能码06、寄存器地址高字节、寄存器地址低字节、频率值高字节、频率值低字节。这里的频率值要在写入前完成换算并拆成高低字节。第二步写运行指令。报文里数据区是目标运行指令比如0是停止1是正转2是反转。我项目的现场要求是操作员只按启动停止不涉及方向切换所以这个寄存器固定写1或写0。如果现场需要正反转切换建议在PLC侧做互锁不要直接转发触摸屏的原始指令要确保先写停止再写反向指令避免电机立即换向造成机械冲击。第三步读输出频率。功能码用03寄存器地址填00 05寄存器个数填00 01。收到响应后解析频率值存到D30触摸屏直接读D30显示。解析过程记得高低字节交换很多人在这里会栽跟头——寄存器返回的数据高字节在前而FX3G接收缓冲区里每个字节占一个D寄存器所以要把D22和D23交换组合不是直接读取一个D值。四条变频器就重复这个三连拍只是站号、数据区、存放结果地址不同。核心逻辑一旦跑通增加第五台变频器也就是照着已有的模板复制一遍改站号和寄存器地址而已。4. 调试实录参数核对、问题排查与稳定性优化4.1 调试流程先单台后总线拿到一个新系统千万不要直接四台变频器全挂上然后去调试程序。我习惯的顺序是先只挂一台把这台的通讯跑通确认读频率准确了再挂第二台、第三台。这样一旦出问题至少能确认是总线上后来的设备问题而不是第一台本身的配置问题。单台调试时用的工具很简单PLC程序先写一个手动测试模式通过M0到M3四个开关分别触发写频率、写运行指令、读频率、修改站号地址。比如置位M0程序就向1号变频器发送写50Hz的报文E700面板的三位数码管会直接显示50.00说明频率给定通道已经通了。再置位M2程序读回E700的输出频率把结果放到D30然后通过编程软件的监控表在线看D30的数值如果和面板一致读通道也通了。这个过程强烈建议用编程软件的在线监控功能。不要靠猜直接把D8120、M8122、M8123、M8129、发送缓冲区D10到D19、接收缓冲区D20到D27全部拉进监控窗口。发送一次看缓冲区数据是否符合预期尤其是CRC两个字节是否正确。E700如果不响应M8123不会置位而是M8129超时置位这时就可以锁定是发送端没收到响应而不是接收解析的问题。4.2 常见问题与排查方法第一个高频问题变频器完全不响应。排查顺序先看站号。PLC发的站号地址要和E700 Pr.117一致比如PLC发01E700 Pr.117必须是1。再看接线A和B有没有搞反。三菱的SDA/RDA并线后是A接E700的S1SDB/RDB并线后是B接E700的S2。如果并线时把SDA和SDB短接、RDA和RDB短接那就完全接反了信号电平乱套E700收不到有效数据。还要确认SG共地了没有我前面说过不接地就会偶发不响应。第二个高频问题发出去的报文E700收得到也响应了但响应帧解析出来数值不对。最常见原因是字节序弄反了。Modbus返回的数据高字节在前比如返回的16位频率值是0x1388接收缓冲区里看到的原始字节顺序是0x13、0x88合并时要按高字节乘以256加低字节来做。如果是低字节在前就是0x8813换算出来就是34835明显不对。还有一种是E700返回的响应前两个字节是站号和功能码第三个字节是数据字节数数据真正从第四个字节才开始解析时偏移搞错了就会把CRC当数据处理。第三个高频问题单台正常全部挂上后偶尔丢包或者某台时不时的超时。这基本就是总线物理层问题了。检查是不是所有设备都是手拉手接线有没有哪台是从中间又“挑”一根线出去的星形分支。分支会破坏总线阻抗特性在波特率9600下可能不明显但确实出现过。另外确认终端电阻总线超过十几米时首尾两端各接120欧电阻。我的项目里加完终端电阻后通讯异常基本绝迹。第四个问题CRC计算错误导致E700不响应。这个非常隐蔽因为PLC发出去的报文用监控工具看十六进制每一个字节都对但CRC是错的E700校验通不过直接丢弃报文。排查方法就是把E700收到的完整报文在电脑上用Modbus调试工具生成一遍标准的CRC然后和PLC发出来的CRC对一下。CRC低字节在前还是高字节在前也很容易搞反三菱E700要求低字节在前。4.3 让485通讯更稳定的实战经验通讯这块我在现场摸爬滚打总结了几条经验适用于所有RS485通讯场合。第一屏蔽双绞线的屏蔽层只能一端接地我习惯接在PLC侧的SG端子上另一头悬空。两头都接地容易形成地环路电流反而引入干扰。第二485信号线绝对不能和变频器的主回路动力线走同一个线槽尤其是输出侧到电机的电缆。如果现场条件受限必须并行信号线和动力线之间要留20厘米以上的间距或者用金属隔板隔开。第三PLC和变频器之间的0V参考电位要基本一致SG连线就是干这个的。跨设备供电时机房和现场的开关电源负极如果不连总线上的共模电压可能差出好几伏轻则乱码重则烧通讯口。还有一条程序层面的经验轮询周期要留余量。E700从站响应大约在0到20毫秒之间我每步之间加20毫秒延时一圈十二步大约500毫秒。触摸屏上显示的频率刷新大概一秒两次对于输送线调速来说体验已经很好了。如果有设备需要更快的响应可以把延时降到10毫秒但不要低于5毫秒否则E700来不及处理偶发超时会让人很头疼。5. 这套方案的进一步扩展空间项目收尾之后我回头复盘这套485通讯方案其实是三菱小PLC加变频器组合里最经典的控制架构。如果后续设备增加在FX3G的能力范围内可以考虑再加几台E700站号设为5、6、7就行轮询周期会相应拉长但8台以内完全可用。如果以后升级到三菱FX5U那玩法会更多。FX5U内置以太网口可以做Modbus TCP或者直接用三菱的SLMP协议编程方式和RS指令完全不同用自带功能块省事很多。但底层Modbus协议的理解完全通用你在FX3G上搞明白的功能码、寄存器地址、CRC校验换到FX5U一样用得上。还有一个实用扩展如果后期现场需要远程监控可以在485总线上并一个触摸屏或者串口服务器。触摸屏通常可以作为Modbus主站直接去读写E700不需要经过PLC这样即使PLC停机检修变频器数据也能在中控屏上显示。另一种方式是串口服务器把485转成网口后台组态软件直接采集变频器数据PLC只负责控制数据采集走独立通道两边互不干扰。我后来给这个项目就加了一个串口服务器做远程运维人在办公室就能看到每台变频器的运行频率和电流排查故障快了很多。最后再说一句三菱PLC的RS指令和Modbus RTU这套组合学会了就不会忘碰到任何支持Modbus协议的第三方设备都是同一个套路。