Home › Forum › Programmazione IEC 61131 (LogicLab) › Set e Test bit di una variabile DWORD
- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 5 mesi fa da Sergio Bertana.
-
AutorePost
-
Novembre 9, 2010 alle 4:24 pm #34916AnonimoInattivo
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 ?
Novembre 9, 2010 alle 4:29 pm #36562Sergio BertanaAmministratore del forumNella libreria ePLCAuxLib.pll potrai trovare le funzioni VBitTest e VBitSet, 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).
Novembre 9, 2010 alle 4:55 pm #36566Sergio BertanaAmministratore del forumAllego 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;Novembre 9, 2010 alle 5:01 pm #36567AnonimoInattivoSi 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 ?
Novembre 9, 2010 alle 5:06 pm #36568Sergio BertanaAmministratore del forumEccoti 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); -
AutorePost
- Devi essere connesso per rispondere a questo topic.