4

当输出只是在功能块图中分配输入值时,使用 MOVE 块而不是直接连接有什么区别?

移动示例

4

1 回答 1

2

“连线”告诉您,左边的梯形代码(AND、OR、...)计算的布尔值在右边使用。它不会导致任何“记忆”发生变化。(你只画电线会使图表变得混乱;你真的应该在电线的两端显示操作员。)

MOVE 操作符使任何类型的一个内存位置的内容有条件地复制到另一个。使用 MOVE 运算符,您可以将整数、浮点数或其他更复杂的值复制到新目标;我不记得您是否也可以进行值强制(例如,int to float),但我猜这因控制器而异。作为副作用,MOVE 运算符将左侧的输入布尔值复制到右侧的输出布尔值;梯形逻辑中的大多数“块”操作符都是这样做的。但是该输入布尔值控制块是否实际执行其操作。在您的示例中,您显示了 MOVE 块,但没有显示关键参数: from 和 to 位置;喂它的“线”控制着移动是否真的发生。所以一个更好的移动示例是:

---| X |------| MOVE(P,Q) |---( Y )---  

这就是说,“如果 X 为真,则将 P 复制到 Q,并将真(来自 X)分配给 Y;如果 X 为假,则不移动任何内容,并将假(来自 X)分配给 Y。” (X 的布尔值通过 MOVE 块复制)。

由于 MOVE 适用于任何类型,因此您可以使用 MOVE 将内存位置中的布尔值复制到另一个位置;想象一下上面的 P 和 Q 是布尔变量。但是,布尔条件和操作同样有效:

---| X |----( Y )---

将 X 的布尔值复制到 Y 的布尔值。

要真正模拟布尔 MOVE 命令,例如“如果 X 为真,则有条件地将布尔 P 复制到 Q”需要一些复杂的布尔逻辑:

--+--| X |----| P |---+--( Y )----
  |                   |
  |--| *X |---| Y |---|

其中 *X 表示“不是 X”。MOVE 更容易“编写”。

于 2012-10-16T23:24:39.723 回答