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