Home › Forum › Terminali operatore (Weintek) › Visualizzazione array di variabili BOOL su indice
- Questo topic ha 4 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 9 mesi fa da Sergio Bertana.
-
AutorePost
-
Luglio 12, 2013 alle 8:40 am #35383GiovanniPartecipante
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 ?
Luglio 12, 2013 alle 8:54 am #37695Sergio BertanaAmministratore del forumL’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.
Luglio 12, 2013 alle 9:01 am #37696Sergio BertanaAmministratore del forumEcco la macro BitArray che soluziona il problema.
macro_command main()
bool PLCBit
short Index, PLCWordGetData(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 visualizzazioneend 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).
Luglio 24, 2019 alle 12:36 pm #48639MauroPartecipanteMi 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.
Luglio 24, 2019 alle 12:39 pm #48647Sergio BertanaAmministratore del forumMa 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.