Calculateur de CRC et de LRC Modbus

Calculez ou vérifiez le CRC-16 d’une trame Modbus RTU ou le LRC d’une trame Modbus ASCII, puis examinez les champs portés par chaque octet.

Modbus et liaisons série Mis à jour Gratuit, sans inscription

CRC-16, RTU

Ajoutez 76 87 pour transmettre cette trame. Si vous collez une trame avec son CRC, celui-ci est vérifié.

Lire les registres de maintien, requête

OctetsChampValeurSignification
11Adresse de l’esclave17Esclave destinataire ou émetteur de cette trame
03Fonction0x03Lire les registres de maintien
00 6BAdresse de départ107Registre de maintien 40108, adresse du protocole 0x006B
00 03Quantité33 registres de maintien ; la réponse contient 6 octets de données
76 87CRC-160x8776Octet faible en premier

La trame complète

  • Avec espaces11 03 00 6B 00 03 76 87
  • Tableau C0x11, 0x03, 0x00, 0x6B, 0x00, 0x03, 0x76, 0x87
  • Sans espaces1103006B00037687
  • Modbus ASCII, puis CR LF:1103006B00037E
Calcul du CRC octet par octet

Le registre démarre à 0xFFFF. Chaque octet est combiné par XOR avec son octet faible, puis le registre est décalé huit fois à droite. Un XOR avec 0xA001 suit chaque décalage qui fait sortir un 1.

OctetValeurRegistre après cet octet
1110x4C7F
2030xE14D
3000x3521
46B0xF7B4
5000x77F7
6030x8776

Le registre vaut finalement 0x8776 et est transmis octet faible en premier : 76 87.

Valeurs d’exemple
Contrôle
Contrôle
Trame

Exemples

À partir de l’adresse de l’esclave. Incluez le CRC pour le vérifier

Octets CRC transmis

76 87

Requête « Lire les registres de maintien » vers esclave 17.

Valeur du CRC
0x8776
Trame complète
11 03 00 6B 00 03 76 87
Longueur de la trame avec CRC
8 octets

Modbus transmet d’abord l’octet faible du CRC.

Méthode de calcul
  1. CRC = CRC-16/MODBUS(trame), départ 0xFFFF, polynôme 0xA001=11 03 00 6B 00 03=0x8776
  2. Transmis octet faible en premier=0x8776 → 76 87

Choose the gateway connection for this Modbus line.

Concevoir un système

Le CRC-16 Modbus de 11 03 00 6B 00 03 vaut 0x8776, transmis octet faible en premier sous la forme 76 87.

Conseil : Collez une trame directement depuis une capture série, CRC compris. Si le code fonction détermine sa longueur, les derniers octets sont vérifiés et le résultat indique si le contrôle correspond.

Calculer un CRC-16 Modbus

Chaque trame Modbus RTU se termine par un CRC de 16 bits calculé sur tous les octets précédents, transmis octet faible en premier. Un appareil qui obtient un CRC différent rejette la trame sans répondre : un mauvais CRC apparaît donc comme une expiration du délai plutôt que comme une exception. Modbus ASCII utilise un LRC d’un octet. Le calculateur établit les deux contrôles et présente la trame octet par octet.

CRC-16 (Modbus RTU)

Départ 0xFFFF ; pour chaque octet : XOR, puis 8 × (décalage à droite ; si un 1 sort, XOR 0xA001)

Initialisez le registre à 0xFFFF. Appliquez XOR entre le premier octet et l’octet faible du registre, puis décalez huit fois à droite en appliquant XOR avec 0xA001 après chaque décalage qui fait sortir un 1. Répétez pour chaque octet, de l’adresse de l’esclave au dernier octet de données.

Ordre des octets sur la liaison

CRC 0x8776 → transmis 76 87

Le CRC est le seul champ d’une trame Modbus transmis octet faible en premier. Les autres champs, y compris les adresses et les valeurs des registres, sont transmis octet fort en premier.

LRC (Modbus ASCII)

LRC = (0x100 − (somme des octets modulo 0x100)) modulo 0x100

