Vai al contenuto

Realizzazione funzione con più variabili in uscita

Home Forum Programmazione IEC 61131 (LogicLab) Realizzazione funzione con più variabili in uscita

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #76256
    Anonimo
    Inattivo

    Abbiamo qualche difficoltà nell’utilizzo delle VAR_OUTPUT nelle funzioni.

    Sarebbe possibile avere un esempio di una funzione scritta in linguaggio ST dove vengono passate 2 variabili in ingresso e una variabile in uscita, con relativa chiamata?

    #76258
    Sergio Bertana
    Amministratore del forum

    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
    
    
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.