合信论坛

快捷导航
查看: 2767|回复: 0

一种提高modbus通讯效率的方法

[复制链接]

4

主题

5

帖子

336

积分

中级会员

Rank: 2

积分
336
发表于 2022-9-23 10:50:47 | 显示全部楼层 |阅读模式
在对多个从站、多条数据进行modbus通讯时,如果全部以轮询的方式来对数据进行读写,可能会导致通讯周期的大幅延长。
在实际应用中,轮询读数据是有必要的。但写数据时,一般不需要轮询写。
那么我们可以考虑将写这一操作独立出来,在需要的时候再进行写操作,不需要的时候则直接跳过写这一过程。
如图,主站分别读写两个从站的数据。分别读1条,写1条数据。
初始化,将vw100赋值为1vw102赋值为1
图片2.png
设置modbus通讯参数
图片3.png
1、读1号从站数据
图片4.png
2、读2号从站数据
图片5.png
3、写1号从站数据
图片6.png
4、写2号从站数据
vw100是能流控制,用来确定本条modbus指令是否执行。
vw102是跳转长度,用来确定下一个执行哪条modbus指令。
可以看到,用这种方式,在读取数据的时候,如果不触发v50.0写标志,那么程序会一直轮询读取从站12的数据,而不会执行写操作。
而当我们想要向从站写数据时,只需要触发v50.0写标志,这时程序会在本条数据读完成之后,立即停止读操作,转而去写从站1和从站2的数据。当写完成之后,又会自动跳转回到读操作中来,继续轮询读操作。
如果通讯的从站数量太多时,还可以以站号为单位,通过条件来控制读写跳转,做到一次只写一个从站的数据。
还是以两个从站为例,主站分别读每个从站一条数据,写每个从站一条数据。
图片7.png
1、读从站1数据
图片8.png
2、读从站2数据
图片9.png
3、写从站1数据
图片10.png
4、写从站2数据

这里规定 写从站号 = 0时,写全部数据;为1时,只写从站1的数据;为2时写从站2的数据。
可以看出,当写从站号为0时,触发v50.0写标志。那么程序会按照跳转长度一步一步执行写操作,直到写完最后一个数据,回到读操作。
当写从站号为1时,触发v50.0写标志。那么程序会在写完从站1的数据之后,马上回到读操作中去。而不会继续写从站2数据。
当写从站号为2时,触发v50.0写标志。那么程序会在写完从站2的数据之后,马上回到读操作中去。而不会去写从站1数据。
利用这种方法,能做到及时去写一些必要的参数,而不去写一些不相关的数据,这样可以有效地减少modbus通讯的读写周期。
另外像如下图这种按条件跳转的指令,当从站太多时,会变得非常复杂。
图片11.png
那么我们可以考虑利用数学公式来计算每一个从站的起始位置,这样可以减少程序的复杂程度。例如像上面的示例程序,按从站号跳转指令就可以写成这样:
图片12.png
要使用数学公式这种方法的话,只要在安排每个从站读写的能流控制位vw100时,遵循一定的数学规律即可。

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

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2024-9-8 12:48 , Processed in 0.088687 second(s), 23 queries .

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