Skip to main content

Attributo: no_virtual_actions

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

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

Sintassi:

{attribute 'no_virtual_actions'}

Inserisci posizione: riga superiore nella parte di dichiarazione del blocco funzione

Esempio 10.

Il blocco funzionale POU_SFC è la classe base per il blocco funzione derivato POU_child La classe derivata POU_child chiama 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 esemplare di questa sequenza è limitata al passaggio iniziale, seguito da un singolo passaggio con un'azione di passaggio collegata ActiveAction Questo passaggio con un'azione di passaggio collegata si occupa della configurazione delle variabili di output.

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 speciale di ActiveAction. Active Action differisce dall'originale solo per l'assegnazione della stringa 'child_action' al posto di 'father_action' alla variabile test_act.

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

_cds_img_pragma_virtual3.png

Ora però metti il pragma {attribute 'no_virtual_actions'} davanti alla classe base:

{attribute 'no_virtual_actions'}

FUNCTION_BLOCK POU_SFC...

Ciò modifica il comportamento: mentre l'implementazione della classe derivata viene ancora utilizzata per il metodo METH, la chiamata dell'azione del passaggio ora si traduce in una chiamata dell'azione ActiveAction della classe base. Pertanto test_act ora gli viene dato il valore 'father_action':

_cds_img_pragma_virtual4.png