ファンクションブロックダイアグラムで出力に入力値を割り当てるだけの場合、直接接続の代わりにMOVEブロックを使用することの違いは何ですか?
1 に答える
「ワイヤ」は、左側のラダーコード(AND、OR、...)によって計算されたブール値が右側で使用されていることを示します。「メモリ」が変更されることはありません。(ワイヤーだけを描くと、図がわかりにくくなります。実際には、ワイヤーの両端に演算子を表示する必要があります。)
MOVE演算子を使用すると、任意のタイプの1つのメモリ位置のコンテンツが条件付きで別のメモリ位置にコピーされます。MOVE演算子を使用すると、整数、浮動小数点数、またはその他のより複雑な値を新しい宛先にコピーできます。値の強制(たとえば、intからfloat)も実行できるかどうかは思い出せませんが、コントローラーごとに異なると思います。副作用として、MOVE演算子は、左側の入力ブール値を右側の出力ブール値にコピーします。ラダーロジックの演算子のようなほとんどの「ブロック」はこれを行います。ただし、その入力ブール値は、ブロックが実際にアクションを実行するかどうかを制御します。この例では、MOVEブロックを示していますが、重要なパラメーターは示していません。それを供給する「ワイヤー」は、移動が実際に発生するかどうかを制御します。したがって、より良い移動の例は次のようになります。
---| X |------| MOVE(P,Q) |---( Y )---
これは、「Xがtrueの場合、PをQにコピーし、true(Xから)をYに割り当てます。Xがfalseの場合、何も移動せず、false(Xから)をYに割り当てます。」(Xのブール値はMOVEブロックを介してコピーされます)。
MOVEはどのタイプでも機能するため、MOVEを使用して、メモリ位置のブール値を別の位置にコピーできます。上記のPとQがブール変数であると想像してください。ただし、ブール条件とアクションも同様に機能します。
---| X |----( Y )---
Xのブール値をYのブール値にコピーします。
ブールMOVEコマンドを真にシミュレートするには、たとえば、「Xがtrueの場合、条件付きでブールPをQにコピーする」には、複雑なブールロジックが必要です。
--+--| X |----| P |---+--( Y )----
| |
|--| *X |---| Y |---|
ここで、*Xは「Xではない」を意味します。MOVEは単に「書く」のが簡単です。