Vai al contenuto

Set e Test bit di una variabile DWORD

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

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #34916
    Anonimo
    Inattivo

    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
    Anonimo
    Inattivo

    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 visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Devi essere connesso per rispondere a questo topic.