Codes de fonction et d’exception Modbus

Recherchez un code de fonction ou d’exception Modbus public, ou saisissez une réponse telle que 83 02 pour identifier la requête en échec et sa cause.

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

Quel élément avez-vous ?

Exemples

Code de fonction (16 ou 0x10), réponse d’exception relevée sur le réseau ou mots d’un nom français ou anglais

Exception 0x03

Valeur de données non autorisée

Requête en échec
0x10 Écriture de plusieurs registres
Signification
La structure de la requête contient une valeur que le serveur ne peut pas accepter ; ce code ne décrit pas la valeur métier stockée dans un registre.
Octets relevés
90 03

Le premier octet est le code de fonction de la requête augmenté de 0x80 ; le second est le code d’exception.

Méthode de calcul

Exception response function code = request function code + 0x80

La réponse 90 03 indique que la requête 0x10 Écriture de plusieurs registres a échoué avec l’exception 0x03, Valeur de données non autorisée.

Conseil : Une absence de réponse n’est pas une exception. Vérifiez le câblage, l’identifiant d’unité, la vitesse de transmission, la parité et la terminaison avant la table des registres.

Lire une réponse d’exception Modbus

Lorsqu’un appareil Modbus reçoit une requête qu’il ne peut pas exécuter, il renvoie une réponse d’exception : le code de fonction avec son bit de poids fort à 1 (code initial plus 0x80), suivi d’un code d’exception sur un octet. 83 02 signifie qu’une requête Read Holding Registers (0x03) a échoué avec l’exception 02, Illegal Data Address. Saisissez les octets de la réponse ci-dessus pour les décoder.

L’octet de fonction

fonction de réponse = fonction de requête + 0x80

Une réponse normale répète le code de fonction de la requête. Une exception active le bit de poids fort : 0x03 devient 0x83 et 0x10 devient 0x90. Soustrayez 0x80 pour retrouver la requête en échec.

Le code d’exception

01 fonction · 02 adresse · 03 valeur · 04 défaillance de l’appareil

01 Illegal Function : fonction non prise en charge. 02 Illegal Data Address : adresse, ou plage commençant à cette adresse, non acceptée par l’appareil. 03 Illegal Data Value : valeur ou structure de requête non acceptée. 04 Server Device Failure : défaillance pendant l’exécution de la requête. Ce sont les noms des exceptions dans la spécification Modbus.

Codes de fonction en décimal et en hexadécimal

FC16 = 16 en décimal = 0x10

Les manuels utilisent les deux notations. Le champ ci-dessus interprète un nombre sans préfixe comme décimal lorsqu’il correspond à une fonction : 16 désigne Write Multiple Registers. Il affiche aussi la lecture hexadécimale éventuelle. Écrivez 0x16 pour demander explicitement l’hexadécimal.

Une absence de réponse n’est pas une exception. Un délai d’attente peut venir du câblage, de l’identifiant d’unité, de la vitesse de transmission, de la parité, de la terminaison ou d’une trame rejetée pour erreur CRC. Seul un appareil ayant correctement lu la trame peut renvoyer une exception.

Exemples de codes d’exception Modbus

Réponse 83 02 d’un compteur

Soustrayez 0x80 de 0x83 : vous obtenez 0x03, Read Holding Registers. L’exception 02, Illegal Data Address, indique que l’adresse ou la plage de registres demandée n’est pas acceptée. Une cause fréquente est le décalage d’une unité dû à une référence du type 40001, ou une lecture qui dépasse la fin d’un bloc. Le convertisseur d’adresses Modbus aide pour le premier cas.

Exception 0x02 Adresse de données non autorisée Ouvrir dans le calculateur

Réponse 90 03 après une écriture

0x90 − 0x80 = 0x10, Write Multiple Registers ; 03 correspond à Illegal Data Value. L’appareil a reçu la trame, mais refuse une valeur ou la structure de la requête : consigne hors plage, nombre de registres incohérent avec le nombre d’octets, ou écriture sur un bloc en lecture seule.

Exception 0x03 Valeur de données non autorisée Ouvrir dans le calculateur

Que désigne la fonction 16 ?

En décimal, la fonction 16 est Write Multiple Registers ; elle est transmise sous le code 0x10. En hexadécimal, 0x16 désigne Mask Write Register, une requête différente. Dans un manuel, « FC16 » désigne la valeur décimale.

