Attribut : no_virtual_actions
Ce pragma est utilisé pour les blocs fonctionnels dérivés d'un bloc fonctionnel implémenté en SFC et utilisant la séquence SFC fondamentale de cette classe de base. Les actions appelées depuis ce pragma présentent le même comportement virtuel que les méthodes. Cela signifie que les implémentations des actions de 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 : ligne supérieure de la partie déclaration du bloc de fonction
Le bloc fonctionnel POU_SFC
est la classe de base pour le bloc de fonctions dérivées 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'implémentation exemplaire de cette séquence est limitée à 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 d'étape est remplacée par une implémentation spéciale de ActiveAction
. Active Action
diffère de l'original uniquement 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 modifie 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 d'étape entraîne désormais un appel de l'action ActiveAction
de la classe de base. Par conséquent test_act
est maintenant donné la valeur 'father_action'
:
