Vai al contenuto

Trasferire array BOOL esempio SysDI01 su variabile di tipo DW

Home Forum Programmazione IEC 61131 (LogicLab) Trasferire array BOOL esempio SysDI01 su variabile di tipo DW

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #85466
    filippigiovanni
    Partecipante

    Esiste una funzione per caricare un array di variabili BOOL, esempio la SysDI01 che riporta lo stato degli ingressi digitali del modulo con indirizzo 1, in una singola DoubleWord  al fine di visualizzare lo stato degli ingressi su di un pannello Weintek.

    Sul pannello devo visualizzare lo stato dei 32 bits della DW di appoggio.

    Potrei utilizzare la ArrayVarTxfer per questa operazione?

    #85473
    Sergio Bertana
    Amministratore del forum

    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.

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