【问题标题】:A Question About PLC Instructions关于PLC指令的一个问题
【发布时间】:2011-03-06 06:42:47
【问题描述】:

在指令序列仍在处理期间,输入 X1 是否可以更改?

例如

LD X1
AND X2
OUT Y1

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

谢谢

【问题讨论】:

  • 您可能应该在此处指定您所说的 PLC 类型

标签: plc


【解决方案1】:

许多(但不是全部)PLC 使用 IO 映像。输入被读取并存储在寄存器中。在处理期间,您正在使用 IO 映像。图像在循环结束时更新。这样输入在处理过程中不能改变,而只能在循环之间改变。

【讨论】:

  • 附加说明:一些 PLC 可以有不同的 IO 映像(每个 PLC 任务 1 个)。因此,如果您在另一个与更新 IO 的任务不对应的任务中运行此代码,则该值可能会发生变化。您应该确保在正确的任务中执行代码。
【解决方案2】:

为了补充 Jim C 的答案,值得注意的是,许多(大多数?)PLC 将允许您使用特殊的“立即”类型指令,直接读取触点/继电器/输入/等的状态(与从 IO 映像读取相反)当 CPU 扫描到达该特定梯级时。这通常不会更新 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(立即存储)。

【讨论】:

    【解决方案3】:

    一种常见的技术是将 IO 寄存器复制到内部存储器地址,这样程序员就可以确保他的 IO 在指令之间不会改变。在扫描开始时复制输入并在扫描结束时复制到输出。

    【讨论】:

      【解决方案4】:

      是的,当然可以——它在这个间隔内发生变化的可能性非常低,所以如果你有一个错误,你认为这两个值永远不会不同,那么它可能暂时不会出现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多