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
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
.


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:

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