Skip to main content

属性: no_virtual_actions

プラグマは、SFC で実装されたファンクション ブロックから派生し、この基本クラスの基本的な SFC シーケンスを使用するファンクション ブロックに使用されます。そこから呼び出されるアクションは、メソッドと同じ仮想動作を示します。これは、基本クラスのアクションの実装を、独自の特定の実装を持つ派生クラスに置き換えることができることを意味します。

プラグマを基本クラスに適用すると、そのアクションはオーバーロードから保護されます。

構文:

{attribute 'no_virtual_actions'}

挿入場所:関数ブロックの宣言部分の先頭行

284.

機能ブロック POU_SFC 派生関数ブロックの基本クラスです POU_child.派生クラス POU_child SFCで書かれた基底クラスのシーケンスを特殊変数で呼び出す SUPER.

_cds_img_pragma_virtual1.png
_cds_img_attribute_nva_ex1.png

このシーケンスの実装例は、最初のステップに限定され、その後にステップ アクションがリンクされた単一のステップが続きます。 ActiveAction.リンクされたステップ アクションを持つこのステップは、出力変数の構成を処理します。

an_int := an_int+1;    // Counting the action calls
test_act := 'father_action';
METH();              // Call of the method METH in order to set the string variable test_meth

派生クラスの場合 POU_child ステップアクションは、特別な実装に置き換えられます ActiveAction. Active Action 文字列の割り当てのみがオリジナルと異なる 'child_action' 代わりに 'father_action' 変数で test_act.

同様に、メソッド METH、文字列を割り当てます 'father_method' 変数に test_meth 基本クラスでは、上書きされるため、 test_meth 今すぐ値を取得します 'child_method'.メインプログラム PLC_PRG 関数ブロックのインスタンスを呼び出します POU_child、名前付き Child.予想どおり、文字列の値は、派生クラスのアクションとメソッドの呼び出しを反映しています。

_cds_img_pragma_virtual3.png

ただし、ここで、プラグマを配置します {attribute 'no_virtual_actions'} 基本クラスの前に:

{attribute 'no_virtual_actions'}

FUNCTION_BLOCK POU_SFC...

これにより動作が変わります: 派生クラスの実装は引き続きメソッドに使用されます。 METH、ステップアクションの呼び出しはアクションの呼び出しになります ActiveAction 基本クラスの。したがって test_act 値が与えられるようになりました 'father_action':

_cds_img_pragma_virtual4.png