技术论坛

 怎样理解Graph的互锁事件

返回主题列表
作者 主题
空果仁
官方工程师
西门子官方工程师西门子官方工程师

经验值:4925
发帖数:210
精华帖:47
楼主    2021-03-16 15:29:50
主题:怎样理解Graph的互锁事件 精华帖 

        这几天和同事测试Graph,遇到一个小问题,就是互锁事件,感觉功能与自己的想法有些差异,难道是一个BUG?

        为了更加清楚问题的原因,先简单介绍一下Graph的编程方式,Graph是一个顺序编程语言,整体相当一个流程图,每一个顺序中包含多个“步”,在“步”中定义一些“动作”,例如调用哪些程序块、置位和复位哪些变量等操作。“步”之间通过“Trans”过渡,如果“Trans”的条件满足,将过渡到下一“步”,上一“步”中的动作将保持或者失效(与限定符有关)。Graph语言只能在FB块中使用,创建一个FB块时,在编程语言的选项中可以选择“Graph”,如图1所示。

        除了“动作”以外,还可以选择一些事件,例如“步”激活或者未激活,每一个“步”的互锁条件满足或者不满足,一个“步”的示例程序如图2所示。


    示例程序中,第一条程序表示如果“步”1离开即未激活,置位M4.1,第二条程序表示如果“步”1激活,置位M4.2,事件S0,S1的触发条件如图3所示。

        测试结果也如所想,“步”激活后,M4.2被置位为1,如图4所示。

        “步”离开后,M4.1被置位为1,如图5所示。

        但是在执行互锁事件时遇到了问题,使用L0和L1表示互锁事件,L0和L1的事件触发条件如图6所示。

        这个图看起来比较怪,从左到右是同一个时间轴,开始还以为是完全分开的。测试时步激活时互锁条件未满足即L1事件触发了,那么第四条程序执行,M1.2被置位为1,程序执行如图7所示。

        结果与所想还是一致的,但是跳转到第二步时即S1离开,第三条程序执行了,M1.1被置位为1了,如图8所示。

        L0是满足互锁条件,互锁条件一直没有满足,为什么会执行?再次仔细查看互锁事件的示意图6,图中说明的是在正常的情况下,互锁条件是满足的,图中两个竖线表示步激活的时间域,如果步激活后,互锁条件未满足执行事件L1,如果互锁条件再次满足则执行L0。我们测试的条件是非正常情况即互锁条件未满足,当步激活后触发时间L1,在步激活期间互锁条件一直未满足,所以L0不触发,当步离开后,L0的触发是因为互锁条件不满足被复位,所以执行了程序,查看Graph实例DB块中互锁的状态也证实这一点。这样的情况有可能在手册的其它地方已经说明,这里没有查看到。总之,不管什么原因,对不确定或者不完全理解的点需要做测试,否则容易造成程序的漏洞,从另外一点也说明了程序的传承和版本管理对程序的质量非常重要!


来自西门工业子技术支持 高级专家
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。