Skip to main content

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

Exemple 284.

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.

_cds_img_pragma_virtual1.png
_cds_img_attribute_nva_ex1.png

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 :

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

_cds_img_pragma_virtual4.png