Set e Test bit di una variabile DWORD

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Programmazione IEC 61131 (LogicLab) Set e Test bit di una variabile DWORD

Questo argomento contiene 4 risposte, ha 2 partecipanti, ed √® stato aggiornato da  Sergio Bertana 8 anni, 4 mesi fa.

Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
  • Autore
    Articoli
  • #34916

    Luciano
    Partecipante

    Ho la necessità di effettuare l’appoggio di 32 variabili BOOL su di una variabili DWORD. La variabile DWORD sarà poi trasferita in Modbus verso un terminale operatore Touch screen.

    Avete suggerimenti su come posso realizzare un semplice programma adatto allo scopo ?

    #36562

    Sergio Bertana
    Amministratore del forum

    Nella libreria ePLCAuxLib.pll potrai trovare le funzioni VBitTestVBitSet, che permettono di testare e settare lo stato dei bits di una variabile DWORD.

    Per il test dei bits basterà effettuare da programma ladder 32 chiamate alla funzione VBitTest, mentre per il set dei bit occorrerà effettuare da programma ladder 32 chiamate alla funzione VBitSet. Allego un programma di esempio con la relativa stampa (Download programma, download stampa).

    #36566

    Sergio Bertana
    Amministratore del forum

    Allego anche un esempio in linguaggio ST che esegue il set dei bit di una variabile DWORD.

        VAR
        Bit : ARRAY[ 0..31 ] OF BOOL; (* Bit da testare *)
        Result : DWORD; (* DWORD risultato *)
        END_VAR

        (* Eseguo azzeramento risultato *)

        Result:=0; (* DWORD risultato *)

       (* Eseguo controllo stato di ogni bit. *)

        IF (Bit[0]) THEN Result:=Result OR 16#00000001; END_IF;
        IF (Bit[1]) THEN Result:=Result OR 16#00000002; END_IF;

        IF (Bit[30]) THEN Result:=Result OR 16#40000000; END_IF;
        IF (Bit[31]) THEN Result:=Result OR 16#80000000; END_IF;

    #36567

    Luciano
    Partecipante

    Si ho capito come settare i bit della variabile DWORD, ora però avrei anche la necessità di eseguire l’operazione inversa, cioè testare i bit di una variabile DWORD e settare variabili BOOL. Avete un esempio anche per questo problema ?

    #36568

    Sergio Bertana
    Amministratore del forum

    Eccoti un esempio in linguaggio ST adatto al tuo problema.

        VAR
        Bit : ARRAY[ 0..31 ] OF BOOL; (* Bit risultato *)
        Value : DWORD; (* DWORD valore *)
        END_VAR

       (* Eseguo controllo stato di ogni bit. *)

        Bit[0]:=((Value AND 16#00000001 > 0);
        Bit[1]:=((Value AND 16#00000002 > 0);

        Bit[30]:=((Value AND 16#40000000) > 0);
        Bit[31]:=((Value AND 16#80000000) > 0);

Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)

Devi essere loggato per rispondere a questa discussione.