CRC en protocle MODBUS
Fermé
tout_fou
Messages postés
95
Date d'inscription
samedi 20 mars 2004
Statut
Membre
Dernière intervention
10 mai 2009
-
15 mai 2005 à 10:26
bogossEvreux - 27 mai 2005 à 23:49
bogossEvreux - 27 mai 2005 à 23:49
1 réponse
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
506
15 mai 2005 à 12:45
15 mai 2005 à 12:45
Salut,
A001 c'est le polynome générateur pour le calcul du CRC. Plus d'info
http://www.cours-info.net/index.php/2005/04/24/3-le-crc---cyclic-redondant-coding
Sinon google te renvoit sur pas mal de page en français qui cause du CRC,
et en particulier pour le MODBUS.
A001 c'est le polynome générateur pour le calcul du CRC. Plus d'info
http://www.cours-info.net/index.php/2005/04/24/3-le-crc---cyclic-redondant-coding
Sinon google te renvoit sur pas mal de page en français qui cause du CRC,
et en particulier pour le MODBUS.
27 mai 2005 à 23:49
au passage le code est en C.
#include <stdio.h>
#define NUMDATA 1
// Calcul de CRC16
unsigned int calcul_CRC16(unsigned int crc, unsigned int data)
{
const int Poly16=0xA001;
int flag, i;
crc = (crc^data); //XOR
for (i=0; i<8; i++)
{
flag=(crc & 0x0001);//On récupère le dernier bit
crc=crc/2; //décalage a droite, pas de 1
if (flag) //Si le dernier bit vaut 1
crc=crc^Poly16; //alors on fait un Xor avec Poly16
}
return(crc);
}
int main()
{
char data[NUMDATA];
int Crc;
data[0] = 0x02;
data[1] = 0x07;
Crc=0xFFFF;
for (int i=0; i<NUMDATA; i++)
{
Crc = calcul_CRC16(Crc, data[i] );
printf("%d",Crc);
}
return 0;
}