Vai al contenuto
PLC Forum


Calcolo bit in una word


Ghisla

Messaggi consigliati

Ciao ragazzi, mi trovo davanti a questa parte di programma fatta da un mio ex collega.

Quello che fa è guardare il numero pnt (che corrisponde ad una stazione), e trovare il bit corrispondente all'interno di una word.

non capisco come fa a calcolare il bit. perchè fa un UW con 7? 

 

      L     "t_ciclo_st_nastro".pnt
      L     1
      -I
      L     8
      /I
      SLW   3
      T     #W_APP_ST_ESC

      L     32
      L     "t_ciclo_st_nastro".pnt
      -I
      UW    w#16#7
      L     #W_APP_ST_ESC
      OW
      LAR1
      AUF   "GEN"
      UN DBX [ AR1 , P#14.0 ]
      s M30.0

Link al commento
Condividi su altri siti


Ciao,

visto così serve per identificare la posizione in bit di un numero 0-31 data dword.

Ipotizza di avere un .pnt = 28, il quale diviene 27 (immagino pnt parta da 1 e non da 0, per questo la sottrazione, per rimanere "coerente" con i bit 0-7 invece di 1-8)

il risultato dopo uw7 è 4

il 27esimo bit di una dword corrisponde al quinto bit (4 partendo dal bit 0, quindi quinto bit) del quarto byte della dword.

 

se .pnt fosse 13, avresti il risultato dopo uw di 3, poichè il 12esimo (13-1) bit della dword è il quarto bit (quindi 3 partendo da 0) del secondo byte della dword

 

Spero di esser riuscito a spiegarmi!

 

Ciao!

Link al commento
Condividi su altri siti

il 7 in hex->bin è  0000 0000 0000 0111

28 in dec->bin è  0000 0000 0001 1100 (ho usato 28 per ricollegarmi al mio esempio)

facendo un andword ti trovi 0000 0000 0000 0100 = 4

E' un modo per fare un and tenendo buoni solo i primi 3 bit, in modo da avere sempre un numero da 0 a 7 quando esegui l'operazione, numero che indica la posizione del bit che ti interessa trovare.

 

l'or successivo serve comunque per creare l'indice di partenza da quale il software va a fare il confronto sul bit 14.0. Se =0, allora setta m30.0

(edit, non mi ero reso conto che #W_APP_ST_ESC era dichiarato nel codice :P )

Modificato: da DesmoGiec
Link al commento
Condividi su altri siti

1 ora fa, Ghisla ha scritto:

Non mi è ancora chiaro

Per capire a fondo il codice ti consiglio di studiarti bene la composizione di un puntatore ANY. Trovi a tal scopo le informazioni sul manuale di Step 7 oppure anche in questo forum, cercando la parola chiave ANY ho trovato queste 3 discussioni: 

 

Link al commento
Condividi su altri siti

11 minuti fa, Ghisla ha scritto:

ma con l'esempio che ho postato io non ha nulla a che vedere

Sembra anche a me.

Dal codice si capisce cosa fa, ma non si capisce perché lo fa.
La prima parte è comprensibile: azzera i 3 bit a destra e, parlando di puntatori, significa puntare al primo bit di un byte.

Capire, invece, il perché delle operazioni della seconda parte, non saprei che dire.

 

Questo è il classico modo di programmare che io considero demenziale, non tanto per come è scritto il codice (comunque migliorabile), ma per la totale assenza di commenti.

Link al commento
Condividi su altri siti

Ciao Batta.

praticamente da pannello ci sono 32 bit messi una una dword che indicano stazione esclusa se = 0 e stazione inclusa se = 1. 

stazione 1 = bit 0.7  stazione 8 = bit 0.0 ecc.

Quello che fa è guardare il puntatore, che corrisponde ad una stazione (impostato in un'altra parte del programma), e tramite il puntatore andare a vedere se quella stazione è esclusa oppure inclusa.

Quindi se il puntatore vale 10 ( cioè stazione 10) fa tutto il casino per vedere se il bit della stazione 10 è on.

il 32 - puntatore lo fa perchè la stazione 1 corrisponde all'ultimo bit e viceversa.

altrimenti se la stazione 1 fosse su bit 0.0 poteva fare puntatore - 1  

 

 

Link al commento
Condividi su altri siti

Ora è un po' più chiaro, ma il quesito che pongo è sempre lo stesso: perché non scriverlo come commento nel codice?
Nei miei programmi ci sono forse più righe di commento che di codice. E non lo faccio per gli altri, ma per me stesso.
Nel momento in cui scrivi il programma i commenti ti servono a poco (aiutano comunque a fissare meglio il concetto), ma ti immagini, rimettere le mani, dopo anni, su un programma senza commenti?

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