关于PLC指令的一个问题

时间:2010-06-21 11:24:28

标签: plc

当指令序列仍在处理时输入X1是否会改变?

e.g。

LD X1
AND X2
OUT Y1

LD X1 // Can X1 loaded here differ from the previous one?
AND X3
OUT Y1

由于

4 个答案:

答案 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)

是的,当然可以 - 在这个时间间隔内变化的可能性非常小,所以如果你有一个错误,你假设这两个值永远不会有差异,那么它可能不会出现一段时间。