发布于 2009-11-19 20:27:11
10楼
你是不是想问=语句与S语句在你错误的程序好象功能一样了?
首先,你要有个概念,所有的PLC都是顺序扫描的,程序是一条一条执行的。无论你用STL语言还是LAD语言都一样。
一般的=语句表达的是实时的RLO状态,即它前面条件的实时状态。但这是表面现象。举个例子:
A M1.0
JC L001
A M1.1
= M2.0
L001: NOP 0
1)当M1.0为“0”时,跳转不执行,程序直接向下运行执行代码——
A M1.1
= M2.0
此时M2.0与M1.1同状态
2)当M1.0为“1”时,跳转执行,程序跳过代码,直接执行最后的NOP语句
你是不是认为此时M2.0应该为“0”了,这是错误的。M2.0的状态与M1.0跳向“1”前的M1.1状态一致。
3)如下例子,假设M1.0为“1”
第1次循环扫描
语句1 M2.0为“0”
…… M2.0为“0”
语句n M2.0为“0”
A M1.0 M2.0为“1”
= M2.0 M2.0为“1”
语句n+1 M2.0为“1”
…… M2.0为“1”
语句n+n M2.0为“1”
第2次循环扫描
语句1 M2.0为“1”
…… M2.0为“1”
语句n M2.0为“1”
A M1.0 M2.0为“1”
= M2.0 M2.0为“1”
语句n+1 M2.0为“1”
…… M2.0为“1”
语句n+n M2.0为“1”
第3次循环扫描 假设此时M1.0变为“0”
语句1 M2.0为“1”
…… M2.0为“1”
语句n M2.0为“1”
A M1.0 M2.0为“1”
= M2.0 M2.0为“0”
语句n+1 M2.0为“0”
…… M2.0为“0”
语句n+n M2.0为“0”
以上例子说明,只有在执行=指令时M2.0的状态才有可能发生变化,其它时刻是保持不变的。