大神们ModbusRTU轮询通信,读轮询写优先该怎么写程序呢 点击:2693 | 回复:20



SiegeLion007

    
  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-06-01 09:50:12
楼主
求助帖30分-已结帖

大神们ModbusRTU轮询通信,读轮询写优先该怎么写程序呢



楼主最近还看过



zhangleiChina

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 30回
  • 年度积分:1475
  • 历史总积分:1730
  • 注册:2022年8月05日
发表于:2023-06-01 11:23:32
1楼

我常用的轮训方式有三种,下面以西门子1200为例

  1. 时间轮训,这种最常用也比较稳定,通讯时间可调,下图中可见;

  2. 移位轮训,本质上是时间轮训,形象点可以理解为流水灯的模式;

  3. DONE、ERROR轮训,就是将第一个通讯的完成位和故障位作为第二个通讯的开始,优点是通讯速度很快,缺电是比较容易通讯卡死。

    image.png

SiegeLion007

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-06-01 11:40:26
2楼

"zhangleiChina" 的回复,发表在1楼
        对内容: 【我常用的轮训方式有三种,下面以西门子1200为例1、时间轮训,这种最常用也比较稳定,通讯时间可调,下图中可见;2、移位轮训,本质上是时间轮训,形象点可以理解为流水灯的模式;3、DONE、ERROR轮训...】进行回复:

        -----------------------------------------------------------------


我用的第三中完成位来触发下一个的通信轮询,通信太多读写在一起,有一个通信不上就会卡死,或者说轮询的时间太长,写入指令会要很长时间。

关育谋

  • [版主]
  • 精华:5帖
  • 求助:22帖
  • 帖子:738帖 | 5640回
  • 年度积分:68
  • 历史总积分:84034
  • 注册:2004年5月28日
发表于:2023-06-01 22:52:52
3楼

读操作轮询执行,每次读操作执行完成后判断有没有写操作,如果有写操作,优先执行写操作;如果没有写操作,执行下一个读操作,依次循环。那么写操作就要预先暂存,将写操作数据暂存,然后预写标志位置位,这个时候一次读操作完成后就去判断这个预写标志位,如果置位就去把写操作执行标志位置位,去执行写操作;如果没有置位,那就顺序执行下一个读操作。

请叫我王老湿

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:622帖 | 8548回
  • 年度积分:26
  • 历史总积分:335297
  • 注册:2011年4月25日
发表于:2023-06-02 08:28:36
4楼

"zhangleiChina" 的回复,发表在1楼
        对内容: 【我常用的轮训方式有三种,下面以西门子1200为例时间轮训,这种最常用也比较稳定,通讯时间可调,下图中可见;移位轮训,本质上是时间轮训,形象点可以理解为流水灯的模式;DONE、ERROR轮训,就是将第一...】进行回复:

        -----------------------------------------------------------------


初始化完成位用来启动第一个触发,第一个完成位启动第二个触发,第二个触发又去触发第一个,然后就是搞个超时,如果第一个完成位超时就启动第二个,不受第一个通信异常影响

水边清浅横枝瘦

  • 精华:0帖
  • 求助:4帖
  • 帖子:78帖 | 3491回
  • 年度积分:9
  • 历史总积分:5665
  • 注册:2006年7月11日
发表于:2023-06-02 08:53:45
5楼

写优先难一些,将输入与历史值比较,一样就跳过。不一样就先写。

121111115

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 378回
  • 年度积分:594
  • 历史总积分:21966
  • 注册:2016年1月20日
发表于:2023-06-02 09:17:54
6楼

你们整这么复杂做什么?写优先每个轮询周期都让他优先不就得了?对于PLC的梯形图扫描周期来讲,他是从上到下从左至右的扫描的,你只要保证写操作在读操作之前被扫描那就是写优先啊。f3864adcc383e8bc0db0f82d740aa8e.png

如上图,先写再读,每个周期都这样,需要写入就写,不需要就原值写入。这优先不优先的不就是谁先被执行吗?

