Skip to main content

属性: no_virtual_actions

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

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

構文

{attribute 'no_virtual_actions'}

挿入場所: ファンクションブロックの宣言部の先頭行

10.

機能ブロック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ステップアクションは、特別な実装に置き換えられます。ActiveActionActive 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