Vai al contenuto

Visualizzazione array di variabili BOOL su indice

Home Forum Terminali operatore (Weintek) Visualizzazione array di variabili BOOL su indice

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #35383
    Giovanni
    Partecipante

    Stò utilizzando un pannello MT8050i connesso in Ethernet con un Vs modulo CPU SlimLine. Nel mio programma sullo SlimLine ho definito un array di 32 variabili BOOL in memoria DB100.128 ora sul pannello vorrei visualizzare lo stato dei 32 BOOL dell’array utilizzando un indice.

    Ho fatto diverse prove, riesco sempre a visualizzare lo stato del primo BOOL dell’array (Indice 0), ma quando modifico il valore di indice non ottengo la visualizzazione desiderata. Potete darmi un suggerimento ?

    #37695
    Sergio Bertana
    Amministratore del forum

    L’utilizzo dell’indice su array di variabili BOOL in effetti nasconde una insidia, il terminale “ragiona” a word (16 Bit), quindi acquisisce 16 variabili BOOL alla volta e poi visualizza quella indicata. Quando utilizzi un indice il valore dell’indice sposta l’acquisizione di 16 bits.

    Ecco quindi che l’indice 0 è effettivamente il primo BOOL del tuo array (Infatti funziona) mentre l’indice 1 punterà al 16esimo BOOL del tuo array, l’indice 2 al 32esimo, e così via. Per risolvere il problema bisogna affidarsi alle macro, vedrò di preparare un programma di esempio che illustri una possibile soluzione.

    #37696
    Sergio Bertana
    Amministratore del forum

    Ecco la macro BitArray che soluziona il problema.

    macro_command main()

    bool PLCBit
    short Index, PLCWord

    GetData(Index, “Local HMI”, LW, 9200, 1) //Leggo valore indice “0”
    GetData(PLCWord, “SlimLine”, 3x, 40064+((Index&15)/2), 1) //Leggo variabile word (16 bit)
    GETBIT(PLCWord, PLCBit, ((Index&1)*8)) //Testo bit in base ad indice
    SetData(PLCBit, “Local HMI”, LB, 0, 1) //Stato bit per visualizzazione

    end macro_command

    Viene letto il valore del registro indice “0” e trasferito in Index, poi eseguo lettura dallo SlimLine di un registro a 16 bit a partire dalla posizione di allocazione dell’array (DB 100.128 -> 40064) offsettato dal valore di Index e lo trasferisco in PLCWord.

    Testo il bit della word in base ad Index (Bit 0 è il bit pari, bit 8 è il bit dispari), e ne trasferisco lo stato in PLCBit. Trasferisco lo stato nella variabile “LB 0” che sarà poi utilizzata per la visualizzazione. Allego un programma di esempio che esegue la visualizzazione di un array di 32 variabili BOOL (Download esempio).

    #48639
    Mauro
    Partecipante

    Mi chiedevo se nel frattempo è sorta qualche nuova soluzione al problema, nel mio caso avrei la necessità di visualizzare e modificare il valore di un bit all’interno di un’array.

    #48647
    Sergio Bertana
    Amministratore del forum

    Ma se tu inserisci sul pannello un oggetto per ogni variabile BOOL dell’array non hai problemi a fare quello che vuoi. In pratica se immaginiamo di avere un array di 8 BOOL allocato in DB100.128 tu puoi mettere sul pannello 8 (o quanti te ne servono) oggetti esempio pulsanti che operano ognuno sul BOOL dell’array che ti interessa.

    Esempio il primo punterà al BOOL in DB100.128 (Comando sul terminale 0x40128), il secondo punterà al BOOL in DB100.129 (Comando sul terminale 0x40129), e così via.

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