H42123999

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 270回
  • 年度积分:29
  • 历史总积分:5187
  • 注册:2012年9月22日
发表于:2023-06-02 09:42:49
7楼

http://bbs.gongkong.com/d/202109/870478/870478_1.shtml


关注这位大佬  关育谋   都是Modbus相关学习教程!

太月星辰

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 349回
  • 年度积分:583
  • 历史总积分:3218
  • 注册:2011年11月02日
发表于:2023-06-02 16:58:36
8楼

"关育谋" 的回复,发表在3楼
        对内容: 【读操作轮询执行,每次读操作执行完成后判断有没有写操作,如果有写操作,优先执行写操作;如果没有写操作,执行下一个读操作,依次循环。那么写操作就要预先暂存,将写操作数据暂存,然后预写标志位置位,这个时候一...】进行回复:

        -----------------------------------------------------------------


不错!我也有遇到这种情况,想不通怎么解决定时读和偶发随机写会导致冲突的问题,这个方法受教了。后续做上位机也需要这种理念,感谢!

SiegeLion007

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-06-05 11:30:56
9楼

"请叫我王老湿" 的回复,发表在4楼
        对内容: 【"zhangleiChina" 的回复,发表在1楼        对内容: 【我常用的轮训方式有三种,下面以西门子1200为例时间轮训,这种最常用也比较稳定,通讯时间可调,下图中可见;移位轮训,本质上...】进行回复:

        -----------------------------------------------------------------


没毛病,通信多的话总回有些延时的对吧

SiegeLion007

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-06-05 11:32:21
10楼

"关育谋" 的回复,发表在3楼
        对内容: 【读操作轮询执行,每次读操作执行完成后判断有没有写操作,如果有写操作,优先执行写操作;如果没有写操作,执行下一个读操作,依次循环。那么写操作就要预先暂存,将写操作数据暂存,然后预写标志位置位,这个时候一...】进行回复:

        -----------------------------------------------------------------


谢谢,大神讲解,我去研究下程序改怎么写

SiegeLion007

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-06-05 11:32:34
11楼

"H42123999" 的回复,发表在7楼
        对内容: 【http://bbs.gongkong.com/d/202109/870478/870478_1.shtml 关注这位大佬  关育谋   都是Modbus相关学习教程!...】进行回复:

        -----------------------------------------------------------------


好的

SiegeLion007

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-06-05 11:34:22
12楼

"121111115" 的回复,发表在6楼
        对内容: 【你们整这么复杂做什么?写优先每个轮询周期都让他优先不就得了?对于PLC的梯形图扫描周期来讲,他是从上到下从左至右的扫描的,你只要保证写操作在读操作之前被扫描那就是写优先啊。如上图,先写再读,每个周期都...】进行回复:

        -----------------------------------------------------------------


写操作在读操作的前面?我就是这样子写的,通信多的话轮询下来需要好久

ac米兰

  • 精华:4帖
  • 求助:0帖
  • 帖子:234帖 | 12437回
  • 年度积分:3891
  • 历史总积分:30723
  • 注册:2004年4月26日
发表于:2023-06-09 16:12:17
13楼
都不如国产的方便。信捷的同时通讯也没有什么问题

121111115

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 378回
  • 年度积分:594
  • 历史总积分:21966
  • 注册:2016年1月20日
发表于:2023-06-12 11:54:11
14楼

引用 "SiegeLion007" 的回复,发表在12楼
        内容: "121111115" 的回复,发表在6楼        对内容: 【你们整这么复杂做什么?写优先每个轮询周期都让他优先不就得了?对于PLC的梯形图扫描周期来讲,他是从上到下从左至右的扫描的,你只要保...

设备很多,如果你想让写操作响应更快的话,在访问每个从站时都执行一次写操作,每次读轮训前都写一遍,这样会快很多,但是需要的指令块就更多了,所以你需要研究如何用间接寻址的方式填充从站指令快。

冲出枪林弹雨

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 62回
  • 年度积分:438
  • 历史总积分:1059
  • 注册:2015年9月04日
发表于:2023-06-12 22:17:40
15楼

