技术论坛

 关于Modbus-RTU轮询通讯的一些看法

返回主题列表
作者 主题
Zane
至圣

经验值: 75765
发帖数: 19245
精华帖: 376
楼主    2019-01-09 13:28:14
主题:关于Modbus-RTU轮询通讯的一些看法 精华帖 

        最近MODBUS-RTU通讯在论坛里讨论得火热,各种问题的焦点在于如何实现可靠的轮询通讯,我提出的观点是用一个MSG指令(200SMART)实现轮询通讯,因为这种方法的实现在技术上有不可替代的优越性:

 

对多个相同站相同的通讯任务:

        举个例子,我有30颗子弹(这里好比30个一样的通讯任务,只是站地址不同),我要30支枪(MSG功能块)来发射这30颗子弹吗?难道不能使用一支枪(一个MSG功能块)来发射这30颗子弹吗?(这就是只用1个MSG指令)。

        这个MSG是汉阳造栓动单发,还是56式半自动,还是95式全自动,这就是相关轮询通讯程序编写的层次高低了。

        解决了自动发射(自动轮询)的问题,我可以在弹匣(通讯任务列表)里,间隔地压上普通弹(读任务)与曳光弹(写任务),就可以实现对多个站的连续的读写任务了。

对不同站的不同通讯任务:

        再举个例子,坦克只有一门炮,可以发射穿甲弹(读 40001开始2个数据),破甲弹(写40005开始3个数据),榴弹(读 40010开始1个数据),炮射导弹(写41000开始的10个数据),坦克根据作战目标的不同,决定了发射的弹种与数量,以及发射次序。这就好比在实际项目中的一个热水锅炉房的控制系统,SMART200 PLC是主控制器,通过Modbus-RTU实现对循环泵变频的调速控制,通过Modbus-RTU读回系统温度/压力变送器及流量传感器的数值,不同的锅炉房,可能变频有两台,温度/压力/流量的仪表数量也会不同,你是说不行要援兵(增加通讯口)还是说一夫档关呢?

最后归结到

如何适应通讯任务类型与数量的变化,而轮询通讯的程序部分不需要随之修改呢?所有的变化应该在哪里?


Zane 注册自动化系统工程师 Always save before download
芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
1楼    2019-01-09 14:28:21
主题:回复:关于Modbus-RTU轮询通讯的一些看法

可终于盼到了。

WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
2楼    2019-01-09 14:46:57
主题:回复:关于Modbus-RTU轮询通讯的一些看法

不知道怎么了,最近我好像也对modbus(200、200smart)通讯杠上了。

关于轮询,我认为是因地制宜的,无论是那种方法必须要满足控制条件为前提的。

之前做过的一些通讯,修改一个参数可能会需要10几秒时间(一个系统中有温度仪大概近20个),频率是9600(温度仪固定的),用户也没有什么反应,我说这个是最经济方法(成本低),用户认可了。

季侠可能会有好的方法,期待他的说法。自己也想一个比较通用的、通讯效率高的方法,至今没有想好。


不断攀登
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
3楼    2019-01-09 16:14:48
主题:回复:关于Modbus-RTU轮询通讯的一些看法

这种成本低的通讯方式决定了 速度不会太快。  能读到就不错了。管他是几秒前的数呢

邮箱 yongquancun@126.com
你以为你是谁
至圣

经验值: 24834
发帖数: 4532
精华帖: 10
4楼    2019-01-09 16:24:16
主题:回复:关于Modbus-RTU轮询通讯的一些看法

这个方法类似300官方的一个例子,把要轮询的地址、波特率和缓存区都变成可变的存储器,用时间来触发计数器,改变这些存储器的数据来轮询。但是,效率提升好像不明显吧?

别人在休息的时候,我往前走。
--意孤行
奇侠

经验值: 5082
发帖数: 519
精华帖: 7
5楼    2019-01-09 17:41:11
主题:回复:关于Modbus-RTU轮询通讯的一些看法

