CRC en protocle MODBUS

Salut,
dans mon projet informatique, j'utilise le protocole MODBUS,
je dois coder une fonction qui calcul le CRC de la trame, j'ai trouver l'algoritme (voir au lien suivant ) :
http://stielec.ac-aix-marseille.fr/cours/abati/modbus.htm

Mon probleme est que j en ecomprend pas pouquoi a un moment on fait un OU exclusif entre le CRC et la valeure $A001 .

POuvez vous me l'expliquer.

merci d'avance

SEB

1 réponse

  1. 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.
    1. tiens sa va surement t'aider sa. moi ausi je fait un projet en info. je doit communiquer avec un automate schneider. mais j'ai un probleme j'arrive pa a mettre en forme la tram pour l'envoyer correctement si tu sais commen faire ya mon mail tu pe me repondre merci.
      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;
      }