重复输出的问题探讨

分享到:
261
下一篇 >

菜鸟:

我这有个别人做的程序,分别是在FC1和FC9中同时输出一个M75.0的线圈,且这两个功能同时被OB1调用,这在我感觉不应该出现这样的情况,但为什么编程软件还允许通过呢?

侠士:

我觉得可能是虽然这样做有时候不符合逻辑,但语法没问题

我们公司的报警通用程序就是每个可能产生报警的程序一个FC,每个报警FC的输出(高报警)都是一个点,所有的报警FC都在一个FC中调用,虽然看着奇怪但一直这么用

OB1是循环扫描的,扫描到FC1,以FC1的输出M75.0生效,扫描到FC9就以FC9的输出生效,这时正常的。

菜鸟:

其实一般PLC的工作周期是:输入采样-程序执行-输出刷新。

本问题涉及到的是程序执行-输出刷新这两步,PLC一般是将所有的程序都执行完再进行输出刷新的。

所以如果把同时输出给M75.0的程序都编写在OB1中,那么只能是*后一行输出给M75.0的程序有效,前面的都失效了。

因为前面的程序在给M75.0赋值的时候如果给其赋“1”,此时程序没有全部执行完,不会刷新输出,而如果后面的程序却给其赋“0”,若此后没有其它给M75.0赋值的程序了,那么M75.0便为“0”,然后等程序都执行完会刷新输出时M75.0便为“0”。

因此,无论前面的程序使之为“1”还是“0”,后面的程序使之为“0”,*终的输出便为“0”;而同样,不管前面的程序使之为“1”还是“0”,后面的程序使之为“1”,*终的输出便为“1”。

但是如果将这两个同时对M75.0的程序编写在不同的FC中,且后面的FC在OB1中调用时前面增加一个调用条件。当其不满足时,后面的FC便不会调用,也就不会去执行,那么前面的FC如执行完,如果后面没有别的程序就会进入到输出刷新这步了。这时两个同时对M75.0写的程序就不会有冲突。但当后面那个FC的调用条件满足时,情况就和前面说的同在OB1中的情况一样了。

这些是我刚刚用PLC试过的。

斑竹:

双线圈是可以通过编译的

侠士:

双线圈可以通过编译的,程序扫描的时候以后一个满足条件的输出

斑竹:

西门子PLC可以,三菱的PLC就不允许有双线圈的现象,建议编写时合到一处。

侠士:

虽然不会检查出错误,可以执行,但我认为这在编程中就是个错误,两个线圈同时发挥作用,这很明显**个永远也不会执行。


你可能感兴趣: 工控菜鸟园 自动化系统 PLC
无觅相关文章插件,快速提升流量