La versione 1.1 di EcoStruxure Machine Expert non supporta i controllori M258, LMC058 e LMC078.

Estensione di un blocco funzione

Panoramica

A supporto della programmazione a oggetti, è possibile derivare un blocco funzione da un altro blocco funzione. Ciò significa che un blocco funzione può estenderne un altro e ottenere automati­camente, oltre alle proprie, anche metodi/proprietà/azioni/transizioni del blocco funzione su cui si basa.

L'estensione avviene utilizzando la parola chiave EXTENDS nella dichiarazione del blocco funzione. È possibile scegliere l'opzione EXTENDS già quando si aggiunge il blocco funzione al progetto tramite la finestra di dialogo Aggiungi oggetto.

Per ulteriori informazioni, consultare le sezioni che descrivono come aggiungere un metodo, una proprietà, un'azione o una transizione.

Sintassi

FUNCTION_BLOCK <nome blocco funzione> EXTENDS <nome blocco funzione>

Segue la dichiarazione delle variabili.

Esempio

Definizione di blocco funzione fbA

FUNCTION_BLOCK fbA
VAR_INPUT
    x:int;
END_VAR
...

Definizione di blocco funzione fbB

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    ivar: INT := 0;
END_VAR
...

Estensione tramite EXTENDS

Estensione tramite EXTENDS significa:

ofbB contiene tutti i dati e i metodi definiti da fbA. È possibile utilizzare un'istanza di fbB in qualsiasi contesto in cui potrebbe trovarsi un blocco funzione di tipo fbA.

oA fbB è consentito ignorare metodi/proprietà/azioni/transizioni definiti in fbA. Ciò significa che fbB può dichiarare un metodo con lo stesso nome, gli stessi ingressi e le stesse uscite dichiarati da A.

ofbB non può dichiarare variabili del blocco funzione con lo stesso nome utilizzato in fbA. In questo caso, il compilatore genererebbe un messaggio di errore.

oAlle variabili e ai metodi di fbA si può accedere direttamente nel campo di fbB tramite il puntatore SUPER (SUPER^.<method>).

NOTA: Un blocco funzione può implementare più interfacce, ma estendere solo un singolo blocco funzione.

Esempio

FUNCTION_BLOCK FB_Base
VAR_INPUT
END_VAR
VAR_OUTPUT
    iCnt : INT;
END_VAR
VAR
END_VAR
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
    
    METHOD METH_DoIt : BOOL
    VAR
    END_VAR
    iCnt := -1;
    METH_DoIt := TRUE;
    
    METHOD METH_DoAlso : BOOL
    VAR
    END_VAR
    METH_DoAlso := TRUE;

FUNCTION_BLOCK FB_1 EXTENDS FB_Base
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
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();
    METHOD METH_DoIt : BOOL
    VAR
    END_VAR
    iCnt := 1111;
    METH_DoIt := TRUE;
PROGRAM PLC_PRG
VAR
    Myfb_1: FB_1;
    iFB: INT;
    iBase: INT;
END_VAR
Myfb_1();
iBase := Myfb_1.iCnt_Base;
iFB := Myfb_1.iCnt_THIS;