当指令序列仍在处理时输入X1是否会改变?
e.g。
LD X1
AND X2
OUT Y1
LD X1 // Can X1 loaded here differ from the previous one?
AND X3
OUT Y1
由于
答案 0 :(得分:7)
许多(但不是全部)PLC使用IO映像。输入被读取并存储在寄存器中。在处理过程中,您正在使用IO映像。图像在周期结束时更新。这样输入在处理过程中不会改变,但只能在循环之间改变。
答案 1 :(得分:3)
为了补充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 =打开)更新,所有三个梯级将返回Y1打开。
当然,立即指令通常会带来时间损失,因为PLC必须花费额外的时间来寻找接触的当前值而不是从图像中读取。但是,根据您希望程序的运行方式,它们可能很有用。但是,这些指令必须明确使用,正常操作只是从IO图像中读取,正如Jim所说。
ps:我在这里使用“LDI”表示立即指令,但所有PLC都使用不同的语法。例如,Koyos使用STR(存储)代替LD和STRI(立即存储)。
答案 2 :(得分:1)
一种常见的技术是将IO寄存器的副本复制到内部存储器地址,以便程序员可以确保其IO不会在指令之间发生变化。在扫描开始时复制输入,并在扫描结束时复制到输出。
答案 3 :(得分:0)
是的,当然可以 - 在这个时间间隔内变化的可能性非常小,所以如果你有一个错误,你假设这两个值永远不会有差异,那么它可能不会出现一段时间。