マニュアルで警告されているのは、正しくない場合、命令 A は C が真 (微分命令) になった後に 1 回だけ実行されますが、命令 B の実行は、A で実行された命令の条件フラグの状態に依存するということです。 . A が 1 回だけ実行される場合、条件フラグは現在の PLC スキャンに対してのみ有効です。C が満たされた後続の PLC スキャンは、微分命令 A を実行しませんが、微分命令 B を実行する場合があります。前のラングが比較演算を実行し、グローバル条件フラグを TRUE に設定した場合。
グローバル変数の危険性を理解していれば、これは基本的に同じことです。PLC ロジックの一部のフラグは、特定の命令で使用されるグローバル フラグです。これらは、命令が実行された直後にのみ有効であり、異なるデータに対して実行されるたびに変更されます。誤ったケースでは、保護されていないラングが、実行が保証されていない操作のグローバル条件フラグにぶら下がっています。
正しいケースでは、命令の代わりに実行条件が区別されます。C が真になると [DIFU D] になります。これにより、次の PLC スキャンでのみ D が true になります。C が FALSE から TRUE になるたびに、D は 1 つの PLC スキャンでのみ true になります。これにより、命令 A (条件フラグ値を生成する) が 1 回だけ実行されることが保証され、さらに、命令 B を公開する条件フラグに遭遇するたびに実行されることが保証されます。
編集 : 問題のある実行フロー - 比較操作を実行したばかりでない限り、CF の状態は RANDOM (より正確には、制御されていません!) です。プログラム全体の他のすべての比較操作は、比較命令がプログラム内のどこかで実行されるたびに、その値を変更します!
STATE C Instruction A CF(=) InstructionB
Scan #1 : OFF N/E RANDOM N/E
Scan #2 : ON EXECUTES > TRUE TRUE EXECUTES //desired
Scan #3 : ON N/E RANDOM(T) N/E
Scan #4 : ON N/E RANDOM(F) N/E
Scan #5 : ON N/E RANDOM(T) *EXECUTES*!! //UNDESIRED
ここで、C がオンのままである限り、命令 B は、プログラムの他の領域での他の比較操作により、CF が FALSE から TRUE に切り替わるたびに実行されます。これは望ましくありません。InstructionA が実行され、CF= が TRUE として返された場合にのみ、InstructionB を実行する必要があります。