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

已锁定

zy5840

  • 帖子

    29
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2017-03-06

普通 普通 如何晋级?

发布于 2020-12-08 21:55:19

21楼

msg的done标志是“局部变量”,不同位置的msg指令都维护自己的done标志,“通讯令牌”是“全局变量”,任一过程都能访问(读写)

任一过程需要发起通讯时前都锁定当前状态,相当于开始排队,然后检查“通讯令牌”,如果通讯忙,只有等待下一次扫描再检查,如果有多个过程需要通讯,则按照过程在程序中的扫描顺序等待,多个过程在程序中的位置可以不连续,可以在主程序或子程序的任何地方;

只有通讯空闲时,也就是上个过程已经完成,无需关心上一个具体是哪一个过程,在主程序或者子程序的什么位置,本过程就会复位通讯令牌(使通讯处于忙的状态),然后发起通讯,并阻止其他过程发起通讯,因为没有了通讯令牌,或者说通讯已经处于忙的状态

通讯完成后再释放令牌,相当于令牌转移到下一个需要通讯的过程的手中

这个方法主要是对200 smart手册(V2.5 01/2020)里msg指令资源争夺解决方法的补充

题外话:上图程序段3有个bug,S  M2.0, 2  应该是S M2.0, 1  好几版手册了,都没改过来


程序在556页还有一部分,我就不贴了

最后说一句,或许这个帖子的名字不应该这么叫,如果叫做“一种西门子Modbus RTU指令库使用时解决资源争夺的方法”更合适一些

本来想给大伙分享一下我遇到的问题的解决方案的,没想到变成对“轮询”的争论,不是我的本意

到此为止吧

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9019条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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