属性: no_virtual_actions
プラグマは、SFC で実装されたファンクション ブロックから派生し、この基本クラスの基本的な SFC シーケンスを使用するファンクション ブロックに使用されます。そこから呼び出されるアクションは、メソッドと同じ仮想動作を示します。これは、基本クラスのアクションの実装を、独自の特定の実装を持つ派生クラスに置き換えることができることを意味します。
プラグマを基本クラスに適用すると、そのアクションはオーバーロードから保護されます。
構文:
{attribute 'no_virtual_actions'}
挿入場所:関数ブロックの宣言部分の先頭行
機能ブロック POU_SFC
派生関数ブロックの基本クラスです POU_child
.派生クラス POU_child
SFCで書かれた基底クラスのシーケンスを特殊変数で呼び出す SUPER
.


このシーケンスの実装例は、最初のステップに限定され、その後にステップ アクションがリンクされた単一のステップが続きます。 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
.予想どおり、文字列の値は、派生クラスのアクションとメソッドの呼び出しを反映しています。

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