Home › Forum › Programmazione IEC 61131 (LogicLab) › Problema sintassi, eseguire FB in un programma
- Questo topic ha 5 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 3 anni, 6 mesi fa da Sergio Bertana.
-
AutorePost
-
Ottobre 2, 2020 alle 10:25 am #57757nikolas de stephanisPartecipante
Ho un problema nel capire l’utilizzo del LogicLab. Ho realizzato due programmi uno chiamato Main ed uno Startup, il primo è stato associato al ciclo slow ed il secondo al boot.
Ho creato anche un FB (MY_FUNC) che voglio richiamare sul programma Main. Sempre nel programma MAIN, realizzato in ST, ho creato una un tipo dati del mio fuction block (DB_MY_FUNC) ma non riesco a trovare la sintassi giusta per effettuare la chiamata al blocco. Io ho provato:
DB_MY_FUNC:= MYFUNC(); MY_FUNC(DB_MY_FUNC);
Entrambe mi danno un errore di sintassi.
Ottobre 2, 2020 alle 10:35 am #57760Sergio BertanaAmministratore del forumIntanto bisogna capire se hai realizzato una funzione od un blocco funzione in questo video spiego le differenze, in questo video spiego come realizzare ed utilizzare un FB.
Da quello che mi dici visto che lo hai istanziato nel tuo programma ipotizzo sia un blocco funzione, ti rimando al forum per cercare altre informazioni sulle funzioni e i blocchi funzioni (Vedi qui).
In linea di massima un FB và istanziato (Cioè gli và assegnato uno spazio in memoria definendo una variabile del tipo FB creat), poi nel programma utilizzi la variabile. Ma un FB non ha ritorni quindi puoi riferirti ai sui membri di I/O con il loro nome. Nel tuo caso potrai scrivere qualcosa del tipo…
DB_MY_FUNC.Input:=0; //Assegno un valore ad una varibile di ingresso DB_MY_FUNC(); //Eseguo il blocco funzione Var:=DB_MY_FUNC.Output; //Trasferisco valore di una variabile di uscita
Ottobre 2, 2020 alle 3:24 pm #57763nikolas de stephanisPartecipanteGrazie, si ho creato un blocco funzione. Altra domanda…
Nel caso di utilizzo di variabili IN_OUT create nel function block la loro assegnazione come sarà effettuata?
Ottobre 2, 2020 alle 3:32 pm #57767Sergio BertanaAmministratore del forumSi utilizzano vartiabili di IN_OUT quando il FB deve agire sul valore della variabile, le utilizzi esattamente come le variabili di ingresso e di uscita.
Se dichiari ad esempio la variabile IOVar di tipo VAR_IN_OUT, questa variabile sarà accessibile sia come ingresso al FB che come uscita.
DB_MY_FUNC.IOVar:=0; //Assegno un valore alla variabile di ingresso DB_MY_FUNC(); //Eseguo il blocco funzione Var:=DB_MY_FUNC.IOVar; //Trasferisco valore della variabile di uscita
Personalmente non utilizzo mai variabili di IN_OUT, quando il FB o la funzione devono agire sul valore di una variabile preferisco passare in ingresso su una variabile IN l’indirizzo della variabile e all’interno della funzione o del FB utilizzo il puntatore alla variabile.
Ottobre 5, 2020 alle 3:11 pm #57774nikolas de stephanisPartecipanteGrazie, della risposta.
Il puntamento alla variabile va fatto con l’operando ADR(myVar), giusto?!
Ottobre 5, 2020 alle 3:16 pm #57789Sergio BertanaAmministratore del forumSi certo nel blocco funzione devi definire il parametro di ingresso con il suo tipo preceduto dal simbolo “@”, esempio @USINT, @UINT, @REAL, ecc…
All’interno del FB per agire sul parametro, esempio per incrementarne il valore usi la sintassi:
@Par:=@Par+1;
Quando passi l’indirizzo al parametro all’interno del tuo programma utilizzi l’operando ADR(MyVar).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.