属性: 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'
:
