指令序列仍在处理中时输入 X1 是否可以更改?
例如
LD X1
AND X2
OUT Y1
LD X1 // Can X1 loaded here differ from the previous one?
AND X3
OUT Y1
谢谢
指令序列仍在处理中时输入 X1 是否可以更改?
例如
LD X1
AND X2
OUT Y1
LD X1 // Can X1 loaded here differ from the previous one?
AND X3
OUT Y1
谢谢
许多(但不是全部)PLC 使用 IO 映像。输入被读取并存储在寄存器中。在处理期间,您正在使用 IO 映像。图像在循环结束时更新。这样输入在处理过程中不能改变,而只能在周期之间改变。
为了补充 Jim C 的答案,值得注意的是,许多(大多数?)PLC 将允许您使用特殊的“立即”类型指令,直接读取触点/继电器/输入/等的状态(相反当 CPU 扫描到达该特定梯级时,从 IO 映像中读取数据。这通常不会更新 IO 映像,这意味着在 CPU 扫描的剩余部分中对该触点的所有其他正常读取将读取寄存器中的旧值,除非它们也是“立即”类型。
例子 :
//Start of Program
// Here the CPU scan starts with X1 closed, X2 closed in the IO image
LD X1 //(X1 = closed)
AND X2 //(X2 = closed)
OUT Y1 //(Y1 will be set high/closed)
// **suddenly X1 opens**
//(using LDI here to denote "immediate")
LDI X1 //(open - reading true status)
AND X2 //(closed)
OUT Y1 //(Y1 will now open)
LD X1 //(reading from image = closed, still)
AND X2 //(closed)
OUT Y1 //(Y1 will close again)
END of Program
然后,在下一次 CPU 扫描中,图像将更新为新值 (X1=open),所有三个梯级都将返回 Y1 打开。
当然,立即指令通常会带来时间损失,因为 PLC 必须花费额外的时间来寻找触点的当前值,而不是从图像中读取。但是,它们可能很有用,具体取决于您希望程序如何运行。然而,这些指令必须明确使用,并且正常操作只是从 IO 映像中读取,正如 Jim 指出的那样。
ps:我这里用“LDI”来表示立即指令,但是所有的PLC都会使用不同的语法。例如,Koyos 使用 STR(存储)而不是 LD 和 STRI(立即存储)。
一种常见的技术是将 IO 寄存器复制到内部存储器地址,这样程序员就可以确保他的 IO 在指令之间不会改变。在扫描开始时复制输入并在扫描结束时复制到输出。
是的,当然可以——它在这个间隔内变化的可能性非常低,所以如果你有一个错误,你认为这两个值永远不会不同,那么它可能暂时不会出现。