Un blocco funzione è una POU che fornisce uno o più valori durante l'elaborazione di un programma del controller. A differenza di una funzione, tutti i valori delle variabili d’uscita e le necessarie variabili interne verranno mantenuti da un’esecuzione del blocco funzione all’altra. Pertanto, la chiamata di un blocco funzione con gli stessi argomenti (parametri di ingresso) non sempre produce gli stessi valori di uscita.
Oltre alla funzionalità descritta dallo standard IEC11631-3, è supportata anche la programmazione a oggetti e i blocchi funzione possono essere definiti come estensioni di altri blocchi funzione. Possono includere le definizioni dell'interfaccia riguardanti la chiamata del metodo. Durante la programmazione con i blocchi funzione, quindi, è possibile utilizzare l'ereditarietà.
Un blocco funzione viene sempre chiamato tramite un'istanza, che è una riproduzione (copia) del blocco funzione.
Aggiunta di un blocco funzione
Per aggiungere un blocco funzione a un'applicazione esistente, selezionare il relativo nodo nel Catalogo software > Asset o nella Struttura applicazioni, fare clic sul pulsante verde con il più e selezionare POU.... In alternativa, fare clic con il pulsante destro del mouse sul nodo ed eseguire il comando Aggiungi oggetto > POU. Per creare un blocco funzione indipendente da un'applicazione, selezionare il nodo Globale nella Struttura applicazioni o Asset.
Nella finestra di dialogo Aggiungi oggetto, selezionare l'opzione Blocco funzione, immettere il Nome (<identificatore>) del blocco funzione e scegliere il Linguaggio d'implementazione desiderato.
È anche possibile impostare le seguenti opzioni:
Opzione |
Descrizione |
---|---|
Esteso |
Immettere il nome di un altro blocco funzione disponibile nel progetto, che sarà la base di quello corrente. Per ulteriori informazioni, vedere Estensione di un blocco funzione. |
Implementato |
Immettere i nomi delle interfacce disponibili nel progetto, che dovranno essere implementate nel blocco funzione corrente. È possibile immettere varie interfacce, separate da virgole. Per ulteriori informazioni, vedere Implementazione delle interfacce. |
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: oINTERNAL: l'accesso al blocco funzione è limitato allo spazio dei nomi corrente (la libreria). oFINAL: non è possibile derivare l'accesso, cioè il blocco funzione non può essere esteso da un altro. In questo modo si ottimizza la creazione del codice. NOTA: Gli specificatori dell'accesso sono validi per compilatori di versione 3.4.4.0 e possono essere utilizzati come identificatori nelle versioni precedenti. Per ulteriori informazioni, vedere la tabella di mappatura delle versioni del compilatore di EcoStruxure Machine Expert/CoDeSys nel manuale EcoStruxure Machine ExpertMigrazione e compatibilità - Guida utente. |
Linguaggio di implementazione del metodo |
Scegliere il linguaggio di programmazione desiderato per tutti gli oggetti metodo e proprietà creati con l'implementazione dell'interfaccia, indipendentemente da quello impostato per il blocco funzione in sé. |
Fare clic su Aggiungi per confermare le impostazioni. La vista dell'editor per il nuovo blocco funzione si apre ed è possibile iniziare la modifica.
Dichiarazione di un blocco funzione
Sintassi
FUNCTION_BLOCK <specificatore accesso> <nome blocco funzione> | EXTENDS <nome blocco funzione> | IMPLEMENTS <elenco nomi interfacce separati da virgole>
Segue la dichiarazione delle variabili. È inoltre possibile raggruppare ingressi e uscite per nasconderli o visualizzarli rapidamente quando si utilizza il blocco funzione in un editor FBD o LD. Consultare inoltre il capitolo Attributo Pingroup.
FBexample, mostrato nella figura seguente, ha due variabili di ingresso e due di uscita out1 e out2.
out1 è la somma dei due ingressi, out2 è il risultato di un confronto di uguaglianza.
Esempio di blocco funzione in ST