来自西门子技术支持热线的故事:小小跳转指令也有大智慧

已锁定

西门子Auto

官方工程师

  • 帖子

    126
  • 精华

    16
  • 被关注

    234

论坛等级:侠圣

注册时间:2007-08-03

普通 普通 如何晋级?

来自西门子技术支持热线的故事:小小跳转指令也有大智慧

5682

19

2011-12-29 16:38:48

曾经最初学习PLC STL编程的时候,发现很多老外的程序最后都喜欢加上SET/SAVE/CLR 这样的指令,一直也没搞懂为啥,心想可能就是各人习惯吧,没啥影响。但是今天的一个小CASE,让我顿时醒悟,到底什么叫严谨,且让我慢慢道来。
如图1所示,客户程序希望实现的功能是,当M0.0=0,跳转指令不执行,则对M0.2置位;M0.0=1, 跳转指令执行,则M0.2保持复位状态。我们在程序的开始编写逻辑,监控结果如图1,可以看到逻辑没有问题。但是,我们的逻辑如果处于程序的中间位置,那会是什么情况呢,我们来看看。如图2,网络1中只是加了一条指令,但是在网络2中我们可以看到,此时无论M0.0是0还是1,M0.2都处于置位状态,也就是说跳转指令根本不执行,这是为什么呢?



图1



图2
首先,我们看一下“JC”指令,“JC”指令跳转的条件是RLO=1,RLO存储的是逻辑运算的结果,如图3,我们通过监控可以看到,当前,M0.0虽然为1,但是RLO位仍然是0。网络1和网络2虽然处于不同的网络,但是逻辑运算并没有因此结束,也就是说一系列的与或非运算没有结束前,不会开始一个新的逻辑运算(我们从状态字的第一位 /FC,也可以判断, /FC=0,表示逻辑运算结束,从下一个逻辑指令开始一次新的逻辑运算,如图3)。所以此时RLO位的结果不光取决于M0.0,还取决于网络1中的M20.0的状态, 这当然不是我们希望实现的了。



图3
那我们该如何避免这种情况呢?也就是说要M0.0和 之前的逻辑运算脱离关系呢?其实,我们的好多指令,都有这样的功能,比如 SET/R/=/CLR等,这些指令执行后,都会结束当前的逻辑运算,从下个逻辑指令开始新的逻辑运算,/FC=0,如图4所示,这样就可以避免网络1的影响。



图4
所以说,细节决定成败啊,尤其是对我们初次接触STL编程来说,该注意的东西还是很多的!小小的跳转指令里还是有好多智慧的!
来自西门子技术支持热线的故事:小小跳转指令也有大智慧 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54648条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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