Modbus RTU, ASCII et TCP avec SerialTool

Qu'est-ce que Modbus

Modbus est un protocole de communication série créé en 1979 par Modicon® (maintenant partie de Schneider Electric) pour connecter ses automates programmables industriels (API). Il est devenu une norme de facto dans la communication industrielle et est l'un des protocoles de connexion les plus largement utilisés dans le monde pour les dispositifs électroniques industriels. Modbus est un protocole sans redevance déclaré sous forme de spécifications sur le site web de The Modbus Organization.

En termes simples, il s'agit d'une méthode utilisée pour transmettre des informations sur des lignes série entre des dispositifs électroniques. Le dispositif demandeur d'informations est appelé le client Modbus, et les dispositifs fournissant des informations sont des serveurs Modbus. Dans un réseau Modbus standard, il y a un client et jusqu'à 247 serveurs, chacun ayant une adresse de serveur unique de 1 à 247. Le client peut également écrire des informations aux serveurs.


Conçu à l'origine pour une utilisation industrielle, au fil du temps, ce protocole a été adopté dans divers secteurs, devenant l'un des protocoles les plus répandus. Même aujourd'hui, après plus de 40 ans, il est disponible dans de nombreux dispositifs, tels que les panneaux opérateurs, les API, l'automatisation résidentielle et même intégré à des dispositifs simples comme Arduino.

Transmission Modbus RTU et ASCII via Série

Lors de la création du protocole, la communication devait se faire via un port série, c'est pourquoi elle a été implémentée dans SerialTool. Modbus est souvent utilisé pour connecter un ordinateur de supervision à une unité terminale distante (UTR) dans les systèmes de supervision, de contrôle et d'acquisition de données (SCADA). Selon le format dans lequel les données sont transmises, le protocole est divisé en :

  • MODBUS RTU - les données sont transmises au format hexadécimal.
  • MODBUS ASCII - les données sont transmises au format ASCII.

La gestion des erreurs diffère dans les deux cas ; dans MODBUS RTU, une vérification de redondance cyclique (CRC) est utilisée et envoyée après les commandes, tandis que dans MODBUS ASCII, une vérification de redondance longitudinale (LRC) est envoyée après les commandes.

Transmission Modbus TCP

En 1999, "Modbus TCP" a été développé, une norme dédiée aux réseaux utilisant la suite de protocoles TCP/IP. Il s'agit essentiellement d'une version de Modbus série RTU basée sur TCP/IP, permettant la communication sur les réseaux Internet/intranet. Ces dernières années, la version TCP/IP est de plus en plus utilisée car elle est open source, facile à mettre en œuvre, a des coûts de développement faibles et nécessite un support matériel minimal.

La gestion des erreurs diffère dans les deux cas ; dans MODBUS RTU, une vérification de redondance cyclique (CRC) est utilisée et envoyée après les commandes, tandis que dans MODBUS ASCII, une vérification de redondance longitudinale (LRC) est envoyée après les commandes.

Le protocole Modbus TCP/IP utilise le codage binaire des données et le mécanisme de détection d'erreurs TCP/IP. Contrairement au Modbus série, la version TCP/IP est orientée connexion et permet des exécutions simultanées sur le même esclave ou sur plusieurs dispositifs. Modbus TCP/IP utilise également le paradigme maître-esclave, et cette communication utilise quatre types de messages.

Modbus est positionné au niveau 7 dans le modèle OSI (couche d'application), définissant un format de message appelé framing et le mode de transmission des données et des fonctions de contrôle. La communication se fait par le biais du paradigme client-serveur. Le protocole définit une Unité de Données de Protocole (PDU) qui ne dépend pas de la couche de communication sous-jacente. L'Unité de Données d'Application (ADU) introduit des champs supplémentaires pour l'adressage et le contrôle des erreurs.

Client Modbus SerialTool

SerialTool prend en charge les modes de transmission RTU, ASCII et Modbus TCP pour offrir la flexibilité maximale d'un client Modbus professionnel.
SerialTool propose également l'option d'envoyer des commandes brutes pour répondre aux besoins de chaque développeur.

Écran avec le journal des commandes envoyées

Écran avec les commandes de bas niveau envoyées


Fonctions Modbus

Voici les fonctions implémentées par SerialTool pour le protocole Modbus.

Code de Fonction Action Nom de la Table
0x01 Lire Bobines de Sortie Discrètes
0x02 Lire Contacts d'Entrée Discrèts
0x03 Lire Registre de Maintien de Sortie Analogique
0x04 Lire Registres d'Entrée Analogiques
0x05 Écrire Unique Bobine de Sortie Discrète
0x06 Écrire Unique Registre de Maintien de Sortie Analogique
0x0F (déc 15) Écrire Multiple Bobines de Sortie Discrètes
0x10 (déc 16) Écrire Multiple Registres de Maintien de Sortie Analogiques

Structures de Données Modbus

Les informations sont stockées dans le dispositif serveur dans quatre tables différentes. Deux tables stockent des valeurs discrètes marche/arrêt (bobines), et deux stockent des valeurs numériques (registres). Les bobines et les registres ont chacun une table en lecture seule et une table en lecture/écriture. Chaque table a 9999 valeurs. Chaque bobine ou contact est de 1 bit et a une adresse de données entre 0000 et 270E. Chaque registre est de 1 mot = 16 bits = 2 octets et a également une adresse de données entre 0000 et 270E.

Numéros de Bobines/Registres Adresses de Données Type Nom de la Table
1-9999 0x0000 à 0x270E Lecture/Écriture Bobines de Sortie Discrètes
10001-19999 0x0000 à 0x270E Lecture Seule Contacts d'Entrée Discrèts
30001-39999 0x0000 à 0x270E Lecture Seule Registre d'Entrée Analogique
40001-49999 0x0000 à 0x270E Lecture/Écriture Registre de Maintien de Sortie Analogique