恭喜,你发布的帖子
发布于 2017-07-23 13:25:47
22楼
这个帖子关注了很久,我讲讲我的观点。
Modbus-RTU通讯是基于任务的通讯,所以多站轮询一般都会涉及到 多站×多任务 这样一个双循环轮询机制,除非参数连续且只有只读或只写的任务,一个任务就能搞定一个站的通讯,事实上很少有这样的应用案例,从站的不确定性决定的。
因此,在这种情况下讲优先级是很徒劳的,不如老老实实依次轮询,至少代码的效率是很高的,且与站点数及任务数的多少是无关的。
讲到提高轮询的速度这个问题,办法是有的:
1. 提高通讯波特率,尽量使用双方都支持的最高波特率,当然通讯距离及EMC的问题要解决好
2. 站点数×任务数 的值越大,轮询的时间间隔就越长,这是没有办法解决的问题,而我们能做的就是把一些重要的站点(响应要求高一点的站点)或重要的任务出现在站点轮询表或任务轮询表的频率提高,这样做的结果就是,单循环总任务数增加,低级别站点轮询时间间隔更长了。
3. 对多个过程仪表的轮询,可以把读写任务循环分开,读任务循环为主循环,而写任务可以形成FIFO列表作为事件任务插入主循环列表,可以在主循环每个读任务之后查询一下是否有写任务,这样代码的效率及轮询时间间隔都是比较优化的。
4. 对于多个传动变频器的轮询,事情就复杂的多,Modbus-RTU的确使用范围很小,建议改DP,PN,Ethernet/IP,Device-Net等高性能的现场总线。如果从站支持广播的报文,可以考虑,但独立单个的操作或读写参数就不可能了。事实上,用MB-RTU连一两个变频做点简单控制也就到头了,想太多太复杂就是给自己挖坑。
5. 控制对象及数量的不同,想点针对性的轮询策略能有些用,而站点数越多其作用就会越小,这是MODBUS-RTU本身的特性所决定的,改善而已,不满意就换方案吧。
本人最近做个项目,一个CPU1212+CM1241,以115.2K的波特率,通过18个滑环与18台V90PTI通讯,每个站点有4个读写任务,实现扭矩控制,整个系统的启动时需要等那么几秒钟的,你能接受就行了。
如果再花点钱,多买2个CM1241,分3组做轮询通讯,那个滞后就感觉不到了,你愿意吗?
请填写推广理由:
分享
只看
楼主