[西门子] 【Modbus应用实战】三菱FX3U使用RS指令无协议编程实现Modbus RTU从站

[复制链接]
查看63735 | 回复0 | 2024-1-15 00:39:07 | 显示全部楼层 |阅读模式
点击蓝字 关注我们

有时我们关注的公众号消息比较多,错过了一些自己喜欢的消息,不能及时看到工控论坛的推送,我们可以给公众号加星标或置顶。那如何星标置顶呢?【打开一篇工控论坛公众号的文章,点击文章标题下方的蓝色字体进入工控论坛公众号,右上角“···”选择设为星标,置顶公众号】点击蓝字 关注我们



系统概述:

上海宝钢某车间某一期设备控制器采用三菱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路温度测量值,通信成功。

来源/中华工控网,转载请联系

往期推荐
【原创分享】 ET200系列中1510SP 1PN利用CM ptp模块进行通信【原创分享】PLC系统的流量积算方法参考
【原创分享】物联网时代,自动化金字塔会被替代吗?
三菱PLC编程应用实例分享,初学者入门速成
【原创分享】卷烟厂包装机胶辊改电子齿轮控制初探
实用!西门子S7-1200系列PLC全套接线图新手学PLC如何跟自动化工程师做项目?
常用PLC编程接线图和梯形图程序
你了解电气控制柜的设计工艺吗?建议收藏
三相四线制和三相五线制的解析,不少人都理解错了!
【分享】通讯与硬线交换信号的优缺点
【原创分享】一文教你掌握串级PID调节控制
分享经典的PLC程序实例~
【原创分享】小白也能DIY物联网系统,程序设计来了!
【原创分享】PLC控制线路的快速检查法(以液压维修为例)
【原创分享】西门子S7-200 Smart和欧姆龙CP1H-E实现Modbus TCP以太网通信
【原创分享】施耐德HMIGXU5512和S7-200 SMART以太网通讯
【整理分享】EPLAN初学资料、EPLAN表格和符号库汇总
【原创分享】三相负载不平衡,接入零线是有害还是有益?【步骤详解】西门子 PLC PID组态设置及PID常见问题解答【原创分享】聊一聊树莓派,想玩但不知道从哪里开始?
【原创分享】工控人谈家庭智能控制,不用PLC而且很简单?
【原创分享】边缘计算及人工智能,西门子加强工厂自动化业务未来布局
【原创分享】变频器双电机驱动主从控制实战

【原创分享】记一次苦逼的包装设备调试经历

【整理分享】增加了补偿电容,用电为何多了?【原创分享】设备改造案例:S7-200PLC与横河DCS系统的通讯实现
【原创分享】M200 PLC和昆仑通泰触摸屏的连接和仿真
【原创分享】利用PLC消除高炉煤气余压透平发电装置的安全生产隐患
【原创分享】三菱Q系列和FX2N系列进行CC-Link通讯(主站和智能设备站的通讯)
【原创分享】西门子PLC电路高效设计2——快速进行PLC地址编码及原理图建立
【原创分享】三菱FX5U系列PLC和西门子MM420系列变频器实现USS协议串口通信
【原创分享】谈谈国产化压力传感器的艰难发展之路
【整理分享】电动机、磁场、直交流电路、电气计算公式大全,电工必备!
【原创征集】工控技术牛人的成长之路,都有过这些时刻!【原创分享】从新的角度解读经典的PID控制器
【原创分享】做变频器15年了,为大家解读变频器的输出短路保护功能
【原创分享】PLC梯形图编程很low?那你一定要看看PLC梯形图的由来了
【原创分享】WINCC7.3和1200如何建立OPC通讯?


球分享



球点赞



球在看

本帖子中包含更多资源

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

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

本版积分规则