Fonction 16 (0x10) Écriture de plusieurs registres Ouvrir dans le calculateur

Codes de fonction Modbus et réponses d’exception

Codes de fonction publics courants en décimal et en hexadécimal, avec le premier octet de la réponse d’exception si la requête échoue.

FonctionNomHexRéponse d’exception
1Lecture des bobines0x010x81
2Lecture des entrées discrètes0x020x82
3Lecture des registres de maintien0x030x83
4Lecture des registres d’entrée0x040x84
5Écriture d’une bobine0x050x85
6Écriture d’un registre0x060x86
15Écriture de plusieurs bobines0x0F0x8F
16Écriture de plusieurs registres0x100x90
22Écriture masquée d’un registre0x160x96
23Lecture et écriture de plusieurs registres0x170x97
43Transport d’interface encapsulée0x2B0xAB

Télécharger ce tableau (CSV)

Tables de référence

Codes de fonction publics

Fonctions publiques définies dans la spécification V1.1b3. Leur présence dans cette table ne prouve pas qu’un appareil donné les prend en charge.

CodeFonctionAccès aux donnéesLimite de requête du protocolePortée du transport
0x01Lecture des bobinesLecture des bobines · bits1 à 2 000 bobines contiguësProtocole d’application
0x02Lecture des entrées discrètesLecture des entrées discrètes · bits1 à 2 000 entrées contiguësProtocole d’application
0x03Lecture des registres de maintienLecture des registres de maintien · mots de 16 bits1 à 125 registres contigusProtocole d’application
0x04Lecture des registres d’entréeLecture des registres d’entrée · mots de 16 bits1 à 125 registres contigusProtocole d’application
0x05Écriture d’une bobineÉcriture d’une bobine · bitUne seule bobineProtocole d’application
0x06Écriture d’un registreÉcriture d’un registre de maintien · mot de 16 bitsUn seul registreProtocole d’application
0x07Lecture de l’état des exceptionsLecture de huit sorties d’état propres à l’implémentationAucune donnée dans la requêteLiaison série uniquement
0x08DiagnosticDiagnostic de communication par sous-fonctionSelon la sous-fonctionLiaison série uniquement
0x0BLecture du compteur d’événements de communicationLecture de l’état de communication et du compteur d’événementsAucune donnée dans la requêteLiaison série uniquement
0x0CLecture du journal des événements de communicationLecture de l’état de communication, des compteurs et des octets d’événementAucune donnée dans la requêteLiaison série uniquement
0x0FÉcriture de plusieurs bobinesÉcriture de bobines contiguës · bits1 à 1 968 bobines contiguësProtocole d’application
0x10Écriture de plusieurs registresÉcriture de registres de maintien contigus · mots de 16 bits1 à 123 registres contigusProtocole d’application
0x11Identification du serveurLecture d’un identifiant et d’un état propres à l’appareilAucune donnée dans la requêteLiaison série uniquement
0x14Lecture d’enregistrements de fichierLecture d’un ou plusieurs groupes d’enregistrements de fichier7 à 245 octets dans la requêteProtocole d’application
0x15Écriture d’enregistrements de fichierÉcriture d’un ou plusieurs groupes d’enregistrements de fichier9 à 251 octets dans la requêteProtocole d’application
0x16Écriture masquée d’un registreModification des bits d’un registre de maintienUn seul registreProtocole d’application
0x17Lecture et écriture de plusieurs registresÉcriture de registres de maintien, puis lecture de registres de maintienLecture : 1 à 125 registres ; écriture : 1 à 121Protocole d’application
0x18Lecture de la file FIFOLecture du nombre d’éléments FIFO et des registres de valeurAu plus 31 éléments FIFO renvoyésProtocole d’application
0x2BTransport d’interface encapsuléeAcheminement vers une interface définie par MEITypes MEI publiés : 0x0D et 0x0EProtocole d’application

Source : MODBUS Application Protocol Specification, V1.1b3

Objets de données primaires

Les quatre tables de données primaires Modbus. Leur organisation en mémoire et leur éventuel chevauchement dépendent de l’appareil.

ObjetÉlémentAccès par le protocoleFonctions publiques principales
BobinesUn bitLecture et écriture0x01 lecture · 0x05/0x0F écriture
Entrées discrètesUn bitLecture seule0x02 lecture
Registres d’entréeMot de 16 bitsLecture seule0x04 lecture
Registres de maintienMot de 16 bitsLecture et écriture0x03 lecture · 0x06/0x10/0x16/0x17 écriture

