Puntatore SUPER

Panoramica

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

Program_Components00107.jpg

 

 

NOTA: La funzionalità di SUPER non è ancora implementata per il linguaggio IL.

Esempio

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;