我考虑了一下这个程序,实际上影响该结果的还是我们经常讨论的一些内容:PLC的扫描方式,PLC的双线圈问题。
对于台达PLC而言,每次扫描到PLS指令时,它只判断PLS前面的条件是否有OFF-->ON的过程,有则会将线圈导通一个扫描周期;当然因为双线圈的存在,之后遇到新的线圈触点后它就又判断后一个PLS的条件,有OFF-->ON的过程则继续导通,否则断开。在这种情况下线圈当然无法再保持一个扫描周期了。。(可以理解为,第一个PLS后线圈的结果不会带到下一个PLS中去。)
再回到这段程序,如果没有FOR K100……NEXT的循环,那么在C1=K44的时候,最后边的这个M120是有可能导通的,但因为有了循环程序,在第二次循环时C1=K44的条件仍然满足着,所以没有了OFF-->ON的过程,PLS M120指令执行后M120就被断开,最终跳出循环程序的结果就是M120无法被导通。那么在C1等于其他值的时候,M120也只是在执行第一次循环时能够被导通一下,再扫描到下一个PLS M120的时候就会立即被断开,最终的结果也是M120无法被导通。
----------------------
而对于三菱的PLC,它不仅看PLS前面的条件是否有OFF-->ON的过程,还要看上一行程序中线圈触点的条件是否为ON,可以理解为上一个PLS的结果会带到下一个PLS上来。所以连续的几个PLS条件都满足的话,它只有第一个PLS指令会将线圈导通。而如果这几个连续的PLS中间有一个条件是OFF的,那么该指令执行后会将线圈的状态刷新为OFF,在之后紧接着的一个PLS指令后又能导通一个线圈。。。如此循环。
所以如果这段程序是用于三菱的PLC,那么结果就会变成这样:
1.无视循环程序的存在,循环程序不会影响到最终M120的结果;
2.如果C1=K7、M607为ON,则第一个PLS是能够将M120导通的,直到第二个PLS指令执行后将M120断开;
3.在C1=K7、M607为ON时,即使将C1=...的条件去掉,强行置位其他各PLS指令的导通条件,其他的PLS指令也不能导通M120;
4.如果C1=K44、M660为ON,其他的PLS指令的条件都不能满足,则执行完C1=K44这行的PLS指令后M120会被导通;即使有FOR……NEXT的循环程序,在最后一个循环执行完C1=K44这行的PLS指令后,M120也是导通的,一直维持到本次扫描到END指令。