SFCのアクションの修飾子
修飾子は、ステップに関連付けられたIECアクションに割り当てます。修飾子は、それぞれのアクションの実行動作、つまり、どのように、いつ、どのくらいの時間実行されるかを定義します。
修飾子は、ライブラリIecSfc.libraryのファンクションブロックSFCActionControlによって処理されます。このライブラリは、CODESYS SFCがインストールされるとすぐに、プロジェクトに自動的に組み込まれます。
詳細については、以下を参照してください。SFCでのプログラミング
| 非保存 | アクションは、ステップがアクティブである間だけアクティブです。 |
| 優先リセット |
|
| セット(保存) | アクションは、ステップがアクティブになるとすぐに実行されます。アクションの実行は、ステップが非アクティブ化された後も、リセットされるまで継続されます。 |
| 時間制限 | アクションは、ステップがアクティブになるとすぐに実行されます。アクションは、ステップが非アクティブ化されるか、指定された時間が経過するまで実行されます。 |
| 時間遅延 | アクションは、ステップがアクティブになった後、指定された遅延時間が経過し、かつステップがまだアクティブである場合に実行されます。アクションは、ステップが非アクティブ化されるまで実行されます。 |
| パルス | アクションは正確に2回実行されます。1回目はステップがアクティブになったとき、2回目はステップが非アクティブ化されたときです。 |
| 保存かつ時間遅延 | アクションの実行は、ステップがアクティブになってから指定された遅延時間が経過したときにのみ開始されます。アクションは、リセットされるまで実行されます。 |
| 遅延かつ保存 | アクションの実行は、ステップがアクティブになってから指定された遅延時間が経過し、かつステップがまだアクティブである場合にのみ開始されます。アクションは、リセットされるまで実行されます。 |
| 保存かつ時間制限 | アクションは、ステップがアクティブになるとすぐに実行されます。指定された時間が経過するか、リセットされるまで実行されます。 |
注記
修飾子S、SD、DS、またはSLを持つアクションは、ステップが非アクティブになった後も実行を継続します。
修飾子S、SD、DSの場合、アクションは、同じアクションを修飾子Rでリセット呼び出しすることによってのみ終了します。アクションを終了するには、この種の呼び出しが必要です。
修飾子SLの場合、アクションは指定された時間が経過するとすぐに自動的に終了するか、Rによる呼び出しによって途中で終了します。
修飾子L、D、SD、DS、SLの時間は、TIME定数の形式で指定する必要があります。
修飾子の適用方法の詳細については、修飾子の例を参照してください。
ヒント
IECアクションは、非アクティブ化されるともう1回実行されます。つまり、CODESYSはこの種のアクションを少なくとも2回実行します。これは修飾子Pを持つアクションにも当てはまります。
修飾子の例
このセクションでは、修飾子の使用例を示します。
例:換気システムにおける排煙換気
アクションの修飾子は、アクションがいつ開始し、どのくらいの時間実行されるかを決定します。この例では、同じプロセスをシーケンシャル ファンクション チャート (SFC) の3つの実装で示します。これらの実装は、修飾子の使用方法が異なります。
初期状況:換気システムは、煙センサーを使用して空気を監視します。センサーが煙を検出すると、コントローラーはただちに排煙換気をアクティブにします。
修飾子Nを使用したPOU

このPOUには、最も単純なフローが含まれています。煙センサーが煙を検出すると、Ventilateアクションを持つステップがアクティブになります。このステップは、修飾子Nでアクションを呼び出します。排煙換気は、センサーが煙を検出している間稼働します。
SFCでPOUを作成し、名前を
Simple_Nに変更します。詳細については、以下を参照してください。SFCでPOUを作成する作成したPOUの宣言部で、次のブール変数を作成します。
PROGRAM Simple_N VAR bSmokeDetected: BOOL; bVent: BOOL; END_VAR初期ステップのトランジションを変更します。トランジションをクリックし、入力アシスタント
を使用して変数bSmokeDetectedを割り当てます。初期ステップのトランジションの後に、
SmokeInSystemという名前のステップを追加します。SmokeInSystemステップのトランジションを変更します。トランジションをクリックし、入力アシスタント
を使用して変数bSmokeDetectedを割り当てます。NOTを追加します:NOT bSmokeDetectedデバイス ツリーで、新しく作成したPOU
Simple_Nを右クリックし、オブジェクトを追加 → アクションコマンドを選択します。名前Ventilateを割り当て、実装言語に構造化テキスト(ST)オプションを設定します。そこに次のコードを挿入します。
// The alternation simulates the running ventilator. bvent := NOT bvent;
SmokeInSystemステップをクリックし、SFC → アクション関連付けを挿入コマンドを使用してアクション関連付けを追加します。これで、関連するアクションにN修飾子が割り当てられます。
関連付けの右側のフィールドをクリックし、入力アシスタント
を使用してVentilateアクションを選択します。簡単な排煙換気が設定されました。
2つの修飾子Nを使用したPOU

