Skip to main content

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

Exemple 10.

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.

_cds_img_pragma_virtual1.png
_cds_img_attribute_nva_ex1.png

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 :

_cds_img_pragma_virtual3.png

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

_cds_img_pragma_virtual4.png