Per ciascun blocco funzione che estende un blocco funzione di base, è automaticamente disponibile un puntatore con il nome SUPER che punta alle istanze del blocco funzione di base.
Questa soluzione è particolarmente efficace nella seguente situazione:
oSUPER permette di accedere ai metodi dell'implementazione del blocco funzione di base. Con la parola chiave SUPER, è possibile chiamare un metodo valido nell'istanza della classe (principale) di base. In tal modo, non si ha alcun legame del nome dinamico.
Il puntatore SUPER può essere utilizzato solo nei metodi e nell'implementazione del blocco funzione associato.
Poiché SUPER è un puntatore al blocco funzione di base, è necessario eliminare il riferimento per ottenere l'indirizzo del blocco funzione: SUPER^.METH_DoIt
Chiamata del puntatore SUPER nei diversi linguaggi d'implementazione
Linguaggio d'implementazione |
Esempio |
---|---|
ST |
SUPER^.METH_DoIt(); |
FBD/CFC/LD |
![]()
|
NOTA: La funzionalità di SUPER non è ancora implementata per il linguaggio IL.
Utilizzo dei puntatori SUPER e THIS.
FUNCTION_BLOCK FB_Base
VAR_OUTPUT
iCnt : INT;
END_VAR
METHOD METH_DoIt : BOOL
iCnt := -1;
METHOD METH_DoAlso : BOOL
METH_DoAlso := TRUE;
FUNCTION_BLOCK FB_1 EXTENDS FB_Base
VAR_OUTPUT
iBase: INT;
END_VAR
// Calls the method defined under FB_1
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
// Calls the method defined under FB_Base
SUPER^.METH_DoIt();
SUPER^.METH_DoAlso();
iBase := SUPER^.iCnt;
METHOD METH_DoIt : BOOL
iCnt := 1111;
METH_DoIt := TRUE;
PROGRAM PLC_PRG
VAR
myBase: FB_Base;
myFB_1: FB_1;
iTHIS: INT;
iBase: INT;
END_VAR
myBase();
iBase := myBase.iCnt;
myFB_1();
iTHIS := myFB_1.iCnt;