NoNickName Inserita: 7 gennaio 2012 Segnala Inserita: 7 gennaio 2012 0xA001 sono due byte = 1010 0000 0000 0001
Yurigas Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 0xA001 sono due byte = 1010 0000 0000 00012 byte = 16 bit ergo puoi farmi vedere i passaggi della divisione000000000010101000000001000000000000000 / 1010 0000 0000 0001 ?
NoNickName Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 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 esempioA02A01 = 101000000010101000000001 (3 byte, 24bit) divisoreA001 = 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
Yurigas Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 Grazie mille, puoi spiegarmi un' ultima cosase vedi in questo sitohttp://www.lammertbies.nl/comm/info/crc-calculation.htmlselezionando 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.
NoNickName Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 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
Yurigas Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 La chiave di volta.Perciò in modbus 002A01 diventa 012A00?Oppure 2A0001?NoNickName io ti ringrazio ancora, anche per la pazienza.
NoNickName Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora