FX3U通过485ADP与三台东元N310变频器Modbus RTU通信实战

发布时间:2026/10/24 4:37:09
FX3U通过485ADP与三台东元N310变频器Modbus RTU通信实战 “FX3U 带三台东元变频器”这类项目算是工控里典型的“中老年组合”PLC是老当益壮的三菱FX3U变频器是东元N310中间用一个485ADP模块做桥实现三台变频器的启停、频率设定、电流/电压回读。听起来不难但真落地时接线、从站参数、Modbus帧、轮询逻辑、CRC校验这些环节随便哪个出点岔子都会让你在现场耗掉一整天。这篇文章我把整套方案从硬件到程序拆透了手里有类似项目的可以直接照着改。1. 项目整体拆解三台变频器到底要实现哪些功能1.1 核心需求解析这个项目要解决的是很常见的现场问题一条产线上有三台N310变频器分别带着三台电机跑操作员希望在触摸屏上输入频率一键启动或停止任意一台同时要实时看到每台变频器的输出频率、输出电流和母线电压。如果用硬接线的办法三台变频器就得拉三组模拟量线和三组开关量线到PLC每组又是AI/AO/DI/DO线缆数量多不说抗干扰和查线都是麻烦事。走了RS-485通信以后一根双绞线串下去三台变频器并联在总线上PLC作为主站轮询访问启停、调速、监视全部走Modbus协议物理线路干净很多。这个方案里PLC选的是FX3U普通主机没有自带第二串口所以要外扩一个FX3U-485ADP通信适配器。485ADP装在PLC左侧扩展口上通过FX3U的系统总线供电本身不占输入输出点编程时把它当作一个通信口来用就行。1.2 为什么要用Modbus RTU而不是三菱专用协议三菱自己的变频器比如E700、A800可以和FX3U用专用的三菱变频器通信协议指令写起来很省事。但东元N310走的是标准Modbus RTU这反而更简单——Modbus RTU是工控界最通用的串行通信语言PLC侧自己组帧、自己解析不受品牌限制。通信链路是这样组织的485ADP作为主站三台N310分别设为从站1、从站2、从站3通信格式统一为9600bps、8数据位、1停止位、无校验。主站定时轮询读取每台的运行状态、频率反馈和电流反馈同时把画面下发的最新频率和控制字发送给对应从站。1.3 协议选型和改写定制说明有一点先说清楚N310变频器不同固件版本、不同供货批次Modbus寄存器地址定义可能会有出入文章里给出的寄存器表是我在实际项目中确认过的映射你接手新设备后还是要翻一遍说明书核对。但如果你的说明书丢了这套映射关系作为初版调试依据命中率很高。提示项目调试前一定先把三台变频器的通信参数统一主站和从站的波特率、校验方式、停止位必须完全一致否则程序写得再漂亮也白搭。2. N310变频器通信参数设置先把从站调整到可被调用的状态2.1 变频器侧必须修改的参数变频器出厂默认通常是面板控制接了RS-485也不会理你的命令。所以要把控制源和频率源都切到通信通道。需要设置的核心参数有以下几类第一是通信地址三台分别设为1、2、3。第二是通信格式波特率9600数据格式8-N-1和PLC侧一致。第三是命令源选择把运行指令来源改成RS-485通信控制。第四是频率源选择把主频率给定来源改成RS-485通信给定。第五是通信超时处理建议设成“通信超时后减速停机”或者“保持最后指令”根据现场安全要求来定。具体菜单编号每个固件版本有差异我习惯按“通信组、控制组、频率组”的分类去找一般在参数的大项里能看到Serial、RS485、Modbus相关字样。设置完必须断电重启一次通信参数才能生效这一点经常被忽略。2.2 寄存器地址规划写什么、读什么N310作为Modbus从站以从站地址功能码寄存器地址来区分操作对象。调试中用得最多的是下面这组寄存器映射寄存器地址功能读写类型数据说明0x2000控制字写0x0000停止0x0001正转0x0002反转0x0008故障复位0x2001频率给定值写十六进制数对应0最大频率一般用016384等比映射0x2100运行状态字读Bit0运行中Bit1正/反转状态Bit2故障0x2101输出频率读单位0.01Hz0x2102输出电流读单位0.01A0x2103母线电压读单位0.1V0x2104故障代码读故障时返回代码注意这个频率给定值不是随便填一个50就代表50Hz要把实际目标频率按照变频器的最大频率做等比换算。一般N310最大频率设为50Hz给定值16进制范围对应0到最大值实际项目中我习惯用016384映射050Hz换算公式就是实际频率值 给定值 / 16384 × 最大频率比如要给定35Hz计算就是35 / 50 × 16384 11468换算成十六进制就是0x2CDC写进0x2001。这个换算建议在PLC里算好避免触摸屏每次都做浮点运算。2.3 Modbus报文结构自己组帧别嫌麻烦走RS指令方案的时候PLC就是主站所有Modbus报文都要自己拼。以“读取1号变频器的4个寄存器”为例报文格式是字节内容含义00x01从站地址110x03功能码03读保持寄存器2-30x2100起始寄存器地址4-50x0004寄存器数量6-7CRC16低高字节校验变频器正常响应会返回从站地址、功能码、数据字节数、若干寄存器数据、CRC校验。如果请求有误会返回功能码的最高位置1附带一个错误码比如0x01表示功能码不支持、0x02表示寄存器地址非法。CRC16是Modbus协议里的重头戏。它校验的是从“从站地址”到“数据”为止的所有字节计算结果两个字节低字节先发。现场调试如果发现变频器能收到数据但一直不回九成是CRC没算对。3. 485ADP接线布线与终端电阻这步错了后面程序全白搭3.1 485ADP和变频器端子怎么接FX3U-485ADP的端子排上有SDA、SDB、RDA、RDB、SG这几个关键端子。485通信分四线制和两线制FX3U-485ADP本身支持四线但现场到变频器基本都用两线半双工所以需要把发送和接收短接在一起。具体做法SDA和RDA短接后接变频器的DATA端子SDB和RDB短接后接变频器的DATA-端子。SG端子接屏蔽线的屏蔽层同时往PLC的接地端子引。Teco N310的通信端子一般在控制端子排上标着DATA和DATA-和485ADP对号入座即可。接线顺序上485ADP出来第一根线到1号变频器再从1号变频器并接到2号、3号。这种菊花链结构是最标准的RS-485接法。千万不要从PLC分别拉三根线到三台变频器那样会产生星型分支阻抗不匹配轻则通信偶尔失败重则完全不通。3.2 终端电阻只加在物理链路两端RS-485总线要求在链路两端各接一个终端电阻阻抗通常在120欧姆。这个项目链路是PLC到3号变频器所以电阻加在两处PLC端485ADP的SDA/SDB之间加一个120欧3号变频器的DATA/DATA-之间也加一个120欧。很多变频器在通信端子附近有终端电阻拨码开关拨到ON就是接入120欧。项目里三台变频器只拨第三台那个开关第一台的开关保持OFF。如果在现场发现1号、2号都正常3号时好时坏先去看看3号的终端电阻拨码状态。3.3 布线与抗干扰变频器是干扰大户带变频器的485通信最容易栽在干扰上。变频器本身是强干扰源电机电缆里的能量会耦合到通信线上造成数据错乱、通信超时。几个我实测有效的原则通信线用屏蔽双绞线至少2芯双绞加屏蔽层不要用普通平行线凑合。屏蔽层单端接地我习惯接在PLC侧接地端另一端悬空。通信线不要和动力线走同一个线槽实在避不开也要保持20厘米以上间距交叉处做成90度交叉。变频器侧的控制线、通信线尽量远离输出端子尤其是接到电机的UVW线。三台变频器的SG端子都接到同一接地点避免电位差。现场的教训是有一次调试前三台变频器的反馈数据偶尔跳变用万用表量线路也没问题后来把通信线从动力线槽里单独拿出来、屏蔽层重新接到PLC接地点问题直接消失。所以通信一旦有偶发故障先查布线再怀疑程序。4. PLC程序实现485ADP的RS指令方案4.1 先初始化通信格式D8120的设置用RS指令做无协议通信通信格式由特殊数据寄存器D8120控制。485ADP作为通信口时程序第一部分需要把通信格式写进D8120。以9600、8N1、无协议为例常见参考值是H0C81但不同FX3U固件对位定义有细微差异具体换算还是要以三菱手册里《通信格式设置》附录表为准。除了D8120还要关注特殊继电器M8161。M8161决定RS指令按8位模式还是16位模式处理数据Modbus RTU按字节传输所以要把M8161置1让发送接收缓冲区按8位处理这样后面组帧和解析都更直观。初始化逻辑放在M8002这个首次扫描脉冲上程序启动时执行一次M8002 |--[ MOV H0C81 D8120 ] |--[ SET M8161 ]这样PLC每次上电先把通信口配置好后面轮询程序直接使用即可。4.2 CRC16算法复制就能用CRC16算法在Modbus RTU里绕不开。如果PLC是FX5U或者Q系列系统指令集里直接有相关功能块但FX3U没有现成指令只能自己用梯形图或者步进指令实现。为了让你能看懂原理我把算法用C语言写成标准函数uint16_t CRC16_Modbus(uint8_t *buf, uint16_t len) { uint16_t crc 0xFFFF; uint16_t i, j; for (i 0; i len; i) { crc ^ buf[i]; for (j 0; j 8; j) { if (crc 0x0001) crc (crc 1) ^ 0xA001; else crc crc 1; } } return crc; }算法逻辑不复杂CRC初始值FFFF对每个字节做异或然后右移8次遇到最低位为1就异或0xA001。最后生成的CRC值低字节放在报文倒数第二字节高字节放在倒数第一字节。实际在FX3U里可以用子程序实现这个循环数据量不大运算时间完全满足现场需要。也可以把这个算法做成一个调用型子程序每次组帧时把缓冲区首地址和长度传进去算完以后把CRC送回缓冲区。4.3 轮询逻辑三台变频器按顺序访问RS-485一根总线上不能同时有两个设备发送数据所以多台从站必须用轮询方式。程序里定义一个轮询计数器D500D500等于1、2、3时分别对应访问1号、2号、3号变频器。每次轮询的流程是把当前站号的读取请求帧填充到发送缓冲区启动发送等待接收完成标志接收完成后解析数据计数器加1轮到下一台。整个流程用定时器做节拍控制避免上一帧还没处理完就开始下一帧。轮询请求帧构造可以用MOV指令把常量写进发送缓冲区缓冲区我习惯用D200开始连续地址。D200放从站地址D201放功能码D202和D203放起始寄存器地址D204和D205放寄存器数量。注意D8120通信格式和M8161的设置决定了这些D里存的高位低位到底是按字节还是按字处理。启停式梯形图大致逻辑可以这样理解[轮询允许标志M0 1 且发送完成M8123 1] |--[ 根据D500的值跳转 ] D5001: 发送站1读取0x2100开始4个寄存器的请求 D5002: 发送站2读取0x2100开始4个寄存器的请求 D5003: 发送站3读取0x2100开始4个寄存器的请求 置位M8122开始发送M8122是485ADP的发送请求标志置ON后把发送缓冲区数据发送出去。发送完成后M8122自动复位等从站应答M8123接收完成标志置ON程序就可以解析接收缓冲区。每次轮询后把D500加1D500超过3就回到1循环往复。4.4 接收解析与数据映射接收缓冲区我规划在D300开始。从站返回的报文首字节是从站地址第二字节是功能码第三字节是数据字节个数后面跟着寄存器数据最后两个字节是CRC。这样解析起来很规则。以读取1号变频器4个寄存器为例返回报文结构是D3000: 0x01 从站地址 D3001: 0x03 功能码 D3002: 0x08 数据字节数(4个寄存器×2字节) D3003: 状态字高位 D3004: 状态字低位 D3005: 频率反馈高位 D3006: 频率反馈低位 D3007: 电流反馈高位 D3008: 电流反馈低位 D3009: 电压反馈高位 D30010: 电压反馈低位 D30011: CRC低字节 D30012: CRC高字节程序解析时把状态字存到D101频率反馈经过换算后存到D102单位Hz电流反馈存到D103单位A电压反馈存到D104单位V。这样触摸屏直接读D101到D104就能显示不需要在画面里再做运算。数据换算这一步容易出低级错误。比如频率反馈单位是0.01Hz报文数值是3500那实际频率就是35.00Hz。如果在PLC里做了浮点除100注意FX3U的浮点运算要用DEMUL、DEDIV这类指令而且D寄存器是32位组合使用。4.5 启停与频率设定写入策略启停和频率控制用写操作Modbus功能码是0x10写多个寄存器。每次到位信号到来或者画面数据被修改时PLC把控制字和频率给定值打包发送。我项目的做法是画面里设定三个频率给定值D401、D402、D403以及三个启停按钮。当1号变频器的启动按钮被按下程序组装一帧写请求从站地址01 功能码10 起始寄存器0x2000 寄存器数量0x0002 数据字节数0x04 控制字低位高位 频率给定低位高位 CRC写入策略上有个技巧不要每扫描周期都发写请求那样总线负担太大。正确做法是设置写入触发位画面数据变化一次触发一次写入除非数据超过校验容差否则不重复发送。以启动1号并给定35Hz为例控制字写入0x0001频率给定值写入0x2CDC。停止时控制字写0x0000频率给定可以维持不变也可以写0。故障复位时控制字写0x0008相当于给变频器一个复位脉冲。4.6 防通信超时的重试机制现场总线和实验室不一样偶尔一帧数据被干扰丢掉很正常。程序里必须加超时重试逻辑。我常规做法是每个站发送后启动一个200毫秒定时器如果定时器到了M8123还没置ON判定通信超时计数器加1重新发送同一帧。连续三次超时就置一个通信故障标志触摸屏弹出报警提示操作员就知道是通信线断了还是从站掉电了不用瞎猜。这个重试逻辑对排查问题特别有用能把偶发干扰和真正断线区分开。5. 备选方案FX3U内置Modbus主站指令5.1 什么时候用这套更省事如果你不想自己算CRC也不想逐帧组报文FX3U还有一条内置Modbus主站功能的路子。通过485ADP扩展后PLC内部可以用IVRD、IVWR这些Modbus读写指令省掉手动组帧解析的过程。IVRD是从站读取指令IVWR是单寄存器写入IVWR2是连续寄存器写入。使用前需要在特殊数据区里设置站号、通信格式等参数具体寄存器号在不同FX3U版本里略有区别要看编程手册的《Modbus指令》章节。这种方式适合读写点比较规整、不想折腾CRC的场景。5.2 内置指令方案的限制与选型建议内置Modbus指令虽然省事但灵活性比不上RS指令方案。比如有些变频器特殊寄存器需要组合了读写访问或者需要连续读多个地址指令方式就要多写几步。RS指令方案是自己完全控制报文数据从站地址、功能码、数据区全部自己组遇到什么奇葩设备都能适配。两种方案怎么选设备量大且寄存器区规整、自己不想写CRC算法用内置Modbus指令设备寄存器特殊、现场需要灵活加协议解析还是老老实实上RS指令。注意不管用哪种方案千万别在PLC上电瞬间就开始发读写请求。485ADP上电需要几百毫秒稳定时间程序里最好加一个上电延时再开放轮询否则第一帧大概率丢。6. 现场调试常见问题与排查方法6.1 常见故障速查表把我在这个项目里踩过的坑整理成一张表现场对照着查会快很多故障现象常见原因处理方法三台变频器全部通信失败PLC侧波特率/校验和变频器不一致统一通信参数断电重启变频器只有最后一台通信失败终端电阻没拨到位或线路有分支检查最后一台的终端电阻开关偶尔某台变频器数据跳变通信线和动力线靠太近通信线换屏蔽双绞线单独走线槽能发送但收不到任何回复485ADP的SDA/RDA没有短接检查两线制接法SDA短RDA、SDB短RDB接收数据出现但CRC老错主从站校验方式不一致双方都用无校验或都用偶校验别混第1台正常第2台后偶发错误站点地址有重复逐台断电检查从站地址设置6.2 排查时最有用的三板斧现场排查485通信我有一套固定套路效率很高。第一斧断开所有从站用一台变频器单独测试。先把2号、3号的通信线拆掉PLC只和1号通信看是否正常。单台都调不通后面并网想调通是做梦。第二斧用Modbus调试工具做单向验证。手头没有调试工具时可以把从站的频率给定目标写成一个固定值看变频器面板显示频率是否变化。如果面板频率变了说明从站接收链路是通的问题多半出在主站解析上。第三斧用万用表量A、B之间的静态电压。正常的485总线静态电压大约在1.5到3.5伏之间如果量出来接近0或者很低检查接线和终端电阻。6.3 现场调试的实际过程记录这个项目第一次上电调试第一台变频器很快就调通了第二台能启动但是频率反馈明显偏大查了半天发现是第二台变频器的最大频率参数被之前的人改成了60Hz频率反馈的换算基底就不对了重新设置成50Hz后数据正常。第三台则是一接上整个总线都不稳定前两台也频繁超时。后来拆掉第三台单独测第三台单独通信完全正常装回去就不行。最后查到是因为第三台的终端电阻拨码开关打开了而现场接线是PLC拉到1号再到2号再到3号链路两端分别是PLC和3号PLC侧没加电阻等于是终端电阻接在了不该接的中间某台的位置上把阻抗搞乱了。改成只拨3号开关PLC侧485ADP的SDA/SDB之间补了一个120欧电阻整条总线立刻稳定。这类问题不实际调一遍很难暴露文章里多写一点就是希望你少走这些弯路。结尾的个人体会这套FX3U485ADP三台N310的方案硬件上成本很低难点几乎全部集中在Modbus协议和轮询逻辑上。如果项目时间紧张我个人的习惯是优先用RS指令方案因为它的调试透明性最好每一帧发什么、收什么都能看得到。东元N310作为从站本身很听话只要参数设置一致响应速度也快。最后再提醒一句做完整套程序后务必备份PLC程序和变频器参数尤其是三台变频器的通信参数参数错了排查起来远比程序逻辑错误更费时间。

关于本文作者

来自尧图内容编辑团队

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

尧图内容编辑团队

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

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

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

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

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

网站改版的5个关键决策

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

获取专属建站方案

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

立即免费咨询