Vai al contenuto

Problema sintassi, eseguire FB in un programma

Home Forum Programmazione IEC 61131 (LogicLab) Problema sintassi, eseguire FB in un programma

Taggato: , ,

Stai visualizzando 6 post - dal 1 a 6 (di 6 totali)
  • Autore
    Post
  • #57757
    nikolas de stephanis
    Partecipante

    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.

    #57760
    Sergio Bertana
    Amministratore del forum

    Intanto 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
    #57763
    nikolas de stephanis
    Partecipante

    Grazie, 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?

    #57767
    Sergio Bertana
    Amministratore del forum

    Si 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.

    #57774
    nikolas de stephanis
    Partecipante

    Grazie, della risposta.

    Il puntamento alla variabile va fatto con l’operando ADR(myVar), giusto?!

    #57789
    Sergio Bertana
    Amministratore del forum

    Si 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).

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