問題:システム内に煙が残留しています。そのため、排煙換気をさらに5秒間稼働させる必要があります。
このPOUは、追加のステップを使用して後続時間を処理します。煙センサーが煙を検出すると、Ventilateアクションを持つステップがアクティブになります。このステップは、修飾子Nでアクションを呼び出します。
センサーが煙を検出しなくなると、コントローラーはステップNoSmokeMoreに切り替わります。排煙換気は引き続き稼働します。ステップに続くトランジションは、条件NoSmokeMore.t > t#5sで暗黙のステップ変数を評価します。この変数には、ステップがアクティブになっている時間が含まれます。
5秒後に条件が満たされ、ステップは非アクティブになります。これにより、Ventilateアクションの実行も終了します。
SFCでPOUを作成し、名前を
Advanced_N_Nに変更します。詳細については、以下を参照してください。SFCでPOUを作成する作成したPOUの宣言部で、次のブール変数を作成します。
PROGRAM Advanced_N_N VAR bSmokeDetected: BOOL; bVent: BOOL; END_VAR初期ステップのトランジションを変更します。トランジションをクリックし、入力アシスタント
を使用して変数bSmokeDetectedを割り当てます。初期ステップのトランジションの後に、
SmokeInSystemという名前のステップを追加します。SmokeInSystemステップのトランジションを変更します。トランジションをクリックし、入力アシスタント
を使用して変数bSmokeDetectedを割り当てます。NOTを追加します:NOT bSmokeDetectedデバイス ツリーで、新しく作成したPOU
Advanced_N_Nを右クリックし、オブジェクトを追加 → アクションコマンドを選択します。名前Ventilateを割り当て、実装言語に構造化テキスト(ST)オプションを設定します。そこに次のコードを挿入します。
bvent := NOT bvent;
SmokeInSystemステップをクリックし、SFC → アクション関連付けを挿入メニューを使用してアクション関連付けを挿入します。これで、関連するアクションにN修飾子が割り当てられます。
関連付けの右側のフィールドをクリックし、入力アシスタント
を使用してVentilateアクションを選択します。SmokeInSystemステップのトランジションの後にNoSmokeMoreという名前のステップを追加し、条件NoSmokeMore.t > t#5sを持つトランジションを追加します。NoSmokeMoreステップをクリックし、SFC → アクション関連付けを挿入コマンドを使用してアクション関連付けを追加します。これで、関連するアクションにN修飾子が割り当てられます。
関連付けの右側のフィールドをクリックし、入力アシスタント
を使用してVentilateアクションを選択します。排煙換気は
5秒後に停止します。
修飾子SとRを使用したPOU

問題:システム内に煙が残留しています。そのため、排煙換気をさらに5秒間稼働させる必要があります。
ここでも、コントローラーはただちに排煙換気をアクティブにします。SmokeInSystemステップは、修飾子SでVentilateアクションを呼び出します。ただし、アクションは修飾子Sで保存されており、Rでのみ終了するため、NoSmokeMoreステップの間も排煙換気は稼働し続けます。
このPOUは、追加のNoSmokeMoreステップによって後続時間を処理します。5秒後に条件が満たされ、ステップは非アクティブになります。
追加のAfter_5secステップは、修飾子RでVentilateアクションを呼び出します。このステップはアクションをリセットし、それによって5秒後に排煙換気を停止します。
SFCでPOUを作成し、名前を
Advanced_S_Rに変更します。詳細については、以下を参照してください。SFCでPOUを作成する作成したPOUの宣言部で、次のブール変数を作成します。
PROGRAM Advanced_S_R VAR bSmokeDetected: BOOL; bVent: BOOL; END_VAR初期ステップのトランジションを変更します。トランジションをクリックし、入力アシスタント
を使用して変数bSmokeDetectedを割り当てます。初期ステップのトランジションの後に、
SmokeInSystemという名前のステップを追加します。SmokeInSystemステップのトランジションを変更します。トランジションをクリックし、入力アシスタント
を使用して変数bSmokeDetectedを割り当てます。NOTを追加します:NOT bSmokeDetectedデバイス ツリーで、新しく作成したPOU
Advanced_S_Rを右クリックし、オブジェクトを追加 → アクションコマンドを選択します。名前Ventilateを割り当て、実装言語に構造化テキスト(ST)オプションを設定します。そこに次のコードを挿入します。
bvent := NOT bvent;
SmokeInSystemステップをクリックし、SFC → アクション関連付けを挿入メニューを使用してアクション関連付けを挿入します。関連付けの左側のフィールドをクリックし、入力アシスタント
を使用して修飾子Sを選択します。関連付けの右側のフィールドをクリックし、入力アシスタント
を使用してVentilateアクションを選択します。簡単な排煙換気が設定されました。
5秒後の排煙換気の停止SmokeInSystemステップのトランジションの後にNoSmokeMoreという名前のステップを追加し、条件NoSmokeMore.t > t#5sを持つトランジションを追加します。NoSmokeMoreステップのトランジションの後にAfter_5secという名前の別のステップを追加し、条件TRUEを持つトランジションを追加します。After_5secステップをクリックし、SFC → アクション関連付けを挿入コマンドを使用してアクション関連付けを追加します。関連付けの左側のフィールドをクリックし、入力アシスタント
を使用して修飾子Rを選択します。関連付けの右側のフィールドをクリックし、入力アシスタント
を使用してVentilateアクションを選択します。排煙換気が停止します。