一种不需要轮询的Modbus RTU通讯的方法

已锁定

zy5840

  • 帖子

    24
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2017-03-06

普通 普通 如何晋级?

一种不需要轮询的Modbus RTU通讯的方法

16877

100

2020-12-07 16:31:23

Modbus RTU是很常见的一种通讯方式,西门子200 SMART标准版的CPU都集成一个RS485的通讯端口,再加上有Modbus RTU的标准库,很方便的实现了Modbus RUT通讯。

但是,在实际使用中,西门子的标准Modbus RTU指令Mbus_msg的执行完成需要超过一个扫描周期,所以在程序的任何地方,只能有一个Mbus_msg指令在执行,如果有两个或者两个以上同时执行,则会立即报错,这就是资源的争夺。

西门子200 SMART的手册里给出了一个解决办法,就是:轮询。

轮询的效率不高:

    1.在多个写入的时候,因为有时候写入不是必须的,是根据需要写入,而这个需要又无法确定时间或者次序,轮询的效率就非常低;

    2.有大量需要写入/读取,轮询是没有优先级的,急需的写入/读取不能得到优先的响应;

对于以上两点,我找出一个办法,首先实现了“按需读取/写入”,优先级的问题有个思路,我就偷点懒,请大家想想怎么实现吧。


实现“按需读取/写入”的方法很简单,就是建立一个“通讯令牌”的“全局”的标志位,作为通讯状态的标志,如果“通讯令牌”为1,则表示通讯空闲,可以发起通讯,发起通讯后立即复位“通讯令牌”,这样就阻止了其他过程发起通讯,通讯完成后再置位“通讯令牌”标志,以便其他过程获得。

以上的思路基于“令牌环网”。


第二个问题

在通讯令牌发放完成后,第一个获取令牌的要先进堆栈,然后按照FIFO的规则出站,有优先级高的可以“插队”,需要的话也可以自定义优先级,总之方法也很多。




一种不需要轮询的Modbus RTU通讯的方法 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7542条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。