Home › Forum › Programmazione IEC 61131 (LogicLab) › Utilizzare variabili In_Out in FB con l’opzione “VAR_IN_OUT by reference attiva”
- Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 5 mesi fa da Paolo.
-
AutorePost
-
Novembre 15, 2022 alle 9:32 am #68584PaoloPartecipante
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?
Novembre 15, 2022 alle 4:52 pm #68591Sergio BertanaAmministratore del forumCon 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.
Novembre 19, 2022 alle 4:11 pm #68631PaoloPartecipanteGrazie
-
AutorePost
- Devi essere connesso per rispondere a questo topic.