Vai al contenuto
PLC Forum


Puntare un bit di una variabile


Messaggi consigliati

Inserito: (modificato)

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

Inserita:
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

 

Inserita:

ok non so bene come fare ma provo a studiare la cosa eventualmente ti chiedo consiglio.

Nel frattempo ti ringrazio!! 

  • 3 weeks later...
Inserita:

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;

Inserita:
8 minuti fa, Marco Mondin ha scritto:

ELSE
   ArrayBit [x] := FALSE;

giusto.

è fine settimana... pardon.

ciao.

Inserita:

grazie delle risposte. Avevo dimenticato di aggiornare il post!

 

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...