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 31 CA pour transmettre cette trame. Si vous collez une trame avec son CRC, celui-ci est vérifié.

Lire les registres d’entrée, requête

OctetsChampValeurSignification
01Adresse de l’esclave1Esclave destinataire ou émetteur de cette trame
04Fonction0x04Lire les registres d’entrée
00 00Adresse de départ0Registre d’entrée 30001, adresse du protocole 0x0000
00 01Quantité11 registre d’entrée ; la réponse contient 2 octets de données
31 CACRC-160xCA31Octet faible en premier

La trame complète

  • Avec espaces01 04 00 00 00 01 31 CA
  • Tableau C0x01, 0x04, 0x00, 0x00, 0x00, 0x01, 0x31, 0xCA
  • Sans espaces01040000000131CA
  • Modbus ASCII, puis CR LF:010400000001FA
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
2040xE301
3000xC022
4000x1940
5000xF018
6010xCA31

Le registre vaut finalement 0xCA31 et est transmis octet faible en premier : 31 CA.

Contrôle
Contrôle
Trame

Exemples

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

Octets CRC transmis

31 CA

Requête « Lire les registres d’entrée » vers esclave 1.

Valeur du CRC
0xCA31
Trame complète
01 04 00 00 00 01 31 CA
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 04 00 00 00 01=0xCA31
  2. Transmis octet faible en premier=0xCA31 → 31 CA

Choose the gateway connection for this Modbus line.

Concevoir un système

Le CRC-16 Modbus de 01 04 00 00 00 01 vaut 0xCA31, transmis octet faible en premier sous la forme 31 CA.

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