0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99,
0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F,
0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43,
0x83, 0x41, 0x81, 0x80,
0x40
} ;
unsigned short int CRC16(unsigned char *puchMsg, unsigned short int
usDataLen)
{
initialisé */
initialisé */
consultation CRC */
while(usDataLen--)
*/
}
Voir aussi
Il y a de nombreuses manières de calculer un total de contrôle CRC. Pour plus d'informations,
rendez-vous sur le site Web de l'organisation Modbus (http://www.modbus.org/) qui contient
des descriptions et des exemples de programmation détaillés.
MAG 8000 Modbus RTU
Instructions de service, 04/2016, A5E03828423-AA
unsigned char uchCRCHi = 0xFF; /* octet de poids fort du CRC
unsigned char uchCRCLo = 0xFF; /* octet de poids faible du CRC
unsigned uIndex ;
{
uIndex = uchCRCHi ^ *puchMsg++ ; /* calculer le CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
uchCRCLo = auchCRCLo[uIndex] ;
}
#ifdef INTEL_LIKE_PROCESSOR
return (unsigned short int)((uchCRCLo << 8) | uchCRCHi);
#else
return (unsigned short int)((uchCRCHi << 8) | uchCRCLo);
#endif
/* indexera dans la table de
/* tampon de messages de transmission
Annexe
B.2 Calcul du CRC
85