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 |