我是来学习的 , 之前轮询做的都是很简单的,轮询只做数据读取(轮询数据分两种,一部分从站每个轮询周期都读取,一部分从站是轮询周期轮流读取),数据写入有需求时候才操作,操作时序时在当前msg完成后执行,写入完成后继续轮询。通讯参数都是通过修改mgs接口变量实现。

缺陷是没做从站超时跳过处理。


认真做事,低调做人
holdkcsxyz
至圣

经验值: 12948
发帖数: 1802
精华帖: 22
6楼    2019-01-09 20:44:25
主题:回复:关于Modbus-RTU轮询通讯的一些看法

       Modbus串行通讯的发生是异步的且收发双方对接受到信息后的处理速度(时序响应)也是异步的,因此定时的轮询是方案但应该不是最佳方案,构造不易丢码的异步环形缓冲队列(甚至构造双缓冲)无疑是处理这种异步时序的最佳手段,以上言之无物.还是听听有应用经验的工程师的高见.

'Razor
至圣

经验值: 20027
发帖数: 2761
精华帖: 22
7楼    2019-01-10 09:23:12
主题:回复:关于Modbus-RTU轮询通讯的一些看法

数据的组织结构形式决定了程序代码的长短,至于效率,得验证验证。

Less is more……
芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
9楼    2019-01-11 11:46:11
主题:回复:关于Modbus-RTU轮询通讯的一些看法

我感觉已经很好了,这种安排。

haoge424
游侠

经验值: 573
发帖数: 122
精华帖: 0
10楼    2019-01-11 11:58:27
主题:回复:关于Modbus-RTU轮询通讯的一些看法

最近做一个运动控制的项目,需要周期性走通讯读取报警代码,还需要通过按钮状态来不定期的发送运动控制的指令,而西门子的msg程序,一次只能一个运行,需利用MSG程序的完成位激活下一个MSG程序,而周期性与非周期性的通讯MSG程序交叉在一起该如何实现?

lf184452
侠圣

经验值: 2440
发帖数: 467
精华帖: 6
11楼    2019-01-11 15:13:48
主题:回复:关于Modbus-RTU轮询通讯的一些看法

周期和非周期先一遍轮训写下来,非周期前面加请求标志,需要通讯的时候操作请求标志即可,另外SMART不支持流程图,可以网络段前面加步号的形式来实现依次执行和跳转。

 

暗铁
游士

经验值: 180
发帖数: 5
精华帖: 0
12楼    2019-01-12 13:56:04
主题:回复:关于Modbus-RTU轮询通讯的一些看法

我最近也是写MODBUS-RTU的通讯,写了两种方式的程序通讯,1、用顺序控制(通讯数量一多,效率就下来了),理论上效率是可以的但时间且不行,打算发帖请教的  2、参照西门子列程编写的(同等设备数量下,效率比第一种方式好点)  。

Zaxife
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
20楼    2019-09-01 15:48:09
主题:回复:关于Modbus-RTU轮询通讯的一些看法
Modbus-RTU轮询?
库本身就是MSG,也就是类似多线程的消息机制。
如果了解消息编程、熟悉多线程多进程的都知道怎么去优化这种通讯的吧?
对于这种不确定的模型,采用Windows系统的消息机制处理就可以了。
开一个子程序专门处理所有通讯请求都放入消息堆栈;再开一个子程序专门提取消息堆栈的消息进行处理。这样就可以把硬件层(串口通讯)、驱动层(消息处理)、应用层(用户通讯处理逻辑)全部分开来,不会因为应该层改变而去改变硬件层、驱动层。

至于通讯逻辑,真没有统一的做法,只能说通讯初始化时把需要的第一个任务消息压入堆栈、消息完成后根据需要压入其他的任务消息。这样是可以仅用一个MSG来处理所有的通讯的,很大程度的避免多个MSG引起的错误6。

不过,对于内存这么少的PLC,真不建议把通讯搞得太复杂到时候内存分配不够了反而把自己坑进去。还是根据实际的项目需求分别优化更实在。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。