Con il tipo IN_OUT si intendono variabili il cui valore è passato in ingresso ad un blocco funzione per essere elaborato al suo interno ed ottenere un valore modificato in uscita.
Se non è selezionata la voce VAR_IN_OU by reference, nelle opzioni di progetto occorre valorizzare la variabile prima di eseguire il FB e poi ricopiarne il valore modificato dopo l’esecuzione. Se per esempio scriviamo un FB che incrementa il valore di una variabili IN_OUT avremo:
FUNCTION_BLOCK MyFB
VAR_IN_OUT
FBVar : UDINT; (* FB variable *)
END_VAR
FBVar:=FBVar+1; //FB variable
// [End of file]
Ora vediamo nel programma seguente come utilizzare il FB senza selezionare l’opzione e poi selezionandola:
PROGRAM MyProgram
VAR
Counter : UDINT; (* Counter *)
FBUse : MyFB; (* FB instance *)
END_VAR
// Here an example of use without VAR_IN_OUT by reference.
FBUse.FBVar:=Counter;
FBUse();
Counter:=FBUse.FBVar;
// Here an example of use with VAR_IN_OUT by reference.
FBUse(FBVar:=Counter);
// [End of file]
Come si vede selezionando l’opzione il programma risulta più compatto e con un risparmio sia di memoria codice che di memoria dati. In pratica al FB viene passato l’indirizzo della variabile Counter ed il FB opera direttamente sulla sua locazione di memoria.