[三菱] 三菱FX3U使用RS指令无协议编程实现Modbus RTU从站

[复制链接]
查看121 | 回复0 | 2024-4-4 22:56:22 | 显示全部楼层 |阅读模式

系统概述:


上海宝钢某车间某一期设备控制器采用三菱FX3U系列PLC扩展FX3U-485-BD和FX3U-485ADP-MB和若干温度采集模块实现Modbus通信采集现场10路温度信号,一期上位机使用C#.NET和PLC编程口实现编程口协议通信,用以显示10路温度实时测量值和其他数据监控。
二期设备控制器采用西门子S7-200系列PLC,其中二期上位机使用C#.NET和PLC之Port1通信口实现PPI协议通信,用以显示二期温度实时测量值和其他数据监控,PLC之Port0口和台达VFD-M系列变频器实现Modbus RTU协议通信。
现在要求二期要同时采集一期10路温度测量值,因二期控制器西门子S7-200之Port0口已经做Modbus RTU主站和台达VFD-M变频器实现Modbus RTU协议通信,所以一期控制器三菱FX3U只能使用FX3U-485-BD通信硬件、软件使用RS指令无协议编程实现Modbus RTU从站。



西门子S7-200通信编程:


西门子S7-200之Port0通信口通信参数约定为9600、8、E、1,通信协议为Modbus RTU主站,通信物理层为RS485,通信实现功能是对从站10路输入寄存器进行定时读取操作,约定从站站号为0x01、功能码为0x04、寄存器起始地址为0x0000、寄存器预读数量为0x000a,即就是西门子S7-200之Port0通信口会定时发送01 04 00 00 00 0A 70 0D指令。假设当前10路温度分别是1、2、3、4、5、6、7、8、9、10度,则三菱FX3U扩展的FX3U-485-BD通信口收到上述指令后会返回如下数据:01 04 14 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A B9 F0


编写好的西门子S7-200之Port0口Modbus RTU主站这一部分程序如下所示:




西门子S7-200之Port0通信口100ms定时发送01 04 00 00 00 0A 70 0D指令,三菱FX3U扩展之FX3U-485-BD通信口收到命令后,按照Modbus RTU协议实时返回其1期10路温度测量值。西门子S7-200读取到的10路温度测量值最终保存至VW200、VW202、VW204、VW206、VW208、VW210、VW212、VW214、VW216、VW218这10个单字寄存器中。




三菱FX3U通信编程:


三菱FX3U扩展之FX3U-485-BD通信口通信参数约定为9600、8、E、1,通信协议为Modbus RTU从站,通信物理层为RS485,实现功能为收到西门子S7-200之Modbus RTU主站命令后,按照Modbus RTU协议实时返回10路温度测量值。10路温度测量值依次保存在D0~D9寄存器中,编程通过RS指令无协议方式实现Modbus RTU从站,限于篇幅,下面仅对三菱FX3U无协议编程做详细讲解。


1、如下程序设置了PLC之485BD通信参数为9600、8、E、1,通信物理层为RS485,8位数据处理模式,并对相关寄存器、继电器做清零操作。



2、如下为RS指令程序段,规定了无协议编程通信中接收8个字节、发送25字节,Modbus RTU协议中,0x04功能码主站命令固定为8个字节,主站读取从站10路输入寄存器,按照Modbus RTU协议规定,从站返回字节数为10*2+5=25个字节。




  3、如下程序规定了三菱PLC返回数据中的从站地址、功能码、字节计数,寄存器D1300为从站地址、寄存器D1301为功能码、寄存器D1302为字节计数。



4、如下程序为处理第01路温度测量值程序段,第01路温度测量值保存在D0中,将D0送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1303和D1304中,即就是D1303和D1304依次保存的是D0的高8位和低8位。



5、如下程序为处理第02路温度测量值程序段,第02路温度测量值保存在D1中,将D1送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1305和D1306中,即就是D1305和D1306依次保存的是D1的高8位和低8位。



