Iniziamo con escludere la funzione ArrayVarTxfer, la funzione trasferisce sempre e solo array di BYTES nella variabile di destinazione del tipo indicato, quindi se la usassi su un array di BOOL per trasferire in una DWORD avresti copiato solo 4 variabili BOOL nei 4 bytes della DWORD di destinazione.
Per ottenere quello che desideri cioè copiare sui singoli 32 bits della variabile DWORD di destinazione lo stato di 32 variabili BOOL devi utilizzare la FB BitsToByte, BytesToWord e WordsToDouble come riportato nel programma di esempio FBD_DWCompress che trovi nel programma di esempio Ptp114xxxx fornito con l’installazione di LogicLab (Screenshot).
Ma se come immagino vuoi appoggiare le variabili BOOL su WORD o DWORD per poi nel pannello operatore utilizzare l’operando %MW_Bit (Vedi topic) sconsiglio questa pratica per questi motivi:
- Nella comunicazione Modbus per leggere una WORD o una DWORD si utilizza il codice 16#03 che ritorna i 2 o i 4 bytes della variabile. Per acquisire un array di variabili BOOL si utilizza il codice 16#01 che raggruppa in 2 o 4 bytes i 16 o 32 BOOL consecutivi. Quindi non si hanno vantaggi sulla lunghezza del pacchetto dati.
- Se utilizzi le variabili BOOL con l’utility Symbols converter, avrai automaticamente tutte le variabili disponibili come TAGs mnemoniche importabili direttamente in EasyBuilderPro. Mentre se utilizzi la WORD con i vari bits dovrai gestire l’indice del bit manualmente perchè l’unico simbolo che troverai nelle TAGs sarà la WORD o la DWORD di appoggio.
- Se le variabili devono anche essere impostate da terminale l’utilizzo dell’operando %MW_Bit è sconsigliato perchè si rischia impostando un bit della variabile di sporcare con il valore precedente anche altri bits della stessa variabile.
In termini di comunicazione Modbus merita un discorso diverso il caso in cui le variabili BOOL da acquisire siano allocate non in array ma distribuite in vari indirizzi separati della memoria DB100. In tal caso il riportarle in array e/o appoggiarle in una WORD o DWORD porta effettivamente ad una ottimizzazione ma sarebbe comunque consigliato spostale per allinearle in un array.