Home › Forum › Terminali operatore (Weintek) › Errore in macro non modifica valore di variabile
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 1 mese fa da RiccardoQuattro.
-
AutorePost
-
Gennaio 26, 2023 alle 4:56 pm #69625RiccardoQuattroPartecipante
Stò riscontrando un problema su EasyBuilderPro riguardo al cambio pagina da macro. Ho dichiarato in funzioni PLC con attributo cambio pagina la variabile LW2000, successivamente ho creato la macro che esegua una sola volta il cambio pagina all’attivazione del bit:
macro_command main() bool AL int PAGINA int MEMORY GetData(AL, "CODESYS V3 (Ethernet)", "Application.GVL.Allarme_Attivo", 1) if (AL==true) and (MEMORY==0) then PAGINA=13 MEMORY=1 SetData(PAGINA, "Local HMI", LW, 2000, 1) end if if (AL==false) and (MEMORY==1)then MEMORY=0 end if end macro_command
Quando il bit si attiva la variabile non scrive il valore da me scelto sulla variabile LW2000.
Gennaio 27, 2023 alle 10:05 am #69640Sergio BertanaAmministratore del forumSicuramente la variabile PAGINA va dichiarata come short e non int.
Poi eventualmente si può inserire oggetti visualizzazione numerica appoggiando le variabili per la visualizzazione in modo da verificare a video il risultato.
Puoi anche inserire nella macro la funzione TRACE che ti permette di visualizzare tramite il debugger i passaggi intermedi di funzionamento.
Gennaio 27, 2023 alle 2:45 pm #69653RiccardoQuattroPartecipanteAvevo già provato a mettere la variabile PAGINA come short e tramite visualizzatore numerico vedere il valore della variabile LW2000 e non variava, mentre se da visualizzatore cambiavo valore la pagina cambiava.
Gennaio 30, 2023 alle 9:25 am #69674Sergio BertanaAmministratore del forumHo provato la tua macro, e anzi l’ho riscritta in base a quanto credo ti serva ottenere, ecco la mia versione
macro_command main() bool Pulse //One shot memory bool Alarm=0 //Alarm flag int APage=0 //Alarm page //GetData(AL, "CODESYS V3 (Ethernet)", "Application.GVL.Allarme_Attivo", 1) GetData(Alarm, "Local HMI", LB, 0, 1) if (Alarm <> Pulse) then Pulse=Alarm //One shot memory if not(Alarm) then APage=10 //Alarm page end if if (Alarm) then APage=20 //Alarm page end if SetData(APage, "Local HMI", LW, 2000, 1) end if end macro_command
Naturalmente per poterla testare ho gestito il set della condizione di allarme tramite una variabile pannello LB 0 anzichè dal PLC. Quando è presente un allarme LB0 set viene forzata la visualizzazione della pagina 20. Quando l’allarme si resetta si ritorna alla pagina 10.
Da notare che la variabile Pulse deve mantenere il suo stato su esecuzioni successive della macro, quindi non è possibile inizializzarla e questo genera una warning in compilazione. Per evitare la warning occorrebbe eseguire un GetData ed un SetData di appoggio su variabile LB.
Gennaio 30, 2023 alle 10:31 am #69678RiccardoQuattroPartecipanteora provo appoggiandomi a delle variabili interne, il fatto mi sembrava strano dato che su altri pannelli la macro viene eseguita secondo i miei requisiti (su pannello cmtx series),mentre sul pannello attualmente in uso(mt8071IP) no.
Gennaio 30, 2023 alle 11:15 am #69679RiccardoQuattroPartecipanteRisolto appoggiando la variabile PLC ad una variabile interna al pannello.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.