发布于 2014-08-22 17:27:40
3楼
其实一般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试过的。
苦修内功