I blocchi funzione sono chiamati mediante un'istanza del blocco funzione, che deve essere dichiarata localmente o globalmente. Per informazioni su come eseguire la dichiarazione, vedere il capitolo Istanza di blocco funzione.
Per accedere alla variabile del blocco funzione desiderato, utilizzare la seguente sintassi.
Dall'esterno dell'istanza di un blocco funzione è possibile accedere solo alle variabili di ingresso e di uscita del blocco funzione, non alle sue variabili interne.
L'accesso all'istanza di un blocco funzione è limitato alla POU in cui era stato dichiarato, a meno che non fosse stato dichiarato globalmente.
Alla chiamata dell'istanza, ai parametri del blocco funzione è possibile assegnare i valori desiderati. Vedere il paragrafo seguente Assegnazione di parametri a una chiamata.
Le variabili di ingresso/uscita (VAR_IN_OUT
) di un blocco funzione vengono passate come puntatori.
In SFC, le chiamate ai blocchi funzione possono avvenire solo nei passi.
Il nome dell'istanza di un blocco funzione può essere utilizzato come parametro di ingresso per una funzione o per un altro blocco funzione.
Tutti i valori di un blocco funzione sono mantenuti fino alla successiva elaborazione del blocco stesso. Pertanto, non tutte le chiamate al blocco funzione restituiscono gli stessi valori di uscita, anche se eseguite con argomenti identici.
Presupposto: il blocco funzione fb
ha una variabile di ingresso in1
del tipo INT. Vedere qui la chiamata di questa variabile dal programma prog
. Vedere la dichiarazione e l'implementazione in ST:
PROGRAM prog
VAR
inst1:fb;
END_VAR
inst1.in1:=22; (* fb is called and input variable in1 gets assigned value 22 *)
inst1(); (* fb is called, this is needed for the following access on the output variable *)
res:=inst1.outl; (* output variable of fb is read *)
Esempio di chiamata di blocco funzione in FBD:
Nei linguaggi testuali IL e ST, è possibile impostare i parametri di ingresso e/o di uscita immediatamente quando si chiama il blocco funzione. I valori possono essere assegnati ai parametri tra parentesi, dopo il nome dell'istanza del blocco funzione. Per i parametri di ingresso, questa assegnazione avviene con :=
, come nell'inizializzazione delle variabili nella posizione di dichiarazione. Per i parametri di uscita, utilizzare =>
.
In questo esempio, un blocco funzione timer (istanza CMD_TMR
) viene chiamato con assegnazioni per i parametri IN
e PT
. La variabile risultante Q
viene assegnata alla variabile A
. La variabile risultante è indirizzata con il nome dell'istanza del blocco funzione, un punto e il nome della variabile.
CMD_TMR(IN := %IX5, PT := T#100MS);
A:=CMD_TMR.Q;
L'istanza, se viene inserita tramite
con l'opzione nella vista di implementazione di una POU ST o IL, viene visualizzata automaticamente secondo la sintassi mostrata nell'esempio seguente, con tutti i parametri, anche se l'assegnazione dei parametri non è indispensabile.Nell'esempio citato sopra, la chiamata verrebbe visualizzata come segue.
CMD_TMR(in:=, pt:=, q=>)
-> fill in, e.g.:
CMD_TMR(in:=bvar, pt:=t#200ms, q=>bres);