Additionnez les octets d’adresse, de fonction et de données, ignorez toute retenue au-delà de 8 bits puis prenez le complément à deux. Le LRC est transmis sous forme de deux caractères hexadécimaux après les données et avant CR LF.

Exemples : CRC Modbus

Lire trois registres de maintien de l’esclave 17

Esclave 0x11 (17), fonction 03, adresse de départ 0x006B, trois registres : c’est la requête du guide de la liaison série Modbus. Son CRC vaut 0x8776, transmis 76 87 ; la trame complète est donc 11 03 00 6B 00 03 76 87.

Octets CRC transmis 76 87 Ouvrir dans le calculateur

La même requête en Modbus ASCII

0x11 + 0x03 + 0x00 + 0x6B + 0x00 + 0x03 = 0x82. Son complément à deux est 0x7E : le LRC est donc 7E et la ligne est :1103006B00037E, suivie de CR LF.

Octet LRC 7E Ouvrir dans le calculateur

Vérifier une trame capturée

Une capture série contient 01 03 00 00 00 0A C5 CD. En saisissant les six premiers octets, on obtient C5 CD, identique aux deux derniers octets capturés : le contrôle de cette trame correspond. S’ils diffèrent, vérifiez le câblage, la terminaison et les perturbations avant l’appareil.

Octets CRC transmis C5 CD Ouvrir dans le calculateur

CRC et LRC de requêtes Modbus courantes

Requêtes des esclaves 1 et 17, avec le CRC dans son ordre de transmission et le LRC Modbus ASCII.

Trame (hex.)CRC-16 transmisLRC
01 03 00 00 00 0184 0AFB
01 03 00 00 00 0AC5 CDF2
01 04 00 00 00 0271 CBF9
01 06 00 01 00 0398 0BF5
11 03 00 6B 00 0376 877E
11 10 00 01 00 02 04 00 0A 01 02C6 F0CB

Télécharger ce tableau (CSV)

Questions sur CRC Modbus

Pourquoi le CRC Modbus est-il transmis octet faible en premier ?

Cet ordre découle du calcul du CRC par décalage à droite, à partir du bit de poids faible. La spécification de la liaison série Modbus impose l’octet faible avant l’octet fort. Un outil qui affiche 0x8776 et une trame qui se termine par 76 87 sont tous deux corrects.

Que se passe-t-il si le CRC est erroné ?

L’appareil rejette la trame sans répondre ; le maître voit expirer son délai d’attente. Un mauvais CRC ne produit pas de réponse d’exception. Des erreurs CRC répétées peuvent indiquer un problème de terminaison, de polarisation, de mise à la terre ou de cheminement des câbles.

Modbus TCP utilise-t-il un CRC ?

Non. Modbus TCP s’appuie sur le contrôle d’intégrité de TCP et utilise un en-tête MBAP à la place du CRC. Une passerelle entre TCP et RTU ajoute ou retire le CRC.

Quelle variante du CRC utilise Modbus ?

CRC-16/MODBUS : polynôme 0x8005 sous forme réfléchie (0xA001), valeur initiale 0xFFFF, sans XOR final.

Limites de ce résultat

  • Un CRC conforme prouve seulement que les octets saisis reproduisent le contrôle. Il ne valide ni la fonction, ni l’adresse, ni la quantité, ni la réponse de l’appareil.
  • Les trames Modbus TCP ne portent pas ce contrôle ; l’en-tête MBAP n’est pas construit ici.

Mesurer en continu

Un ZMB construit et vérifie lui-même les trames RTU. Il interroge localement l’appareil Modbus sur RS-485 puis envoie les données au Gateway par le réseau radio maillé.

Guides associés

Sources

  1. MODBUS over Serial Line Specification and Implementation Guide V1.02 (s’ouvre dans un nouvel onglet) (PDF) Modbus Organization, 2006-12-20
  2. SCADAPack E Modbus frame diagnostics example (s’ouvre dans un nouvel onglet) Schneider Electric, modified 2025-08-18