Jump to content
PLC Forum


Sign in to follow this  
lucadp

Puntare un bit di una variabile

Recommended Posts

lucadp

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!

Edited by lucadp

Share this post


Link to post
Share on other sites

smartpatrol
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

 

Share this post


Link to post
Share on other sites
lucadp

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

Nel frattempo ti ringrazio!! 

Share this post


Link to post
Share on other sites
zanellatofabio

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;

Share this post


Link to post
Share on other sites
Marco Mondin

ELSE
   ArrayBit [x] := FALSE;

Share this post


Link to post
Share on other sites
zanellatofabio
8 minuti fa, Marco Mondin ha scritto:

ELSE
   ArrayBit [x] := FALSE;

giusto.

è fine settimana... pardon.

ciao.

Share this post


Link to post
Share on other sites
lucadp

grazie delle risposte. Avevo dimenticato di aggiornare il post!

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...