Vai al contenuto

Utilizzare variabili In_Out in FB con l’opzione “VAR_IN_OUT by reference attiva”

Home Forum Programmazione IEC 61131 (LogicLab) Utilizzare variabili In_Out in FB con l’opzione “VAR_IN_OUT by reference attiva”

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Autore
    Post
  • #68584
    Paolo
    Partecipante

    Nn riesco a capire come fare per utilizzare un parametro VAR_IN_OUT quando si abilita il passaggio per riferimento nel menu delle opzioni del progetto.

    Se definisco all’interno di un blocco funzione una variabile VAR_IN_OUT devo assegnare il riferimento alla variabile con l’operatore ref o è implicitamente calcolato il riferimento a quella variabile?

    All’interno del blocco funzione come devo fare per assegnare un nuovo valore alla variabile in uscita?

    #68591
    Sergio Bertana
    Amministratore del forum

    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.

    #68631
    Paolo
    Partecipante

    Grazie

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Devi essere connesso per rispondere a questo topic.