Vai al contenuto
PLC Forum


Puntare un bit di una variabile


Messaggi consigliati

Ciao a tutti.

avrei una necessità che riassumo brevemente:

Parliamo di somachine (codesys).

 

Avrei bisogno di sapere il valore del bit di una word.

Molto semplice se scrivo in questi termini:

--------------------------------------------------

VAR

var_word:  WORD:

bit0:  BOOL;

 

..

cnt:INT;

END_VAR

 

bit0:=var_word.0;

bit1:=var_word.1;

ecc

ecc

----------------------------------------------------

Così devo scrivere 16 righe di programma.

Se utilizzo un ciclo FOR risulta qualcosa del tipo:

FOR cnt:=0 TO 15 DO

    ArrayBit[cnt]  :=  var_word.(cnt);

END_FOR;

 

Ovviamente non funziona!!

non è possibile puntare a un bit di una word con un puntatore variabile!!

Qualcuno ha qualche idea??

 

Grazie in anticipo!

Modificato: da lucadp
Link al commento
Condividi su altri siti


14 ore fa, lucadp ha scritto:

FOR cnt:=0 TO 15 DO

    ArrayBit[cnt]  :=  var_word.(cnt);

END_FOR;

 

 

vai a testare la tua word in and con una maschera. Inizializzi la maschera ad 1 poi ad ogni loop shifti di una posizione a sinistra

 

Link al commento
Condividi su altri siti

  • 3 weeks later...

Ciao,

Il suggerimento di smartpatrol è corretto.

Io farei così :

 

dichiarazione:

 

var_word  : WORD;

w_result : WORD;

w_cmp     : WORD;

x : INT ;

ArrayBit : ARRAY [0..15] OF BOOL;

 

codice:


w_cmp:=1; // preparo la maschera a 0000000000000001
FOR x:=0 TO 15 DO

w_result := w_to_test AND w_cmp;

w_cmp:=SHL( w_cmp,1);
IF w_result <> 0 THEN

ArrayBit [x] := TRUE ;
END_IF;
END_FOR;

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...