三菱FX3U PLC与FR-E700变频器Modbus RTU通讯改造详解

发布时间:2026/10/20 18:59:03
三菱FX3U PLC与FR-E700变频器Modbus RTU通讯改造详解 做电气调试这些年PLC和变频器之间的通讯改造是一项高频需求。最近刚完成了一套三菱FX3U PLC与三菱FR-E700变频器的Modbus RTU通讯项目实现启停、正反转、频率给定和运行频率读取。这类方案在小型自动化设备、风机水泵控制、输送线改造里出现频率很高今天把整个过程中涉及的关键点完整梳理一遍包括硬件接线、参数设置、报文格式、梯形图编程思路以及现场踩过的几个坑给准备做相似项目的同行一个可复现的参考。规模不大但麻雀虽小五脏俱全。这套方案适合有PLC基础但还没完整做过Modbus通讯的朋友也适合老手用来对照自己的接线习惯和参数选择。文章不会绕弯子直接把能落地的部分讲透。1. 项目需求拆解为什么选Modbus RTU而不是模拟量1.1 这套控制需求需要哪些功能这次的项目场景是一台小型传送装置原系统用的是端子启停加变频器面板电位器调速。用户提出改造要求中控室需要远程启动、停止电机远程给定运行频率同时要把变频器当前的输出频率送回中控显示。拆开看需求就四件事启动、停止、频率写入、频率读取。如果只做一两个功能用硬接线也能凑合但四件事一起做接线数量就会明显增加。启动一个继电器、停止一个继电器、方向再一个继电器频率给定要么加一块模拟量输出模块要么加一块模拟量输入模块反馈实际频率算下来端子排上一大片线而且模拟量信号在动力线附近容易受干扰精度也一般。Modbus RTU方案一根双绞线全部搞定启停指令、频率指令、状态监视都走同一对线信息量大得多还方便以后扩展。现场两台设备距离不足十米传送带本身对实时性要求不高响应时间在几十毫秒以内完全够用因此串行通讯完全能满足。1.2 通讯方式对比与选型理由接触三菱系统的人都知道FX3U和变频器之间通讯有几种常见路线。一是直接用三菱专用协议比如通过PLC的通讯口用专用指令和变频器交互稳定性好但指令体系相对封闭换非三菱设备就玩不转。二是用CC-Link现场总线需要加通讯模块和从站模块成本高、接线多适合多台变频器集中控制单台场景优势不大。三是Modbus RTU这是变频器出厂就支持的标准协议三菱FR-E700全系列都带RS485端子PLC侧用无协议通讯指令RS自己拼报文不需要额外买总线模块。选型时我倾向于Modbus RTU核心原因是通用性。以后哪怕项目里换一台国产变频器只要支持Modbus RTU程序改动量很小只改寄存器地址和数据单位就行。而专用协议换设备就得推翻重来。需要补充的是三菱FX3U本体不带串口必须加一块通讯扩展。常用的是FX3U-485-BD直接插在PLC主机正面的扩展口上不占左侧总线位置安装非常紧凑。另一种是FX3U-485ADP挂在PLC左侧扩展总线上带可插拔端子排现场拆线方便抗震动也更好。这次因为控制柜空间不大但希望预留调试操作空间选的是FX3U-485ADP。两者在编程上没有本质区别D8120、RS指令、M8122/M8123这些控制字完全一样后面的内容两者都适用。2. 硬件选型与485接线全程记录2.1 硬件清单与选型理由本次项目实际用到的硬件如下器件型号作用PLC三菱FX3U-48MR/ES主站控制器通讯适配器三菱FX3U-485ADP将PLC变成Modbus RTU主站变频器三菱FR-E740-0.75K-CHT从站设备通讯线屏蔽双绞线特性阻抗120Ω左右物理链路终端电阻110Ω现场按需接入抑制信号反射通讯适配器是必须的FX3U本体上那个编程口不能直接拿来当自由通讯口用。如果选FX3U-485-BD价格便宜安装时直接插在PLC盖板下的扩展口插好后拧紧固定螺丝。FX3U-485ADP则需要通过扩展电缆连接安装后要确认左侧总线连接器接触良好。变频器这侧不需要额外买通讯板FR-E700系列本体就带一个RS485端子排拧开面板盖板就能看到一般标注SDA、SDB、RDA、RDB、SG。老款的FR-E500系列有些需要另加FR-E5NC通讯选件选型时要先确认变频器型号再定硬件方案。通讯线建议选标称特性阻抗120欧姆的屏蔽双绞线市面上常见的西门子PROFIBUS电缆、RS485专用电缆都可以用。普通网线虽然是双绞结构但特性阻抗一般是100欧姆短距离也能跑不过长度超过二三十米后可靠性会下降不建议冒险。2.2 通讯线怎么接交叉对接与屏蔽接地RS485接线口诀是收发交叉、信号地相连、屏蔽单端接地。FX3U-485ADP的端子标记和FR-E700端子排的对应关系如下PLC侧FX3U-485ADP变频器侧FR-E700SDARDASDBRDBRDASDARDBSDBSGSG很多第一次做的人在这里容易搞混。理论上RS485是半双工总线一根A一根B就够了但三菱的485端子拆成了两组一组发送一组接收。接的时候一定要让PLC的发送对变频器的接收PLC的接收对变频器的发送。如果接成SDA对SDASDB对SDB从物理上讲A、B极性其实是一致的但三菱明确要求交叉接法按端子功能来对接更稳妥。SG是信号地必须接。如果不接两边的地电位差可能会导致通讯失败或在总线上产生共模干扰。屏蔽层手头有就接上接FG或者PE端子都行核心原则是单端接地。两头都接地容易形成地环流反而引入干扰。实操中我习惯把通讯线和动力线分开走线槽至少保持20厘米以上间距尤其是变频器输出侧到电机的那段动力电缆干扰非常强。如果实在无法避开可以给通讯线加磁环或者换更高等级的屏蔽双绞线。2.3 终端电阻与拨码开关细节终端电阻的原理不复杂高速信号在传输线末端如果遇到阻抗突变会反射导致波形畸变终端电阻的作用就是把末端阻抗匹配上去吸收反射。单台PLC带一台变频器、线长不超过十米时终端电阻可以不接现场实测波形没问题。但如果距离超过三十米或者将来总线上可能挂多台从站就要把终端电阻设置在物理总线两端。以FX3U-485ADP为例模块上有终端电阻选择开关拨到ON位置就自动接入终端电阻总线最远端的设备同样要拨ON中间设备保持OFF。FR-E700变频器的RS485端子排旁边也有一个终端电阻选择开关如果这台变频器是总线上最后一台设备也把它拨到ON。现场最容易犯的错是两头都不拨或者把中间的设备也拨了。中间设备接入终端电阻会让信号波形明显变形轻则偶发通讯失败重则完全连不通。尤其多台变频器组网时检查终端电阻设置应该是第一排查项。3. 变频器和PLC参数设置是通讯的关键3.1 变频器侧参数逐项设置三菱FR-E700变频器支持Modbus RTU通讯但默认参数并不一定能直接配合PLC必须逐项核对。我现场设置的参数如下参数编号设定值含义Pr.790运行模式设为外部/PU切换模式允许通讯控制Pr.1171从站号范围0~247报文里的地址要和这里一致Pr.11896通讯速率9600bps与PLC侧匹配Pr.1192数据格式8位数据、偶校验、1位停止位Pr.1201通讯重试次数出现瞬时干扰后自动恢复Pr.1219999不校验通讯数据避免异常时频繁报警Pr.1220通讯等待时间收到指令后立即响应Pr.1230CR/LF选择为无报文不带回车换行Pr.79是第一个容易踩坑的参数。三菱变频器出厂默认可能是面板运行模式在这个模式下Modbus报文即使正确发送过去频率和启停也可能不生效。Pr.79设为0之后外部端子、面板、通讯都可以作为控制来源实际测试中通讯指令可以正常控制启停和频率。如果某些机型固件版本不同也可以尝试Pr.79设为7即网络运行模式具体以该机型手册为准。Pr.117站号决定了这台变频器在总线上的身份。单台从站时站号可以随便设一般习惯设1。如果后面还要扩展多台站号必须唯一不能和别的变频器重复。Pr.118和Pr.119必须和PLC的D8120设置严格保持一致否则物理连上也无法通信。这里有一个排查逻辑如果完全无响应先检查站号和接线如果偶尔响应但数据乱码先检查波特率和校验位。3.2 PLC的D8120通讯格式怎么定FX3U的RS指令需要通过特殊数据寄存器D8120设定通讯格式。D8120是一个16位寄存器每一位组合决定了数据长度、校验位、停止位、波特率以及是否带帧头帧尾。手册里有一张完整的位定义表这里只说最常用的配置。常见组合如下通讯格式D8120值8位数据、无校验、1停止位、9600bpsH0C818位数据、偶校验、1停止位、9600bpsH0C878位数据、无校验、1停止位、19200bpsH0C89本次变频器Pr.119设为2对应8位数据、偶校验、1停止位所以PLC侧D8120设为H0C87两边严格对应。D8120的设置在程序中一般放在初始化段用MOV指令写入。需要注意的细节是D8120的修改在RS指令没有激活时才能生效。如果现场修改后发现通讯格式没变多半是程序还在循环执行RS指令需要先停止发送或重新上电后再写入。3.3 寄存器地址表与数据单位约定Modbus RTU报文里操作的是寄存器地址三菱变频器的寄存器映射有一套自己的规则。FR-E700系列常用地址如下寄存器十六进制地址对应Modbus地址功能读写属性2000H40001运行指令停止/正转/反转写2001H40002频率设定写2100H40003运行频率监视读2101H40004直流母线电压监视读2103H40006输出电流监视读这里最需要注意的单位换算。频率相关寄存器内部采用的是0.01Hz单位也就是说50Hz要写5000对应十六进制0x1388。很多人在现场抓破脑袋发现频率写不进去一看指令里写的是50变频器认为是要设定0.5Hz自然看不到反应。运行指令寄存器2000H的写入值0表示停止1表示正转2表示反转。写1到2000H电机正转启动写0电机停止写2电机反转。寸动功能对应3和4普通调速项目用不到。注意这个寄存器是线圈性质每次状态变化都要重新写入一次程序里要避免用一个常ON的置位信号反复触发否则变频器可能无法识别状态变化。4. 梯形图编程RS指令、报文与CRC校验4.1 RS指令的用法与缓冲区分配FX3U通过RS指令做无协议通讯。RS指令的格式是四条操作数RS 发送缓冲区首地址 发送字节数 接收缓冲区首地址 接收字节数以本次案例为例程序初始化段这样写LD M8000 RS D0 K8 D100 K8含义是发送缓冲区从D0开始连续8个字节接收缓冲区从D100开始连续8个字节。M8000是特殊辅助继电器PLC运行时一直为ONRS指令常开驱动。解释一下为什么用K8。读频率的报文长度是8个字节响应也是8个字节所以缓冲区都设成8。如果用RS指令和其他非标准设备通讯缓冲区长度必须大于等于实际收发字节数否则数据会截断或越界。发送完成后有一个标志位M8122。需要发送数据时先把报文逐字节写入D0到D7然后把M8122置1RS指令自动把缓冲区里的数据发出去。发送完成之后M8122会自己复位不需要手动清零。接收完成标志是M8123。从站响应到达后M8123变为ON此时必须立刻从D100开始读取接收数据然后把M8123手动复位。如果不复位下一次响应到来时这个标志无法正常触发逻辑就会卡住。我见过不少新手程序卡死在这里其实就是忘了复位M8123。4.2 Modbus报文构造与CRC16计算Modbus RTU报文的格式比较简单地址码、功能码、数据区、CRC校验。以站号1为例读取运行频率的报文如下01 03 21 00 00 01 CRC_L CRC_H逐字节拆解01从站地址对应变频器Pr.117的值03功能码表示读保持寄存器21 00寄存器地址2100H即运行频率监视00 01读取1个字CRC_L、CRC_HCRC16校验值低字节和高字节写启动正转的报文01 06 20 00 00 01 CRC_L CRC_H功能码06表示写单个寄存器地址2000H写入值0001即正转。写停止就是把0001改成0000。写频率50Hz的报文01 06 20 01 13 88 CRC_L CRC_H地址2001H是频率设定寄存器数据1388H就是十进制5000对应50.00Hz。CRC16是Modbus RTU最核心的计算环节。标准算法是初值0xFFFF对每个字节与CRC低8位异或然后右移8次每次检测最低位如果为1就和多项式0xA001异或。用C语言描述最直观unsigned int calc_crc(unsigned char *data, unsigned int len) { unsigned int crc 0xFFFF; unsigned int i, j; for (i 0; i len; i) { crc ^ data[i]; for (j 0; j 8; j) { if (crc 1) crc (crc 1) ^ 0xA001; else crc 1; } } return crc; }在三菱梯形图里实现这个算法思路是把报文长度做成FOR循环内部再做一个8次的移位循环用变址寄存器Z逐个访问发送缓冲区字节XOR指令做异或右移指令ROR处理移位。很多工程师手头也攒了现成的CRC子程序这里不贴完整梯形图但给一个关键处理顺序先将CRC初值0xFFFF存入寄存器取报文的第一个字节与CRC低8位异或重复8次判断低位移出值右移一位若低位为1则异或0xA001换下一个字节重复第3步全部处理完后低字节放在后面高字节放在前面报文发送时CRC低字节在前、高字节在后初学者很容易放反。我一开始也栽过这个跟头测试的时候一边看监视窗口一边抓头发后来把所有报文的CRC值打印出来对比才发现是高低字节顺序反了。4.3 读频率的完整编程思路以读取运行频率为例完整的梯形图逻辑可以这样拆解。第一步组装报文。把8个字节写入D0到D7LD M10 MOV K1 D0 // 站号 MOV K3 D1 // 功能码03 MOV H21 D2 // 寄存器地址高字节 MOV H00 D3 // 寄存器地址低字节 MOV K0 D4 // 寄存器数量高字节 MOV K1 D5 // 寄存器数量低字节 CALL P0 // 调用CRC子程序 MOV D30 D6 // CRC低字节 MOV D31 D7 // CRC高字节第二步触发发送。报文组装完成后置位M8122SET M8122第三步等待响应。M8123变为ON表示接收完成然后解析数据LD M8123 MOV D103 D40 // 响应数据高字节 MOV D104 D41 // 响应数据低字节 RST M8123 // 复位接收完成标志注意接收缓冲区的对应关系站号在D100功能码在D101字节数在D102数据高字节在D103数据低字节在D104。对功能码03的响应D102恒定等于2表示后面跟2个字节的数据。读出来的频率数据单位是0.01Hz。如果把D103和D104拼成一个16位整数得到5000对应的就是50.00Hz。在触摸屏或上位机显示时除以100加两位小数即可。第四步加入轮询。程序不能一直发读频率请求PLC的扫描周期太快连续发送会让总线拥塞。我用一个时间定时器做轮询每200毫秒发一次读频率命令中间留足变频器响应时间。200毫秒对显示刷新来说足够流畅对总线负载来说又不会太高。实际项目里如果需要同时读多个数据比如频率、电流、电压可以做成轮流发送的方式每拍发一个读指令读完一个再读下一个。4.4 多台变频器轮询时的时序安排如果总线上挂了多台变频器轮询逻辑会稍微复杂一些但原理相通。每台从站按站号区分PLC一次性只能处理一个RS事务所以必须一个一个问。建议的轮询节奏是给每一台从站分配一个固定的发送窗口窗口内完成一帧报文的发送和响应接收完成后等10到20毫秒再进入下一台。三菱变频器的Modbus响应时间通常在10毫秒以内特殊情况下可能到几十毫秒所以相邻两帧之间的间隔建议至少20毫秒避免上一台还没响应完下一台的命令就到了导致数据错乱。多台设备调试时还有一个规律一次只修改一个变量。先把站号1调通再依次验证站号2、3不要一次性全部配好然后挨个猜问题。我自己调过多台组网的现场最有效的调试方式永远是从单台开始。5. 现场踩坑记录与排查方法5.1 通讯完全没响应通讯完全没响应是最常见的问题表现为程序里M8123从来没置1用监控软件看接收缓冲区全部是0变频器面板也不显示任何通讯异常。排查顺序建议按下面这个表来排查项操作方法接线极性核对SDA/RDA/SDB/RDB是否交叉对应站号变频器Pr.117必须和报文第一个字节一致波特率变频器Pr.118必须和PLC的D8120一致数据格式校验位、停止位两边必须相同终端电阻总线两端电阻设置是否正确变频器状态变频器是否报警故障、是否处于运行保护状态这里特别提变频器故障状态。有一次在现场怎么调都没响应最后发现变频器面板显示过流报警处于故障锁定状态。这种状态下变频器的通讯从站可能会拒绝响应命令参数和接线查了一遍也没发现问题。故障复位后通讯立即恢复正常。所以通讯无响应的第一件事可以改成看一眼变频器面板有没有报警比拿万用表量线快得多。5.2 数据乱码和CRC错误现象是偶尔能收到响应但接收缓冲区里的数据和预期不一致或者程序在CRC校验之后直接丢弃数据。多数情况下是波特率或校验位设置不一致。比如PLC设9600bps变频器还在19200bps通讯仍然会存在某种程度的数据交互但内容全是乱的。这时候不要怀疑人生先把两边通讯速率拿出来对比。另一个常见原因是变频器的停止位设置和PLC不一致比如PLC是1位停止变频器设了2位停止同样会乱码。干扰导致的乱码也有份。通讯线和动力线同槽走线时变频器输出侧的载波频率会产生强电磁干扰传输距离稍长就会出现偶发CRC错误。解决方法是通讯线远离动力线屏蔽层可靠单端接地必要时把变频器载波频率参数调低一点。区分干扰和数据格式问题有个技巧把通讯线短接直接放在同一个柜内如果乱码消失说明是线路干扰如果依旧乱码说明是参数不匹配。5.3 频率写不进去启动和停止都正常唯独频率写进去没反应。这种问题最典型的根源是单位错误报文写入的数据应该是Hz数值乘以10050Hz对应5000而不是50。建议先在仿真或监控里把写入值打出来看一眼如果写成十六进制0x0050那实际设定就变成了0.8Hz面板上看不出明显变化。另一个重要原因是Pr.79的运行模式。如果变频器还停在面板运行模式启动、停止有时能通过Modbus控制但频率给定会被面板电位器或面板设定值覆盖出现写频率无效的现象。把Pr.79改成0或7之后通讯频率给定才会真正生效。还要注意写入顺序。部分变频器在运行状态下修改频率是可以的但某些特定条件下需要先停止再写入频率。如果程序里是先写频率再启动没问题如果是运行中改频率观察一下变频器面板显示的设定频率是否跟着变化就能判断命令是否被从站接受。5.4 读回来的数据不对启动正转之后读频率一直显示0或者数值看着就不合理。这里先把寄存器地址确认一遍运行频率监视寄存器的协议地址是2100H不是2001H。2001H是频率设定寄存器读它也能读出一个值但读的是当前设定频率不是实际输出频率。再一个容易被忽视的坑是高低字节拼反。Modbus响应报文里数据高字节在前、低字节在后三菱PLC的D寄存器是高位在前还是低位在后的处理方式不同工程师写的解析程序习惯不一样容易出错。我习惯用一个16位寄存器接收D103和D104拼接后的数据然后直接当作整数参与运算这样高低字节顺序在MOV指令里天然处理少一道人工拼装步骤。还有一点读回来的频率是0.01Hz单位不能直接当Hz显示。5000要除以100才是50Hz这个换算如果漏了上位机显示50.00会变成50.00Hz其实值完全不对因为5000直接显示成5000.00Hz一眼就能发现。当时一个同事就闹过这种笑话显示值比实际大了100倍。5.5 通讯偶发断线通讯一会儿正常一会儿断看起来像接触不良但检查接线又没问题。这种偶发问题在工业现场最常见原因也最杂。首先要排除物理接触问题。485端子排的螺丝一定要拧紧特别是变频器侧长期振动环境下端子松动是偶发断线的头号原因。其次看通讯距离和终端电阻超过三十米没有接终端电阻时信号反射造成的偶发错误概率会明显上升。变频器侧有一个参数能显著改善这种现象Pr.120通讯重试次数。现场试过设1次当出现瞬时干扰时变频器自动重试能在一定程度上自愈。Pr.121设为9999即不校验可以避免因为偶发CRC错误导致变频器进入报警状态。这两个参数不是通信成功的必要条件但对运行稳定性有实际帮助。程序侧也要做超时处理每一帧发送后启动一个超时定时器比如200毫秒没有收到响应就把M8123手动复位重新发送这一帧连续重发三次仍然失败输出一个通讯报警到触摸屏。没有超时重发机制的通讯程序在干扰稍大的现场基本都会积累问题。最后分享一点个人感受做这种PLC和变频器的Modbus通讯项目说难不难说简单也不是发几根线那么简单。整个过程最花时间的往往不是编程而是接线和参数排查。做过几个类似项目之后我的习惯是先花十分钟把接线和参数表全部核对一遍再开始写程序。通讯失败时按先看变频器有无报警、再查站号和波特率、后测信号干扰的顺序来排查大多数问题十分钟内都能定位。一个小技巧调试阶段可以在程序里加一段临时逻辑把收到的原始报文原样传送到触摸屏的调试页面显示或者通过监控软件数值监视器观察接收缓冲区。看到原始字节比任何抽象分析都直观得多。报文对了剩下的就是解析和单位换算的事。这套方案调试完成后后续要扩展也很方便。如果想增加读取输出电流或电压只需要把寄存器地址改成2103H或2101H把轮询窗口加长一点程序结构和接线都不用动。这也是Modbus RTU方案在中小型设备里一直有生命力的原因。

关于本文作者

来自尧图内容编辑团队

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

尧图内容编辑团队

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

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

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

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

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

网站改版的5个关键决策

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

获取专属建站方案

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

立即免费咨询