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

Metodo

Panoramica

Un metodo è un elemento di linguaggio simile a una funzione utilizzabile nel contesto di un blocco funzione. Il metodo può essere considerato come una funzione che contiene un'istanza del relativo blocco funzione. Come la funzione, il metodo ha un valore di restituzione e la propria parte di dichiarazione per le variabili temporanee e i parametri.

Nell'ottica della programmazione a oggetti, inoltre, è possibile utilizzare le interfacce per organizzare i metodi disponibili nel progetto.

NOTA: Quando si copia o si sposta un metodo o una proprietà da una POU a un'interfaccia, le implementazioni in essi contenute vengono automaticamente eliminate. Quando si esegue una copia o uno spostamento da un'interfaccia a una POE, viene richiesto di specificare il linguaggio di implementazione desiderato.

Inserimento di un metodo

Per assegnare un metodo a un blocco funzione o a un'interfaccia, selezionare il blocco funzione o il nodo dell'interfaccia appropriato nella Struttura applicazioni, fare clic sul pulsante verde con il segno più ed eseguire il comando Metodo. In alternativa, fare clic con il pulsante destro del mouse sul blocco funzione o sul nodo dell'interfaccia ed eseguire il comando Aggiungi oggetto > Metodo dal menu contestuale.

Nella finestra di dialogo Aggiungi metodo, immettere il Nome, il Tipo restituito desiderato, il Linguaggio d'implementazione e Modificatore di accesso (vedere sotto). Per scegliere il tipo di dati restituito, fare clic sul pulsante ... per aprire la finestra di dialogo dell'Accesso facilitato.

Modificatore di accesso: per motivi di compatibilità, gli specificatori dell'accesso sono facoltativi. Lo specificatore PUBLIC è disponibile come equivalente se non si imposta alcuno specificatore.

In alternativa, scegliere una delle opzioni dell'elenco di selezione:

oPRIVATE: l'accesso al metodo è limitato al blocco funzione.

oPROTECTED: l'accesso al metodo è limitato al blocco funzione e alla sua derivazione.

oINTERNAL: l'accesso al metodo è limitato allo spazio dei nomi corrente (la libreria).

Fare clic su Apri per confermare. Si apre la vista dell'editor del metodo.

Accesso facilitato quando si creano blocchi funzione con ereditarietà

EcoStruxure Machine Expert facilita la programmazione orientata agli oggetti tramite eredità nei blocchi funzione: quando si esegue Aggiungi oggetto su un blocco funzione che eredita da un altro blocco funzione, gli elementi Azione, Metodo, Proprietà e Transizione usati nel blocco funzione di base vengono elencati per la selezione:

oGli elementi Azione, Metodo, Proprietà e Transizione con Modificatore di accesso = PUBBLICO, PROTETTO e INTERNO definiti nel blocco funzione di base sono disponibili per la selezione. È possibile adattare la definizione per l'oggetto ereditato. Nell'oggetto ereditato, lo stesso Modificatore di accesso viene assegnato agli elementi di origine.

oGli elementi Azione, Metodo, Proprietà e Transizione con Modificatore di accesso = PRIVATO non sono disponibili per la selezione in quanto l'accesso è limitato al blocco funzione di base.

Dichiarazione di un metodo

Sintassi:

METHOD <specificatore accesso> <nome metodo> : <tipo dati ritorno>VAR_INPUT  ... END_VAR

Per una descrizione di come dichiarare i metodi di gestione dell'interfaccia, vedere il capitolo Interfaccia.

Chiamata di un metodo

Le chiamate dei metodi sono anche denominate chiamate delle funzioni virtuali. Per ulteriori informazioni, vedere il capitolo Chiamata di un metodo.

Nella chiamata di un metodo, tenere presente quanto segue:

oI dati di un metodo sono temporanei e sono validi solo durante la sua esecuzione (variabili stack). Ciò significa che le variabili e i blocchi funzione dichiarati in un metodo sono reinizia­lizzati a ogni chiamata del metodo.

oI metodi definiti in un'interfaccia possono avere solo variabili di ingresso, uscita e I/O, ma non il corpo (parte di implementazione).

oI metodi come le funzioni possono avere uscite aggiuntive. Devono essere assegnati durante la chiamata del metodo.

Implementazione di un metodo

Nell'implementazione di un metodo, tenere presente quanto segue:

oNel corpo di un metodo, è possibile accedere alle variabili delle istanze dei blocchi funzione.

oSe necessario, utilizzare il puntatore THIS, che punta sempre all'istanza corrente.

oIn un metodo non è possibile accedere alle variabili VAR_TEMP del blocco funzione.

Metodi speciali per un blocco funzione

Metodo

Descrizione

Init

Per impostazione predefinita, il metodo denominato FB_init è dichiarato in modo implicito ma può anche essere dichiarato esplicitamente. Esso contiene il codice di inizializzazione per il blocco funzione, come dichiarato nella parte di dichiarazione del blocco funzione. Consultare il metodo FB_init.

Reinit

Se un metodo denominato FB_reinit è dichiarato per un'istanza di un blocco funzione, verrà chiamato dopo che l'istanza è stata copiata (come durante la Modifica online) e reinizializzerà il modulo della nuova istanza. Consultare i metodi FB_init, FB_reinit.

Exit

Se si desidera un metodo di uscita denominato FB_exit è necessario dichiararlo esplicitamente. La dichiarazione implicita non è possibile. Il metodo Exit è richiamato per ogni istanza del blocco funzione prima di un nuovo download, un reset o durante una modifica online per tutte le istanze spostate o eliminate. Consultare il metodo FB_exit.

Ogni Proprietà e proprietà dell'interfaccia è costituita da un metodo di accesso Set e/o Get.

Chiamata del metodo anche quando l'applicazione è in stop

Nel file di descrizione del dispositivo, è possibile definire che un determinato metodo debba sempre essere chiamato con il ciclo dei task da una determinata istanza del blocco funzione (o modulo della libreria). Se il metodo ha i seguenti parametri di ingresso, viene elaborato anche quando l'applicazione attiva non è in esecuzione.

Esempio

VAR_INPUT
pTaskInfo : POINTER TO DWORD;
pApplicationInfo: POINTER TO _IMPLICIT_APPLICATION_INFO;
END_VAR

Il programmatore può verificare lo stato dell'applicazione con pApplicationInfo e definire il successivo comportamento.

IF pApplicationInfo^.state = RUNNING THEN <instructions> END_IF