Vai al contenuto
PLC Forum


Calcolo Crc


Messaggi consigliati

Inserita:

0xA001 sono due byte = 1010 0000 0000 0001


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

Inserita:

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

Inserita:

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.

Inserita:

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

Inserita:

La chiave di volta.

Perciò in modbus 002A01 diventa 012A00?

Oppure 2A0001?

NoNickName io ti ringrazio ancora, anche per la pazienza.

Inserita:

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.

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