电工学习网

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

在PLC程序写Modbus通讯读写同一个寄存器怎么办?

[复制链接]
跳转到指定楼层
楼主
发表于 2021-11-5 12:00:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      项目调试需要跟空气悬浮鼓风机通讯,一般用Modbus-RTU或TCP方式。以前为了方便都是直接采用Modbus-TCP的方式由上位机软件读取,上位软件做Modbus-TCP通讯一般不区分读写命令,只需要配置寄存器地址,直接支持对同一个寄存器读写。比如鼓风机的开度设置,上位机配置为读写,那么用一个变量既能显示开度也能修改开度,现场通过触摸屏修改了开度值也能同步在上位显示。

        这次的项目没有采用直接跟上位通讯的方式,而是先跟plc通讯,然后上位机再读取PLC的地址。因为PLC的Modbus通讯指令是区分读写的,那能像上位机通讯那样利用PLC的一个变量跟鼓风机的一个变量同时读写吗?感觉是不行的,因为如果实时读,那么PLC侧可能还没修改数据就被重新刷新了,根本没法把新的数据写到鼓风机从站里。最后的解决方式就是用两个变量,一个存储从子站读的数据,一个存储写给子站的数据,读和写都指向子站的同一个寄存器,读命令周期执行,写命令只在数据变化时执行。这样另一个问题就出现了,如果子站通过触摸屏修改了开度,读变量能显示当前开度,但是写变量还是保持上次的设置值,为了同步显示只能记录开度的历史值,如果跟当前值不一致就把当前值复制给开度设置,并且这个操作只能在判断不一致时执行一次,不能一直执行。这样如果鼓风机开度变化会执行如下过程:MB读命令读取新开度值显示——新开度与历史开度不一致,将新开度复制给历史开度和开度设定——开度设定变化再执行一次写命令,把同样的开度再写给MB子站——读写数据一致,写命令停止执行。


回复

使用道具 举报

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

本版积分规则

电工学习网 ( )

GMT+8, 2024-4-30 12:49

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

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

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

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