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

Implementazione delle interfacce

Panoramica

A supporto della programmazione a oggetti, un blocco funzione può implementare varie interfacce, cosa che permette di utilizzare i metodi.

Sintassi

FUNCTION_BLOCK <nome blocco funzione> IMPLEMENTS <nome interfaccia_1>|,<nome interfaccia_2>, ..., <nome interfaccia_n>

Un blocco funzione che implementa un'interfaccia deve contenere tutti i metodi e le proprietà (proprietà delle interfacce) definite dall'interfaccia stessa. Sono compresi il nome, gli ingressi e l'uscita del particolare metodo o proprietà, che devono essere esattamente uguali.

A questo scopo, quando si crea un nuovo blocco funzione che implementa un'interfaccia, automaticamente tutti i metodi e le proprietà definiti nell'interfaccia verranno inseriti sotto il nuovo blocco funzione nella Struttura applicazioni.

NOTA: Se in seguito si aggiungono dei metodi alla definizione dell'interfaccia, essi non saranno aggiunti automaticamente ai relativi blocchi funzione e quindi si produrranno errori di compilazione. Per eseguire questo aggiornamento in modo esplicito, selezionare il comando Implementare le interfacce....

Quando si usa l'eredità per i blocchi funzione, tenere presente che se i metodi o gli attributi sono stati creati per eredità di un'interfaccia, implementarli o eliminarli se occorre utilizzare l'implemen­tazione del blocco funzione di base. Gli attributi pragma vengono inseriti automaticamente e rilevati durante la compilazione; i messaggi vengono generati per ricordare che i metodi o le proprietà ereditati devono essere ancora verificati. Eliminare gli attributi pragma dopo aver completamente implementato il nuovo blocco funzione.

Per ulteriori informazioni, vedere la descrizione del comando Implementare le interfacce...

Esempio

INTERFACE I1 include il metodo GetName:

METHOD GetName : STRING

I blocchi funzione A e B implementano ciascuno l'interfaccia I1:

FUNCTION_BLOCK A IMPLEMENTS I1
FUNCTION_BLOCK B IMPLEMENTS I1

Il metodo GetName, quindi, deve essere disponibile in entrambi i blocchi funzione e verrà inserito automaticamente sotto ognuno di essi quando i blocchi funzione verranno inseriti nella Struttura applicazioni.

Si consideri la dichiarazione di una variabile di tipo I1:

FUNCTION DeliverName : STRING 
VAR_INPUT 
  l_i : I1; 
END_VAR 

Questo ingresso può ricevere tutti blocchi funzione che implementano l'interfaccia I1I.

Esempio di chiamate di funzione:

DeliverName(l_i := A_instance); // call with instance of type A 
DeliverName(l_i := B_instance); // call with instance of type B 

NOTA: Alla variabile di un tipo di interfaccia è necessario assegnare l'istanza di un blocco funzione prima di potervi chiamare un metodo. La variabile di un tipo di interfaccia è sempre un riferimento all'istanza del blocco funzione assegnata.

In tal modo, una chiamata al metodo dell'interfaccia risulta in una chiamata all'implementazione del blocco funzione. Non appena si assegna il riferimento, l'indirizzo corrispondente viene monitorato in modalità online. Altrimenti, se non si è ancora assegnato alcun riferimento, nel monitoraggio in modalità online verrà visualizzato il valore 0.

Per questo esempio, vedere la parte di implementazione della funzione DeliverName:

DeliverName := l_i.GetName(); // in this case it depends on the "real" type of l_i whether A.GetName or B.GetName is called

NOTA: Vedere anche la possibilità di estendere un blocco funzione tramite la parola chiave EXTENDS nella dichiarazione.