早前有做一个40多轴的项目,三菱PLC,伺服主要是三菱的光纤型,步进用了13个雷赛的,对步进轴的要求没有伺服高,但要求实时读取轴的位置速度,以及人员操作任意轴没有延时的感觉;实现这个效果,就需要考虑到数据的采集量以及实时响应用户操作上。

1、波特率尽可能的使用硬件允许的最高频率;

2、485使用双脚屏蔽线,接好地线,避免干扰;

程序方面有下面几点。

第一:配合触摸屏,实现选择性的读取数据,例如当前要显示的数据;

第二:优先响应当前操作轴的写入指令;

第三:其他优先级低的待刷新指令;

优先级:操作指令(自动和手动)> 读取当前显示的数据及反馈位置数据 > 其他待刷新数据


thestarinsky

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 3回
  • 年度积分:94
  • 历史总积分:144
  • 注册:2017年12月25日
发表于:2023-07-10 00:12:36
16楼

引用 "关育谋" 的回复,发表在3楼
        内容: 读操作轮询执行,每次读操作执行完成后判断有没有写操作,如果有写操作,优先执行写操作;如果没有写操作,执行下一个读操作,依次循环。那么写操作就要预先暂存,将写操作数据暂存,然后预写标志位置位,这个时候一...


这个思路比较好,保证周期读取,及时控制就好了,如果有例程,可以分享大家看一下

Smile-lyc

  • [管理员]
  • 精华:128帖
  • 求助:50帖
  • 帖子:3484帖 | 22331回
  • 年度积分:1963
  • 历史总积分:145694
  • 注册:2006年8月04日
发表于:2023-07-14 16:03:44
17楼

感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。

对于求助者要求:

1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬赏求助)发放给答疑者;

2、如果在求助答疑过程中,自己已经有效解决问题,建议大家把解决问题方法在自己求助帖分享,有效分享可以获得50积分奖励。

3、求助答疑板块版主结贴时间一般滞后30~45天,以方便大家对求助问题答疑足够时间,也为了每一个优秀答疑人员都可以获取到自己的积分和MP奖励。

4、2023加油!!


SiegeLion007

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 23回
  • 年度积分:73
  • 历史总积分:73
  • 注册:2023年4月04日
发表于:2023-08-13 13:20:13
18楼

"Smile-lyc" 的回复,发表在16楼
        对内容: 【感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。对于求助者要求:1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬赏求助)发放给答疑者;2、如果在求助答疑过程中,自己已经有效解决问题,建...】进行回复:

        -----------------------------------------------------------------


怎么结帖啊

Smile-lyc

  • [管理员]
  • 精华:128帖
  • 求助:50帖
  • 帖子:3484帖 | 22331回
  • 年度积分:1963
  • 历史总积分:145694
  • 注册:2006年8月04日
发表于:2023-08-13 16:52:44
19楼

引用 "SiegeLion007" 的回复,发表在17楼
        内容: "Smile-lyc" 的回复,发表在16楼        对内容: 【感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。对于求助者要求:1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬...



悬赏贴如何结贴?这里看过来!

http://bbs.gongkong.com/d/201810/772613/772613_1.shtml  



yun2020

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 491回
  • 年度积分:206
  • 历史总积分:742
  • 注册:2020年12月18日
发表于:2023-08-31 10:57:13
20楼

游泳池设备如果没有写操作,游泳池水泵执行下一个读操作,依次循环。那么游泳池工程写操作就要预先暂存,将写操作数据暂存,然后游泳池水质处理系统预写标志位置位,私家别墅游泳池水处理系统方案这个时候一次读操作完成后就去判断这个预写标志位,如果置位就去把写操作执行标志位置位,去执行写操作;如果没有置位,那就顺序执行下一个读操作。

LayOutNo1

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 26回
  • 年度积分:48
  • 历史总积分:728
  • 注册:2021年11月14日
发表于:2023-10-23 10:14:51
20楼

正好自己也在做需要轮询的项目,学习,感谢。


热门招聘
相关主题

官方公众号

智造工程师