Skip to main content

Oggetto: blocco funzione

Un blocco funzione è una POU che restituisce uno o più valori quando viene eseguita.

L'oggetto viene aggiunto all'applicazione o al progetto facendo clic Progetto → Aggiungi oggetto → POU. Nell'albero dei dispositivi o nel POU vista, le POU dei blocchi funzione hanno il (FB) suffisso.

Richiama sempre un blocco funzione tramite un'istanza che è una copia del blocco funzione.

L'editor di un blocco funzione è costituito dalla parte di dichiarazione e dalla parte di implementazione.

I valori delle variabili di uscita e delle variabili interne rimangono invariati dopo l'esecuzione fino all'esecuzione successiva. Ciò significa che il blocco funzione non restituisce necessariamente gli stessi valori di uscita per più richiami con le stesse variabili di ingresso.

Oltre alla funzionalità descritta in IEC 61131-3, è possibile utilizzare anche i blocchi funzione in CODESYS per le seguenti funzionalità di programmazione orientata agli oggetti:

La riga superiore della parte di dichiarazione contiene la seguente dichiarazione:

FUNCTION_BLOCK <access specifier> <function block> \| EXTENDS <function block> \| IMPLEMENTS <comma-separated list of interfaces>

Richiamo di un blocco funzione

La chiamata avviene sempre tramite un'istanza del blocco funzione. Quando viene richiamato un blocco funzione, cambiano solo i valori della rispettiva istanza.

Dichiarazione di istanza:

<instance> : <function block>;

Si accede a una variabile del blocco funzione nella parte di implementazione come segue:

<instance> . <variable>

Importante

Nota quanto segue:

  • È possibile accedere solo alle variabili di ingresso e di uscita di un blocco funzione dall'esterno dell'istanza del blocco funzione, non alle variabili interne.

  • L'accesso a un'istanza di blocco funzione è limitato alla POU in cui è dichiarata l'istanza, a meno che l'istanza non sia stata dichiarata globalmente.

  • È possibile assegnare i valori desiderati alle variabili del blocco funzione quando si richiama l'istanza.

Esempio 512. Esempio

Accesso alle variabili dei blocchi funzione:

Il blocco funzione FB1 ha la variabile di input iVar1 di tipo INT e la variabile di uscita out1. Di seguito la variabile iVar1 viene chiamato dal programma Prog.

PROGRAM Prog
VAR
inst1 : FB1;
END_VAR

inst1.iVar1 := 33;  (* FB1 is called and the value 33 is assigned to the variable iVar1 *)

inst1();            (* FB1 is called, that's necessary for the following access to the output variable *)

ires := inst1.out1  (* the output variable out1 of the FB1 is read *)

In FBD:

_cds_img_fb_call_fup.png


Assegnazione di valori variabili durante la chiamata:

Nei linguaggi testuali IL e ST è possibile assegnare valori direttamente alle variabili di ingresso e/o uscita quando si richiama il blocco funzione.

Un valore viene assegnato a una variabile di ingresso con :=.

Un valore viene assegnato a una variabile di uscita con =>.

Esempio 513. Esempio

L'istanza CMD_TMR del blocco funzione timer viene richiamato con assegnazioni per le variabili di ingresso IN e PT. Quindi la variabile di output Q del timer è assegnato alla variabile A.

PROGRAM PLC_PRG
VAR
        CMD_TMR : TOF;
END_VAR

CMD_TMR(IN := %IX5.1, PT := T#100MS);
A := CMD_TMR.Q;


Suggerimento

Quando si inserisce un'istanza di blocco funzione tramite il Assistente di input e seleziona il Inserisci con argomenti opzione nel Assistente di input dialogo, CODESYS inserisce la chiamata con tutte le variabili di input e output. Quindi devi solo inserire l'assegnazione del valore desiderata. Nell'esempio sopra, CODESYS inserisce la chiamata come segue: CMD_TMR (IN:= ,PT:= , Q=> ).

Suggerimento

Puoi usare il 'è connesso' attributo su una variabile locale per determinare al momento della chiamata nell'istanza del blocco funzione se un ingresso specifico riceve o meno un'assegnazione esterna.