Source : MODBUS Application Protocol Specification, V1.1b3

Codes d’exception

Codes renvoyés dans une réponse d’exception Modbus. Un délai d’attente ou une trame rejetée pour erreur CRC ou de parité n’en constitue pas une.

CodeExceptionSignification selon le protocole
0x01Fonction non autoriséeLa fonction demandée n’est pas autorisée pour ce serveur ou dans son état actuel.
0x02Adresse de données non autoriséeL’adresse de départ, la plage demandée ou leur combinaison n’est pas autorisée pour ce serveur.
0x03Valeur de données non autoriséeLa structure de la requête contient une valeur que le serveur ne peut pas accepter ; ce code ne décrit pas la valeur métier stockée dans un registre.
0x04Défaillance du serveurUne erreur irrécupérable s’est produite pendant que le serveur tentait l’opération demandée.
0x05Accusé de réceptionLe serveur a accepté une requête de programmation spécialisée, mais a besoin de plus de temps pour la terminer.
0x06Serveur occupéLe serveur exécute une commande de programmation longue ; le client peut réessayer plus tard.
0x08Erreur de parité mémoireLe contrôle de cohérence d’un enregistrement de fichier a échoué avec la fonction 0x14 ou 0x15 et le type de référence 0x06.
0x0AChemin de passerelle indisponibleLa passerelle n’a pas pu allouer de chemin interne entre son port d’entrée et le chemin de sortie demandé.
0x0BAbsence de réponse de l’appareil cibleLa passerelle n’a pas reçu de réponse de l’appareil cible.

Source : MODBUS Application Protocol Specification, V1.1b3

Questions sur codes d’exception Modbus

Que signifie l’exception Modbus 02 ?

Illegal Data Address : l’adresse de départ ou la plage demandée n’est pas acceptée par l’appareil. Vérifiez la convention d’adressage et le nombre de registres demandés.

Que signifie l’exception Modbus 01 ?

Illegal Function : l’appareil ne prend pas en charge ce code de fonction, ou ne l’accepte pas dans son état actuel. Beaucoup de compteurs n’en prennent en charge que quelques-uns, souvent 03, 04 et 16.

Pourquoi ai-je un délai d’attente au lieu d’une exception ?

L’appareil n’a pas lu la requête correctement : mauvais identifiant d’unité, vitesse de transmission ou parité, fils A et B inversés, terminaison absente ou erreur CRC. Une réponse d’exception suppose une trame reçue et comprise. Le vérificateur de terminaison et de polarisation RS-485 couvre la liaison physique.

Que signifient les exceptions 0A et 0B ?

Ce sont des exceptions de passerelle. 0A, Gateway Path Unavailable : la passerelle n’a pas pu acheminer la requête. 0B, Gateway Target Device Failed to Respond : l’appareil cible situé derrière elle n’a pas répondu. Il faut examiner le trajet en aval de la passerelle, notamment la liaison série.

Limites de ce résultat

  • Un code de fonction public ne prouve pas qu’un serveur donné le prend en charge ; consultez la table des registres et la documentation du micrologiciel de l’appareil.
  • Le code de fonction ne précise à lui seul ni la signification et l’échelle des registres, ni leur signe, l’ordre des octets et des mots, la convention d’adressage ou la sûreté d’une écriture.
  • Les fonctions réservées à la liaison série ne sont pas des services Modbus TCP généraux. Une passerelle peut imposer d’autres restrictions.
  • Distinguez l’absence de réponse d’une réponse d’exception. Le câblage, les délais, l’identifiant d’unité, le CRC, la parité, le routage et la disponibilité de l’appareil restent à diagnostiquer.

Mesurer en continu

Un ZMB lit et écrit localement sur des appareils Modbus RTU, puis transmet les données au Gateway par le réseau maillé sans fil. Il permet d’intégrer un compteur sans tirer de câble de données jusqu’au tableau.

Guides associés

Sources

  1. MODBUS Application Protocol Specification V1.1b3 (s’ouvre dans un nouvel onglet) (PDF) Modbus Organization, 2012-04-26
  2. Specifications and Implementation Guides (s’ouvre dans un nouvel onglet) Modbus Organization, accessed 2026-09-14