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 richiamate da esso 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 applichi il pragma alla classe base, le sue azioni sono protette dall'overload.
Sintassi:
{attribute 'no_virtual_actions'}
Posizione di inserimento: riga superiore nella parte dichiarativa del blocco funzione
Il blocco funzione 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 del passaggio collegata ActiveAction
. Questo passo con un'azione del passo concatenata 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 passo è 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
, di nome Child
. Come previsto, il valore delle stringhe riflette la chiamata dell'azione e del metodo della classe derivata:

Ora, tuttavia, 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 è ancora utilizzata per il metodo METH
, il richiamo dell'azione del passaggio ora risulta in un richiamo dell'azione ActiveAction
della classe base. Perciò test_act
viene ora assegnato il valore 'father_action'
:
