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

Esempio 284.

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.

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

_cds_img_pragma_virtual3.png

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

_cds_img_pragma_virtual4.png