Nelle funzioni non viene allocata memoria, i parametri in ingresso, uscita e le variabili interne sono tipicamente appoggiati su registri e non su aree di memoria, quindi ci sono limitazioni sulla dimensione e sul riferimento agli stessi all’interno della funzione. Cito ad esempio l’impossibilità di utilizzare lo statement ADR riferito ad un parametro o variabile.
Nei FB invece viene allocata memoria per l’appoggio dei parametri e delle variabili e questo permette di utilizzare qualsiaso tipo di dato. Inoltre nei FB possono essere usati riferimenti a variabili globali di programma con la keyword EXTERN.
Ma se vuoi defire come parametro in ingresso da una funzione parametri di tipo definito da te, puoi passare il parametro come riferimento e non come valore indicando come tipo l’indirizzo della tua variabile. Ecco la definizione della funzione.
FUNCTION MyFun: BOOL
VAR_INPUT
In : @MYSTRUCT;
END_VAR
@In.V2:[email protected];
MyFun:=TRUE;
Ecco il programma dove viene eseguita.
PROGRAM MyProgram
VAR
MyVar : MYSTRUCT;
Res : BOOL;
END_VAR
MyVar.V1:=LREAL#10.0;
Res:=MyFun(ADR(MyVar));