Le funzioni a differenza dei blocchi funzione per definizione hanno una sola uscita, ecco un esempio:
FUNCTION OneReturn: REAL
VAR_INPUT
InA : REAL; (* Input A *)
InB : REAL; (* Input B *)
END_VAR
OneReturn:=InA+InB; //Function result
Se ti necessita realizzare una funzione che ritorni più di una uscita devi passare nei parametri di ingresso l’indirizzo delle variabili che vuoi utilizzare come uscite, ecco un esempio:
FUNCTION TwoReturns: BOOL
VAR_INPUT
InA : REAL; (* Input A *)
InB : REAL; (* Input B *)
RetA : @REAL; (* Return A *)
RetB : @REAL; (* Return A *)
END_VAR
@RetA:=InA+InB; //Return A
@RetB:=InA*InB; //Return B
TwoReturns:=TRUE; //Function result
Ed ecco come sono eseguite da programma. Come vedi per la funzione che prevede due ritorni ho passato nei parametri l’indirizzo delle due variabili che conterranno il risultato della funzione.
PROGRAM MyProgram
VAR
ORFunction : REAL; (* One return function *)
TRFunction : BOOL; (* Two returns function *)
Operands : ARRAY[0..1] OF REAL := [5.0, 10.0]; (* Operands *)
Results : ARRAY[0..1] OF REAL; (* Function results *)
END_VAR
ORFunction:=OneReturn(Operands[0], Operands[1]); //One return function
TRFunction:=TwoReturns(Operands[0], Operands[1], ADR(Results[0]), ADR(Results[1])); //Two returns function