Vai al contenuto
PLC Forum


Calcolo Crc


christian ceruti

Messaggi consigliati


0xA001 sono due byte = 1010 0000 0000 0001

2 byte = 16 bit ergo puoi farmi vedere i passaggi della divisione

000000000010101000000001000000000000000 / 1010 0000 0000 0001 ?

Link al commento
Condividi su altri siti

Non puoi dividere 2A01 / A001, perchè il dividendo è maggiore del divisore.

Comunque facciamo un esempio con un altro numero, per esempio FB06 / A001.

Si cerca la prima parte del dividendo che sia maggiore del divisore. Il dividendo è (0xFB 06 = 1111101100000110). Essendo entrambi numeri di 16 bit, si prende tutto il numero.

Se il dividendo fosse stato di ad es.: 24bit, si prendevano i primi 16 bit (da sinistra) se maggiori del divisore, altrimenti se ne prendevano 17.

1111101100000110 / 1010000000000001, e dobbiamo scrivere 1 al quoziente, calcolando il resto come differenza

1111101100000110 - 101000000000000. Si ottiene 101 1011 0000 0101.

Il divisore sta nel dividendo una volta e con resto di 15 bit, che non è più divisibile per 16bit.

Facciamo un altro esempio

A02A01 = 101000000010101000000001 (3 byte, 24bit) divisore

A001 = 1010000000000001 (2 byte, 16bit) dividendo.

1010 0000 0010 1010 0000 0001 / 1010 0000 0000 0001 = 100000000
1010 0000 0010 1010
            101 0011
            1010 0110           non ci sta aggiungo uno zero al quoziente e calo un bit
           1 0100 1100          non ci sta aggiungo uno zero al quoziente e calo un bit
           10 1001 1000         non ci sta aggiungo uno zero al quoziente e calo un bit
           101 0011 0000        non ci sta aggiungo uno zero al quoziente e calo un bit
           1010 0110 0000       non ci sta aggiungo uno zero al quoziente e calo un bit
          1 0100 1100 0000      non ci sta aggiungo uno zero al quoziente e calo un bit
          10 1001 1000 0000     non ci sta aggiungo uno zero al quoziente e calo un bit
          101 0011 0000 0001    non ci sta aggiungo uno zero al quoziente e non ho più bit da calare. Questo è il resto della divisione

Link al commento
Condividi su altri siti

Grazie mille, puoi spiegarmi un' ultima cosa

se vedi in questo sito

http://www.lammertbies.nl/comm/info/crc-calculation.html

selezionando Hex come Input type, il calcolo del CRC con 002A01 viene fatto e peraltro è quello che viene accettato anche dal azionamento che comado io ( CRC-16 (Modbus) è quello che mi interessa )

è possibile che vengano invertiti i primi 2 byte ? per non avere 00 come primo valore? comunque vedo che viene calcolato il CRC anche per 2A01 anche se non torna il valore che serve a me.

Link al commento
Condividi su altri siti

Nel CRC-16, come puoi vedere, 002A01 e 2A01 da lo stesso risultato.

Nel Modbus, la trasmissione dati avviene little endian, cioè il byte più basso per prima

Link al commento
Condividi su altri siti

Allora, non sono sicuro secondo me devi considerare una word, cioè 2 byte (16 bit) non 3 byte, quindi il tuo numero sarebbe 2A 01.

In modbus devi calcolare 01 2A.

00 2A 01 è sbagliato, perchè c'è un byte di troppo.

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