尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

三菱FX5U与MODBUS RTU通信:温湿度变送器RS485接线及ADPRW编程详解

三菱FX5U与MODBUS RTU通信:温湿度变送器RS485接线及ADPRW编程详解 简介面向工业自动化领域PLC编程人员这份docx文档以三菱FX5U系列PLC与温湿度变送器的MODBUS RTU通信为主题完整演示从硬件接线到程序落地的全流程重点解决设备接线、串口参数配置、主从站号设定及寄存器数据读取等典型实操问题。文档基于GX Works3软件逐一说明485串口的通信协议与波特率、数据位、停止位、校验方式等参数设置并结合FX5U编程指令手册讲解MBR、MBW指令的调用方法给出将温度、湿度数据分别存入D0、D1寄存器的示例程序同时兼顾仿真测试与实际环境监控的调试要点。资源为单个docx文档压缩包大小1018KB内容紧凑、步骤明确适合正在开发环境监控系统或楼宇自控项目的工程师快速参考也可作为职业院校相关课程的教学辅助。目前该资源已有1030人学习下载实用性获得一定验证。 车间里装了两台温湿度变送器要接到三菱FX5U系列PLC上做环境监测现场没有多余模拟量输入通道设备又离控制柜七八十米远最后选了MODBUS RTU通信方案。这篇内容把整套做法整理出来从RS485接线、参数设置到ADPRW指令写梯形图再到数据换算和排查通信故障一次性讲透。对做设备维护、项目调试的朋友尤其是刚接触三菱FX5U与MODBUS RTU通信的PLC初学者可以直接照着做。1. 方案思路与硬件选型解析1.1 为什么选MODBUS RTU而不是4-20mA模拟量很多人第一反应是测温湿度用4-20mA模拟量变送器一根信号线对应一个物理量温度一路、湿度一路两个变送器就要占4个模拟量输入点。如果现场本来就有富余的模拟量模块这样做也没问题但要注意模拟量传输是电流环线路上有压降、有干扰长距离走线时精度会打折扣而且后期想加第3台、第4台变送器又得拉线、加模块。MODBUS RTU走的是RS485总线物理上就两根线A、B最多可以挂32个从站设备。温度、湿度两个数据都在数字报文里PLC通过寄存器地址区分。这样做的好处非常明显接线量少、抗干扰能力强、多台设备可以并联组网、后期扩展只需并联接入新设备并改站号。我这边实际项目里两台变送器装在车间对角距离控制柜接近100米用RVSP双绞屏蔽线走线通信一直很稳定。1.2 FX5U侧通信模块的选择三菱FX5U本体自带一个以太网口但RS485并不是标配需要加装通信模块。常用选择有两个FX5-485-BD和FX5-485ADP。FX5-485-BD是扩展板直接插在CPU本体上的扩展板槽位不占左侧智能功能模块位置适合只需要一个RS485口、且CPU本体旁边空间紧张的情况。FX5-485ADP是智能功能模块挂在CPU左侧适合后续还要扩展其他智能模块的场景。我这次选的是FX5-485ADP因为项目后期还计划挂一个第三方的能耗采集模块左侧扩展更灵活。有一点要提醒FX5U的RS485通信模块用法和FX3U时代不一样。FX3U用RS指令自己拼报文、算CRCFX5U则可以直接用ADPRW指令协议底层由模块处理CRC校验自动完成编程量少很多出错概率也低。2. 硬件接线与通信参数设置2.1 RS485接线流程RS485接线看起来就两根线实际操作中坑不少。变送器侧通常是四线端子V、V-供电常见DC 12-24V、A、B-通信。PLC侧FX5-485ADP模块端子的SDA、SDB对应A、B信号线RDA、RDB在二线制接法里和SDA、SDB短接。接线顺序是变送器的A接模块的SDA/RDA变送器的B-接模块的SDB/RDB。屏蔽层单端接地我这边是控制柜侧接地变送器侧悬空避免形成地环路。网络两端各接一个终端电阻阻值120Ω。如果只接一台变送器且线很短终端电阻可以省但线长超过30米或现场变频器干扰明显时建议两端都加上。变送器供电的负极和通信线的GND不要混在一起除非厂家明确说明可以共地。我当时第一次调试时通信偶尔成功、偶尔失败查了半天发现是屏蔽层两端都接地了形成环路干扰。后来改成控制柜侧单端接地问题消失。这是个常见坑提前写出来。2.2 变送器侧参数确认拿到温湿度变送器第一件事不是接线而是看说明书确认三件事站号从站地址、波特率、校验方式。绝大多数国产温湿度变送器出厂默认是站号1、9600bps、8数据位、无校验、1停止位也有不少默认是8E1偶校验必须和PLC侧保持一致。再就是确认寄存器地址。不同厂家定义不一样常见的两种温度寄存器地址0x0001湿度寄存器地址0x0002每个寄存器存实际值放大100倍的整数比如温度25.00℃存为2500。温度整数、温度小数、湿度整数、湿度小数分别用4个寄存器存放。我这次用的是第一种格式编程时一个寄存器读温度、一个寄存器读湿度数据处理最简单。选型时尽量选这种集成好的变送器省去拼小数点的麻烦。2.3 GX Works3模块配置步骤在GX Works3里配置FX5-485ADP步骤如下导航窗口“模块配置图”里双击左侧扩展槽位选择FX5-485ADP。双击添加的模块进入“模块参数”界面。“通信协议设置”里选择“MODBUS RTU主站”。传输格式按变送器侧实际参数填波特率9600、数据长度8、奇偶校验或无校验、停止位1。写入PLC后断电重启让模块参数生效。这里有个容易忽略的点ADPRW指令发送的目标站号是写死在程序里的和模块参数里“站号”不是一回事。FX5-485ADP做主站时这个模块参数站号实际上不用太关注程序里ADPRW指定的从站号才是关键。我最初在模块参数里填了站号1以为它自动指向变送器结果指令一直报错后来才意识到站号是在指令里设定的。3. ADPRW指令与梯形图编程3.1 ADPRW指令格式ADPRW是三菱MODBUS RTU通信的核心指令一条指令实现读或写操作格式如下参数含义示例S1从站号K1表示1号从站S2功能码K3表示读保持寄存器S3寄存器起始地址K1表示从寄存器1开始D数据保存首地址D10表示读到的数据存到D10n数据点数K2表示连续读2个寄存器功能码K3是读保持寄存器对应变送器的温度、湿度数据K6是写单个寄存器K16是写多个寄存器。对温湿度变送器绝大多数情况只用到K3读取。需要注意ADPRW指令的D参数不支持位元件只能存到D寄存器。数据读完后的一个扫描周期内我们可以用M8029指令执行完成标志来判断是否成功也可以用模块的异常标志位判断通信是否出错。3.2 轮询逻辑设计如果现场只有一台变送器程序很简单一条ADPRW读温度一条ADPRW读湿度顺序执行就行。但实际项目中往往是多台设备并联这时候就要设计轮询逻辑。我这个项目两台变送器1号站、2号站。轮询顺序是读1号站温度寄存器保存到D1读1号站湿度寄存器保存到D2读2号站温度寄存器保存到D3读2号站湿度寄存器保存到D4返回第1步循环执行这样做的原因是MODBUS RTU是半双工通信同一时刻总线上只能有一个设备发送数据。如果程序里两条ADPRW连续触发第二条指令不会等第一条完成就发出请求总线就会冲突。所以必须用完成标志位做“握手”上一次通信完成后再启动下一次。3.3 梯形图分段说明下面把核心程序按段说明实际写梯形图的时候可以照着搭。初始化段PLC上电后用SM0常ON给M10轮询启动标志置位一次同时用MOV指令把K0写入轮询计数器D20。这里加一个首次扫描标志M2005来置位启动标志避免每次扫描都触发初始化。轮询控制段D20等于0时且上一次通信完成标志M8029或超时标志触发则跳到读取1号温度的分支D20等于1时读1号湿度D20等于2时读2号温度D20等于3时读2号湿度。每执行完一轮D20加1到4时回到0。这一段的梯形图逻辑用比较指令和条件跳转来实现。实际写的时候我会用M8000常开作为总使能然后CMP指令判断D20的值分别驱动M21、M22、M23、M24这四个“读取触发”位每条ADPRW指令前串对应的触发位指令执行后把触发位置0防止重复发送。ADPRW执行段以读1号站温度为例| M21 | | ADPRW K1 K3 K1 D1 K1 | |-----|-----------------|-----------------------|解释一下K1是1号从站K3是读保持寄存器K1是从寄存器地址1开始读D1是保存地址K1是读1个寄存器。读1号站湿度时寄存器起始地址是K2保存到D22号站温度时从站号改为K2寄存器地址K1保存到D32号站湿度时从站号K2、寄存器地址K2、保存到D4。执行完成后M8029会导通一个扫描周期。在M8029的上升沿把D20加1同时把当前站的读取成功次数计数器加1。如果用了超时判断可以在ADPRW执行后启动一个延时定时器比如T0延时500ms如果500ms内M8029没有导通就认为通信超时超时标志位置位然后强制D20加1跳到下一个设备继续轮询。我实际测试下来这种轮询方式对2台设备非常流畅每台设备的刷新时间大约在100ms以内。如果挂到10台以上建议把每台设备的读取次数和超时时间做成数组方便后期维护。3.4 数据换算从变送器读到的D1~D4是原始整数值还需要换算成实际的温度和湿度。以温度寄存器值为例实际温度 寄存器值 × 0.01。湿度同理。用三菱的浮点运算指令实现DFLT D1 D100把D1的整数转成浮点数存入D100。DEMUL D100 E0.01 D102浮点数乘以0.01结果存入D102。DEMOV D102 D110把结果保存到D110用于触摸屏显示。湿度用同样的方式D2转浮点、乘0.01后存入D112。如果变送器的温度是负数寄存器里存的是有符号数。FX5U的D寄存器本身是有符号的如果寄存器最高位为1DFLT转换时会按负数处理这正好符合要求不用额外处理。但要注意变送器如果是无符号补码格式需要先把无符号数转成有符号数再做浮点转换这个要看厂家协议描述不能想当然。4. 实测校验、数据联动与坑点排查4.1 在线监视与数据核对程序下载到PLC后用GX Works3的在线监视功能看D1~D4的数值。我当时的操作步骤是右键D1选择“软元件/缓冲存储器批量监视”。用温度计实测变送器安装位置的温度比如实测25.3℃看D1的数值。如果D1显示2530附近说明读取正确如果显示0、65535或乱跳说明通信链路有问题。有个细节我用的变送器寄存器值温度和湿度数据不是实时刷新的而是变送器内部每2秒更新一次。就算PLC轮询频率再高读到的数据刷新周期也受限于变送器本身。所以如果发现数据基本不变先不要怀疑PLC程序看看变送器的采样周期是不是就是几秒一次。4.2 与GOT触摸屏联动如果项目配了三菱GOT触摸屏可以把D110实际温度浮点数、D112实际湿度浮点数直接关联到画面上的数值显示元件显示格式设置为1位小数或2位小数。这块不需要额外写通信程序GOT和FX5U之间通过以太网或专用总线通信温度湿度数据直接引用PLC的D寄存器。如果触摸屏是第三方品牌或者要用上位机SCADA读取也可以直接在触摸屏侧配置MODBUS TCP从站功能把FX5U的D寄存器映射出去。FX5U本体支持MODBUS TCP从站功能在GX Works3的以太网端口设置里勾选MODBUS TCP从站协议配置好寄存器映射范围即可。这个功能在做数据上报时很实用。4.3 常见问题速查表现象可能原因排查方法ADPRW执行后无任何反应从站号错误、A/B线接反确认站号与变送器拨码一致用万用表量A/B电压确认有无信号数据偶尔能读、经常超时波特率或校验位不匹配、线缆过长、缺终端电阻核对通信参数检查屏蔽层是否单端接地加120Ω终端电阻读到的数值明显不对寄存器地址错、数据格式理解错看变送器说明书用MODBUS调试工具先确认具体地址和数值格式总线上挂多台设备后数据全乱轮询逻辑没做握手、两条指令同发确认每条ADPRW之间有完成标志位联动触摸屏或上位机读取时通信失败FX5U从站映射范围没配、端口被占用检查以太网端口设置中的MODBUS TCP映射表数据跳动比较大变送器供电不稳或现场干扰变送器单独供电避免与变频器共用电源程序里加平均值滤波这里强烈建议第一次调试时先用PC上的MODBUS调试工具比如Modbus Poll直接连变送器确认站号、寄存器地址、数据格式这三项没问题再写PLC程序。这样能把问题范围缩小到PLC侧还是变送器侧省去大量联调时间。4.4 稳定运行经验项目运行了几个月总结几条可以让这套系统更稳的经验。第一变送器供电不要和变频器共用开关电源。现场有台5.5kW变频器最初变送器从变频器控制回路取电数据偶尔跳变后来换了一个独立的24V开关电源给变送器供电问题消失。MODBUS RTU本身抗干扰能力不错但供电不干净数字通信照样会出错。第二通信线远离动力电缆。如果布线条件限制必须平行走线间距至少保持20cm以上实在避不开就穿金属管做屏蔽。第三程序里加通信失败计数。如果连续N次轮询失败置一个“通信故障”标志位输出到触摸屏报警同时保留最后一次正常数据不要用异常数据覆盖掉。这样车间值班人员能第一时间发现传感器故障而不是看到屏幕上跳出一个离谱的负数温度。第四做设备维护时要格外注意变送器地址如果被改过复位出厂设置后站号可能恢复到1。如果现场多台设备都是默认站号1PLC通信就会出现错乱。建议每台设备在安装调试时就做好标签记录站号和安装位置后期维护会省很多事。5. 个人操作体会这次用FX5U做MODBUS RTU通信最大的感受是三菱在FX5U这一代把通信指令做得很“傻瓜化”ADPRW指令把协议细节都封装好了不用再像FX3U那样手动拼接报文帧和计算CRC编程效率提升非常明显出错的概率也小了很多。但这也带来一个问题很多新手把ADPRW当成普通指令直接用忽略了通信参数、硬件接线、从站地址这些底层细节一旦通信不通就无从下手。我个人的建议是做MODBUS RTU通信调试时一定要按照“硬件接线→通信参数→寄存器地址→轮询逻辑→数据换算”这个顺序逐个确认不要跳步。先把PC调试工具和变送器通信成功再让PLC去通信这样排查问题时思路会很清晰。等这套流程跑顺了你会发现MODBUS RTU并没有想象中那么复杂反而是一个稳定可靠、应用极广的工业通信方案。本文还有配套的精品资源点击获取
返回列表