Attribut : no_virtual_actions
Le pragma est utilisé pour les blocs fonctionnels dérivés d'un bloc fonctionnel implémenté dans SFC et utilisant la séquence SFC fondamentale de cette classe de base. Les actions appelées à partir de celui-ci présentent le même comportement virtuel que les méthodes. Cela signifie que les implémentations des actions dans la classe de base peuvent être remplacées par la classe dérivée avec ses propres implémentations spécifiques.
Si vous appliquez le pragma à la classe de base, ses actions sont protégées contre la surcharge.
Syntaxe:
{attribute 'no_virtual_actions'}
Emplacement d'insertion : première ligne dans la partie déclaration du bloc fonction
Le bloc fonction POU_SFC
est la classe de base du bloc fonction dérivé POU_child
. La classe dérivée POU_child
appelle la séquence de la classe de base écrite en SFC avec la variable spéciale SUPER
.


L'exemple de mise en œuvre de cette séquence est limité à l'étape initiale, suivie d'une seule étape avec une action d'étape liée ActiveAction
. Cette étape avec une action d'étape liée prend en charge la configuration des variables de sortie.
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
Dans le cas de la classe dérivée POU_child
l'action pas à pas est remplacée par une implémentation spéciale de ActiveAction
. Active Action
ne diffère de l'original que par l'affectation de la chaîne 'child_action'
au lieu de 'father_action'
à la variable test_act
.
De même, la méthode METH
, qui attribue la chaîne 'father_method'
à la variable test_meth
dans la classe de base, est écrasé de sorte que test_meth
obtient maintenant la valeur 'child_method'
.Le programme principal PLC_PRG
appelle une instance du bloc fonction POU_child
, nommé Child
. Comme prévu, la valeur des chaînes reflète l'appel de l'action et de la méthode de la classe dérivée :

Maintenant, cependant, vous placez le pragma {attribute 'no_virtual_actions'}
devant la classe de base :
{attribute 'no_virtual_actions'} FUNCTION_BLOCK POU_SFC...
Cela change le comportement : alors que l'implémentation de la classe dérivée est toujours utilisée pour la méthode METH
, l'appel de l'action étape se traduit désormais par un appel de l'action ActiveAction
de la classe de base. Par conséquent test_act
reçoit maintenant la valeur 'father_action'
:
