Skip to main content

Attributo: no_virtual_actions

Il pragma viene utilizzato per i blocchi funzione derivati da un blocco funzione implementato in SFC che utilizzano la sequenza SFC fondamentale di questa classe base. Le azioni richiamate da esso presentano lo stesso comportamento virtuale dei metodi. Ciò significa che le implementazioni delle azioni nella classe base possono essere sostituite dalla classe derivata con implementazioni specifiche proprie.

Se si applica il pragma alla classe base, le sue azioni sono protette dal sovraccarico.

Sintassi:

{attribute 'no_virtual_actions'}

Posizione di inserimento: prima riga nella parte dichiarazione del blocco funzione

Esempio 12.

Il blocco funzione POU_SFC è la classe base del blocco funzione derivato POU_child. La classe derivata POU_child richiama la sequenza della classe base scritta in SFC con la variabile speciale SUPER.

_cds_img_pragma_virtual1.png
_cds_img_attribute_nva_ex1.png

L'implementazione esemplificativa di questa sequenza si limita al passo iniziale, seguito da un unico passo con un'azione del passo collegata ActiveAction. Questo passo con un'azione del passo collegata si occupa della configurazione delle variabili di uscita.

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

Nel caso della classe derivata POU_child, l'azione del passo viene sostituita da un'implementazione specifica di ActiveAction. ActiveAction differisce dall'originale solo per l'assegnazione della stringa 'child_action' anziché 'father_action' alla variabile test_act.

Analogamente, il metodo METH, che nella classe base assegna la stringa 'father_method' alla variabile test_meth, viene sovrascritto in modo che test_meth ottenga ora il valore 'child_method'. Il programma principale PLC_PRG richiama un'istanza del blocco funzione POU_child denominata Child. Come previsto, il valore delle stringhe riflette la chiamata dell'azione e del metodo della classe derivata:

_cds_img_pragma_virtual3.png

Ora, tuttavia, si antepone alla classe base il pragma {attribute 'no_virtual_actions'}:

{attribute 'no_virtual_actions'}

FUNCTION_BLOCK POU_SFC...

Ciò modifica il comportamento: mentre per il metodo METH viene ancora utilizzata l'implementazione della classe derivata, la chiamata dell'azione del passo comporta ora una chiamata dell'azione ActiveAction della classe base. Pertanto test_act riceve ora il valore 'father_action':

_cds_img_pragma_virtual4.png