6、如下程序为处理第03路温度测量值程序段,第03路温度测量值保存在D2中,将D2送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1307和D1308中,即就是D1307和D1308依次保存的是D2的高8位和低8位。


7、如下程序为处理第04路温度测量值程序段,第04路温度测量值保存在D3中,将D3送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1309和D1310中,即就是D1309和D1310依次保存的是D3的高8位和低8位。



8、如下程序为处理第05路温度测量值程序段,第05路温度测量值保存在D4中,将D4送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1311和D1312中,即就是D1311和D1312依次保存的是D4的高8位和低8位。



   9、如下程序为处理第06路温度测量值程序段,第06路温度测量值保存在D5中,将D5送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1313和D1314中,即就是D1313和D1314依次保存的是D5的高8位和低8位。



10、如下程序为处理第07路温度测量值程序段,第07路温度测量值保存在D6中,将D6送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1315和D1316中,即就是D1315和D1316依次保存的是D6的高8位和低8位。


11、如下程序为处理第08路温度测量值程序段,第08路温度测量值保存在D7中,将D7送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1317和D1318中,即就是D1317和D1318依次保存的是D7的高8位和低8位。



12、如下程序为处理第09路温度测量值程序段,第09路温度测量值保存在D8中,将D8送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1319和D1320中,即就是D1319和D1320依次保存的是D8的高8位和低8位。



   13、如下程序为处理第10路温度测量值程序段,第10路温度测量值保存在D9中,将D9送入到P1子程序的入口参数D1100中,调用P1程序后,P1子程序出口参数D1101和D1102分别送入到D1321和D1322中,即就是D1321和D1322依次保存的是D9的高8位和低8位。



14、计算CRC校验程序命令段,这里调用了P0程序,P0子程序入口参数为D1000,即为参与CRC校验字节数、D1300为第1个参与CRC校验的数据、出口参数为D1001和D1002,即为CRC校验的低8位和高8位,将最终的CRC校验送入到D1323和D1324中。



15、接收完成程序命令段,接收完成后将接收到的数据转存至D1400~D1407中,而后判断接收到的数据是否满足Modbus RTU主站命令01 04 00 00 00 0A 70 0D,如果满足则表明接收到的指令确为主站读取10路温度测量值之命令。此时开始置位M38,M38上升沿置位M39,同时清空D1400~D1407接收另存区,并把M38复位,接收处理完毕。



16、开始发送程序命令段,根据上述程序分段讲解,可知D1300~D1324中保存的是返回数据,其中D1300为从站地址、D1301为功能码、D1302为字节计数、D1303~D1322共计20个寄存器依次保存的是10路温度测量值的高低8位、D1323和D1324保存的是CRC校验。M39置位后开始延时,延时时间到达启动RS指令发送,发送完成。




17、P0子程序功能是计算CRC校验,占用资源:M0-M15、M16、M17、M18、V0、Z0,入口参数为D1000,即为参与CRC校验字节数、D1300为第1个参与CRC校验的数据、出口参数为D1001和D1002,即为CRC校验的低8位和高8位,将最终的CRC校验送入到D1323和D1324中。



  18、P1子程序功能是拆分某个寄存器高低8位,占用资源:M20-M35,入口参数为D1100,为要拆分的寄存器、出口参数为D1101和D1102,为拆分后寄存器的高低8位。




通信程序测试:


1、三菱PLC通信程序测试:串口调试助手发送01 04 00 00 00 0A 70 0D命令,三菱PLC收到命令后返回01 04 14 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A B9 F0命令,经过分析,发送正确、返回正确,三菱PLC程序正确无误。




2、西门子PLC通信程序测试:经过串口调试助手监视,PLC会定时发送01 04 00 00 00 0A 70 0D命令,表明PLC发送命令正确。
3、系统联调:西门子PLC之Port0通信口和三菱FX3U-485-BD硬件连接完毕,运行三菱PLC、再运行西门子PLC,结果西门子PLC中VW200~VW218中可以实时读取到三菱PLC中D0~D9的10路温度测量值,通信成功。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则