Vai al contenuto

Errore in macro non modifica valore di variabile

Home Forum Terminali operatore (Weintek) Errore in macro non modifica valore di variabile

Stai visualizzando 6 post - dal 1 a 6 (di 6 totali)
  • Autore
    Post
  • #69625
    RiccardoQuattro
    Partecipante

    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.

    #69640
    Sergio Bertana
    Amministratore del forum

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

    #69653
    RiccardoQuattro
    Partecipante

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

    #69674
    Sergio Bertana
    Amministratore del forum

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

    #69678
    RiccardoQuattro
    Partecipante

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

    #69679
    RiccardoQuattro
    Partecipante

    Risolto appoggiando la variabile PLC ad una variabile interna al pannello.

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