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 8C D4 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
01Adresse de l’esclave1Esclave destinataire ou émetteur de cette trame
03Fonction0x03Lire les registres de maintien
2E E0Adresse de départ12000Registre de maintien 412001, adresse du protocole 0x2EE0
00 01Quantité11 registre de maintien ; la réponse contient 2 octets de données
8C D4CRC-160xD48COctet faible en premier

La trame complète

  • Avec espaces01 03 2E E0 00 01 8C D4
  • Tableau C0x01, 0x03, 0x2E, 0xE0, 0x00, 0x01, 0x8C, 0xD4
  • Sans espaces01032EE000018CD4
  • Modbus ASCII, puis CR LF:01032EE00001ED
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
1010x807E
2030x2140
32E0xECA0
4E00xF0ED
5000x4D30
6010xD48C

Le registre vaut finalement 0xD48C et est transmis octet faible en premier : 8C D4.

Contrôle
Contrôle
Trame

Exemples

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

Octets CRC transmis

8C D4

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

Valeur du CRC
0xD48C
Trame complète
01 03 2E E0 00 01 8C D4
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=01 03 2E E0 00 01=0xD48C
  2. Transmis octet faible en premier=0xD48C → 8C D4

Choose the gateway connection for this Modbus line.

Concevoir un système

Le CRC-16 Modbus de 01 03 2E E0 00 01 vaut 0xD48C, transmis octet faible en premier sous la forme 8C D4.

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