Forum: NonSoloMoto -> Calcolo CRC-16 bit (trasmissione digitale informazioni)

(c) www.bandit.it
http://www.bandit.it/public

URL di questa discussione
http://www.bandit.it/public/modules/newbb_plus/viewtopic.php?topic_id=60657&forumid=1


© skabe :

24/1/2012 12:06
 - Quesito sulla tecnologia di trasmissione dati digitale

Gentili Signori, qualcuno sa indicarmi la procedura per calcolare con lapis e pezzetto di carta il CRC (Cyclic Redundancy Check) a 16 bit con polinomio generatore 0x8408, di una stringa binaria? Esistono vari programmi in rete, ma vorrei prima calcolarlo a mano per poi implementarlo in automatico.
Grazie

© cucco :

24/1/2012 12:40
 :-o

© ElNonino :

24/1/2012 12:44
 Non so cosa ci devi fare ma qui: CRC trovi le formulette di calcolo.

Io per lavoro uso spesso trasmissioni di dati che devono essere affidabili, un sistema semplice per creare un crc16 affidabile e senza polinomio generatore è questo:

In trasmissione sommo byte a byte con risultato in byte i dati da trasmettere e questo mi genera il primo byte del crc poi eseguo sugli stessi dati un Xor (OR Esclusivo) e questo mi genera il secondo byte del crc.

In ricezione eseguo la stessa operazione e poi confronto i 2 byte di crc ricevuti con quelli calcolati lato rx; se coincidenti il pacchetto ricevuto è valido.

Tale sistema è più lento solo dal lato ricezione rispetto al classico con seed, però è affidabile e non necessita di conoscere il polinomio generatore (che se scelto male è meno affidabile).

:hey:

© Alexpaper :

24/1/2012 13:01
 ma un po' di sana gangia? :-P

© skabe :

24/1/2012 17:56
 Devo interfacciare un PLC Step7 ad un generatore plasma tedesco, con polinomio generatore secondo IEC13239. Con altri generatori, bastava trasmettere gli ultimi due bytes della checksum, invece con i tedeschi le cose sono molto piu' serie e si adopera il CRC-16 CCITT . C'e' un programmino in C per trovare il CRC, e vorrei prima ricavarlo a mano per poi ricostruire l' algoritmo in Step7. Il problema-problemino e' che si agisce su 16 bit e cio' non e' tanto agevole da trattare con carta e penna. Sulla rete vi sono parecchie applicazioni di calcolo, ma i risultati che ottengo non sono quelli indicati dai tedeschi. Ho chiesto loro qualche indicazione, ma, oltre a rispedirmi un estratto delle IEC13239, non mi hanno inviato un esempietto da quattro soldi tanto per capire se stiamo parlando lo stesso idioma. Per esempio, non e' chiaro se il polinomio generatore e' 'normale' (0x1021) oppure 'inverso' (0x8408), e sono ancora in attesa di una loro risposta. Per il momento grazie per la collaborazione, una birra non appena ci vediamo.

(c) www.bandit.it
http://www.bandit.it/public

URL di questa discussione
http://www.bandit.it/public/modules/newbb_plus/viewtopic.php?topic_id=60657&forumid=1