子程序问题

有两个小程序
 1.主程序:LD         SM0.1
                    CALL     SBR_0:SBR
    子程序:LD          SM0.0
                    =             Q0.0
 为什么Q0.0一直输出?
 2.主程序:LD         SM0.1
                    CALL     SBR_0:SBR
    子程序:LD          SM0.0
                    TON        T37,10
                    LD           T37
                    =              Q0.0
 为什么Q0.0不输出?
 两个程序的区别在哪里?

最佳答案

从程序的执行结果来看,第一个程序Q0.0肯干是一直输出,第二个程序Q0.0肯干是不输出。
  首先要注意SM0.1的意思,它指的是:首次扫描周期时该位打开,一种用途是调用初始化子程序。它只ON一个扫描周期,在这一个扫描周期你第一个程序调用了SBR_0,而SBR_0中有SM0.0(一直ON),从而使Q0.0ON,一个扫描周期完后,SM0.1不再ON,所以SBR_0也不再调用,所以子程的内容也不再执行,按理说Q0.0应该OFF,但根据PLC的原理,所有的数据,位等等都是以最后一次执行结果来定。所以就不难看出Q0.0ON后就没有再被执行,所以它一直NO。而第二个程序有一个时间的延时,而这个时间的延时,远远大于PLC的周期扫描时间,所以Q0.0永远不会ON。

提问者对于答案的评价:
您的解释非常好,谢谢!

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc358761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午10:38
下一篇 2021年7月5日 上午10:38

相关推荐

发表回复

登录后才能评论