电工学习网

 找回密码
 立即注册
查看: 10901|回复: 0
打印 上一主题 下一主题

西门子S7-200smart modbus rtu通讯实例

[复制链接]
跳转到指定楼层
楼主
发表于 2019-2-14 09:28:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
   前面几次modbus rtu通讯均用串口调试软件进行验证的,今天找到另一台200smart plc可以组成一个简单的modbus rtu的主、从通讯,以此来验证一下,主要是对通讯地址Addr的计算。
通讯材料:
1)  plc2台,分别是200smart 的CR60和SR20;
2)  2个DP插头(6ES7972-0BX12-0XA0)
3)  连接导线若干(plc电源及通讯)
验证内容:
令:CR60 plc为主站,发送plc系统时钟(8个字节的信息)给SR20从站;SR20从站发送一个双字的循环移位数据给主站,并由通讯数据VD100接收输出到QD0。
主站程序:
西门子S7-200smart modbus rtu通讯实例
在验证过程中曾经出现一个错误,使MSG指令始终显示为6,表示从站无响应。我验证时,由于连接2台plc之间的3+、8-没有确认,造成接线错误,使MSG的error错误信息为6,检查后找到原因,重新接线后仍然报警6。最后检查为控制程序不完整,主要原因是没有给MB0一个初始化操作,造成错误值没有得到有效的刷新。于是,在程序段1中加入初始化操作得到解决。
西门子S7-200smart modbus rtu通讯实例
西门子S7-200smart modbus rtu通讯实例
主站MSG指令主要理解Addr地址的应用,下面有描述。
西门子S7-200smart modbus rtu通讯实例
从站程序:从站通讯地址设置为1#
西门子S7-200smart modbus rtu通讯实例
西门子S7-200smart modbus rtu通讯实例
从站自VB31开始为读取主站VB11开始的8个字节主站系统时钟数据,指定VB31的起始地址是由Addr地址40011定义的,从站循环指令VD11运行结果,将由Mbus_init的Holdstart定义的起始地址发送和接收。
编写小结:
自简而深进行编写modbus rtu通讯程序,相对从站通讯程序比较简单,仅仅只是指定通讯种类由Mbus_init管脚指定maxIQ/maxAI/maxHOLD/Holdstart定义,其它管脚根据主站定义匹配进行,相对主站需要根据从站地址偏移量来确定。
通讯数据:
西门子S7-200smart modbus rtu通讯实例
Modbus通讯程序相对的难点是通讯映射的地址关系。
主站读取从站的数据,起始地址是根据从站Holdstart管脚定义的起始地址开始算,而不是指从站的V区物理地址。在验证程序中,从站的Mbus_init起始地址为VB11,那么,主站MSG指令的Addr 40001,应该是指从站的VB11地址。
同理,从站读取主站系统时钟,主站的MSG指令的Addr 40011,对应到从站的地址相当于偏移了10个字(偏移量10word + 11byte = 31byte) ,即为VB31开始的8个字节中存放,Modbus通讯地址计算是40001开始的。
来源:西门子工业技术论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-4-26 12:20

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表