网站首页 > 编程文章 正文
在做PLC的modbus主站通讯时,可能很多初学者都会碰到这样一个问题,就是一些读写型变量该如何来处理,因为modbus通讯程序有读和写的函数,但是我们在使用modbus通讯变量时,有读写型的变量,用的是一个地址;而我们读取和写入时,分别会用到两个地址;如何把这两个地址共用到一个地址上去呢?从而实现读写型的变量,通过读函数和写函数最终回归到一个地址。下面以西门子S71200PLC为例进行说明。
西门子官方对于modbus RTU通讯的技术方档请参数如下地址:
http://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/SmartSMS/016.html
以下是我在调试过程中遇到的问题;需要注意。
注意事项:
1、作modbus主站时,缓冲区数据块需把"优化块的访问"的勾去掉,不然会报16#818C错误。
需求:
对一台台达变频器的当前频率进行读取,并可读写设定频率,其中当前频率的地址为42003,设定频率的地址为48194
编程步骤如下:
1、modbus初始化配置:
2、初始化完成后,将轮询步骤赋值为1
3、读取3号功能码,如读取完成,或错误,则将缓冲区数据转移到相应变量。
4、对于读/写型变量,需要先判断设定值是否改变,原则上先写后读。
如下图所示:首先判断设定值是否改变,如未改变,则跳到读取设定值的步骤。
如设定值发生改变,则将设定值赋值到设定值临时变量和写数据缓冲区。然后再跳转至写操作步骤。
5、将设定值写入设备。MODE需改成1
6、设定值写入完成后,将跳转至下一步;直接读取刚刚写入的设定值。这样在上位机界面中就能第一时间反应出来是否写入成功。
7、在设定值读取后成时,会将读取缓冲区的值赋值给设定值变量;但是在赋值之前,需要再次判断一下;设定值有没有发生改变,因为如果在读取设定值的过程当中设定值发生了改变,而这个时候如果没有判断是否发生改变直接赋值,原来改变的设定值将会被读取的缓冲值替代掉;这样将会造成设定值未写入成功的情况。
所以需要在读取完成后,需要再次判断一下设定值是否改变,
1、如未改变,则将读取缓冲区的值赋值给设定值和临时变量。
2、如改变了,则重新将设定值赋值给临时变量和写数据缓冲区。然后再重新跳转到写数据的步骤;再重新写入,写入完成后再重新读取。
总结:modbus通讯因为是半双工;所以在持载多从站或需要读取写入多段数据时,必须用到轮询;而在轮询时,需要注意读取和写入的时序问题;否则很容易让一个读写型的变量出现未被写入成功的情况。即在轮询过程中有可能还未被写入成功就已被轮询的读取给覆盖了。如有初学者还有疑问或想要沟通的可以点击关注并留言评论。当然也欢迎大家一起沟通。
猜你喜欢
- 2024-10-16 Modbus通讯协议格式简介(modbus通讯协议格式详解过程)
- 2024-10-16 1200PLC Modbus TCP 通讯(1200的modbus tcp)
- 2024-10-16 modbus协议实例讲解(modbus几种协议区别)
- 2024-10-16 FOXBORO fbm230 现场设备系统集成商(FDSI)Modbus 主站驱动程序
- 2024-10-16 虹科干货 | 教您如何解析MODBUS中的浮点型数据
- 2024-10-16 MODBUS通信异常?调试助手来帮忙(modbus调试软件)
- 2024-10-16 全面讲解Modbus RTU通信及指令,初学PLC必看!
- 2024-10-16 力控组态软件modbus-rtu、modbus-tcp的用法
- 2024-10-16 你好,我是Modbus TCP协议(modbus tcp master)
- 2024-10-16 西门子S7-1200 和CB1241 MODBUS RTU 通信
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)