Professional Documents
Culture Documents
CH 2 Modbus
CH 2 Modbus
MODBUS
OBJECTIF
1 INTRODUCTION
Historique :
- 1979 : Création de MODBUS par MODICON (Modular Digital Controller).
- 1994 : Modicon fusionne avec Schneider (Telemecanique / April / Square D).
- 2003 : Transfert de compétences Schneider à MODBUS-IDA.
- 2004 : Pré-Standard international IEC62030.
- 2004 : MODBUS/TCP leader mondial (840000 nœuds).
- 2005 : MODBUS adopté en tant que standard chinois.
Domaines d’utilisation :
− Manufacturier, Infrastructures, Énergie, Bâtiment.
Applications :
− Échanges automate périphérie décentralisée.
− Échanges supervision automate.
Le bus Modbus répond aux architectures Maître/Esclave. Le bus est composé d’une
station Maître et de stations esclaves. Seule la station Maître peut être à l’initiative de
l’échange (la communication directe entre stations Esclaves n’est pas réalisable). Le maître
envoie une demande ou question à un esclave et attend sa réponse (figure 3a) ou diffuse un
message ou question à tous les esclaves présents sur le réseau, Les requêtes de diffusion
générale n’attendent pas de réponses en retour (figure 3b). Deux esclaves ne peuvent
dialoguer ensemble. Chaque demande du maître ou réponse d'esclave est un ensemble
d'octets appelé trame ou message. Le protocole Modbus définit donc la structure des
messages et leur mode d’échange du maître vers l’esclave. Un seul équipement peut émettre
sur la ligne à tout moment. Le maître gère l'échange et seul lui peut prendre l'initiative. Il
interroge chacun des esclaves successivement. Aucun esclave ne peut envoyer de message à
moins qu'il ne soit invité à le faire. Le maître répète la question lorsqu'un échange est incorrect
et déclare l'esclave interrogé absent si aucune réponse n’est reçue dans un délai donné. Si un
esclave ne comprend pas un message, il envoie une réponse d'exception au maître. Le maître
peut réitérer ou non la requête.
✓ Via TCP/IP sur Ethernet : Avec l’arrivé de l’Ethernet TCP/IP, le protocole a été
implémenté sur ce réseau sous le nom MODBUS TCP;
✓ Via Modbus Plus : Modbus Plus est un réseau à passage de jetons à 1 Mb/s,
pouvant transporter les trames Modbus et d'autres services propres à ce
réseau.
Pour relier les différents éléments communicants du Bus(EC1, EC2,…, ECn), la norme RS485
utilise une ligne différentielle ligne A et ligne B en produisant deux signaux complémentaires sur les
deux lignes. Cette technique permet d’immuniser la ligne de transmission contre les parasites ou bruits
industriels et d’augmenter la longueur maximale de la ligne estimée à 1200m.
Le câble de la ligne doit être bouchonné en ses deux extrémités par une résistance de
terminaison Rt(120). Elle boucle la ligne sur son impédance caractéristique et minimise le bruit pour
une meilleure transmission.
Dans cette section on s’intéresse à l’implémentation des couches 1 et 2 du modèle OSI dans le
cas d’une liaison série sur paire différentielle. L’interface RS485 à une paire différentielle (TIA/EIA-485)
est la plus couramment utilisée. L’interface RS232 (TIA/EIA-232-E) peut également être utilisée mais
doit être réservée à de courtes liaisons point à point. Le protocole MODBUS sur une liaison série est
un protocole de type « maître / esclave ».
Les communications Modbus peuvent s’effectuer via les supports physiques suivants :
- RS-232
- RS-485
- RS-422
- Ethernet TCP/IP (Modbus Ethernet)
Le maître peut écrire des données dans les registres d'un périphérique esclave ou lire les
données à partir des registres de celui-ci. Le RS232,RS422 et RS485 sont des supports physiques de
transmission de données en série. Chacune de ces interfaces a des avantages et des inconvénients.
3.1.1 Le RS232
C'est le plus connu des standards de communication série. Les ports série RS232 sont présents
sur la plupart des PCs standards. Il est de type point to point et est composé des lignes Rx,Tx et GND.
Le RS232 permet de faire communiquer uniquement un maitre et un esclave sur chaque ligne.
Il fonctionne en full duplex et sa vitesse de communication peut aller jusqu'à 115 kbits/s.
Figure 2 : Le RS232
3.1.2 Le RS422
Il est full duplex et est utilisé sur les ordinateurs Apple, sa vitesse de transmission peut aller
jusqu'à 10 Mbits/s. Les signaux sont envoyés sur 2 fils afin d'augmenter la fréquence de transmission.
Il peut supporter jusqu'à 10 récepteurs par ligne (on dit alors qu’il est multidrop ou multi-points).
Figure 3 : Le RS422
3.1.3 RS485
Les médias de type RS485 sont souvent en half duplex c’est-à-dire la transmission s’effectue
via 2 fils
Ils permettent de faire communiquer jusqu'à 32 périphériques sur la même ligne de données
et sur une distance pouvant aller jusqu'à 1200 m sans répéteurs.
A noter que l’on peut obtenir du full duplex en utilisant 4 fils de transmission au lieu de 2.Cela
permet d’avoir un débit de transmission plus rapide.
Chaque périphérique esclave peut aussi communiquer avec les 32 autres périphériques. Les
protocoles de communication RS422 et RS485 sont multidrop c'est à dire plusieurs périphériques
peuvent communiquer sur la même ligne de données. Le RS485 a comme avantages d’être immunisé
contre les bruits ou parasites.
Figure 4 : Le RS485
▪ Un seul maître communique à la fois sur le bus et un ou plusieurs esclaves (247 max)
l’écoutent,
▪ Une communication sur le bus est toujours à l’initiative du maître,
▪ Les esclaves (les serveurs) ne transmettent jamais de données sans avoir reçue une
requête du maître (le client),
▪ Les esclaves ne communiquent jamais entre eux,
▪ Le maître n’initie qu’une requête à la fois. Pas de nouvelle requête tant qu’il n’y a pas
de réponses de l’esclave.
Le maître a deux méthodes pour établir la communication et émettre une requête : Le mode
« DIFFUSION » (BROADCAST) :
▪ envoie d’une requête (request) à l’ensemble des esclaves. Une requête en mode
diffusion est forcement en écriture et aucune réponse n’est attendue. L’adresse «
0x00 » est réservée pour ce mode de communication.
▪ Le mode « INDIVIDUEL » (UNICAST) : le maître s’adresse à un seul esclave. Après
traitement de la requête, celui-ci renvoie une réponse (reply) au maître. Un esclave
doit avoir une adresse unique (comprise entre 1 et 247).
Rappel : le protocole d’application définie le PDU constitué du code fonction, suivi des
paramètres utiles à la fonction.
Dans le cadre de communication série, la couche liaison vient rajouter un champ d’adresse
(Address Field) dans lequel le maître place l’adresse de l’esclave et un champ de contrôle et détection
d’erreur.
Lorsque l’esclave répond (cas sans erreur), il replace sa propre adresse dans le champ
d’adresse et :
Le champ CRC permet de détecter les erreurs de transmission. Le contenu du champ CRC (ou
LRC) est le résultat d’un calcul de redondance sur le contenu du message. La méthode de calcul utilisée,
CRC ou LRC, dépend du mode de transmission choisi, dans le même ordre RTU ou ASCII.
Le maître calcul le CRC(ou LRC) de son message et l’ajoute en fin de trame. A la réception,
l’esclave calcule le CRC (ou LRC) sur le message reçu et le compare à celui envoyé par le maître. S’il est
différent, il y a des erreurs dans la transmission des données et l’esclave renvoie une exception avec
le même protocole
➢ Le format ASCII (American Standard Code for Information Interchange) : offre une «
souplesse » plus importante sur les timing inter-octet (jusqu’à 1 seconde) et
constitue une véritable transmission asynchrone.
➢ Le format RTU (Remote Terminal Unit) : permet pour une même vitesse de
transmission, un plus fort débit de données.
Ces 2 formats peuvent être utilisés dans le protocole Modbus, mais sont incompatibles entre
eux. Environ 95% des modules communicants sur Modbus utilisent des trames RTU.
On définie dans ce paragraphe la constitution des messages (nombre de bit) mis sur la liaison
physique. Tous les équipements MODBUS doivent pouvoir implémenter le mode RTU qui doit être le
mode par défaut. L’un ou l’autre des modes doit être configurable par l’utilisateur mais le mode de
transmission doit être le même sur tout les systèmes branchés sur le bus.
La communication Modbus RTU est de type série et se fait via les interfaces série RS232, RS485
ou RS422.Le codage des informations s’effectue en binaire. Le modbus RTU fait partie des protocoles
industriels les plus utilisés.
Si la communication s’effectue via le RS232, il ne peut y avoir dans ce cas qu’un seul maitre et
qu’un seul esclave. Par contre si la communication s’effectue via le RS485 ou le RS422, on peut avoir
plusieurs esclaves.
En modbus RTU on ne peut pas avoir plusieurs maitres. Le mode de fonctionnement multi-
maitre n’est possible qu’avec le modus TCP/IP.
L'avantage du mode RTU est que les données à transmettre prennent moins de place donc
moins de temps pendant les transmissions. En effet, on adresse plus de données en 8 qu'en 7 bits.
Ce mode RTU est à temps contrôlé : les temps entre les caractères et entre les trames doivent
être respectés, sinon le protocole sera refusé. La trame du MODBUS RTU est constituée d'une suite de
caractères hexadécimaux et contient les informations suivantes :
En mode RTU, la transmission d’un octet nécessite l’utilisation de 11 bits selon l’organisation
suivante :
▪ 1 bit de START
▪ 8 bits de données, le LSB est envoyé en premier,
▪ 1 bit de parité, parité paire par défaut (même si on peut configurer d’autre parité voir
aucune),
▪ 1 bit de STOP (2 dans le cas où il n’y a pas de parité).
Chaque octet de la trame est envoyé dans l’ordre (de la gauche vers la droite) et chaque trame
est envoyée suivant la « syntaxe » suivante :
La détection du début et de fin de trame est assurée par un silence d’au moins trois octets et
demi (3,5x11bits) entre 2 trames.
L’ensemble du message doit être transmis de manière continue. Si un silence de plus de 3 fois
le temps de transmission d’un mot intervient au cours de la transmission, le destinataire du message
considérera que la prochaine information sera l’adresse du début d’un nouveau message.
Le code utilisé pour la détection d’erreur est le CRC (Cyclical Redundancy Checking)
▪ Adresse esclave : 04
▪ Code fonction 03 = lecture registre
▪ N° du registre de début de lecture : MSB : 00 et LSB : 02
▪ Nombre de registre de lecture : MSB : 00 et LSB : 01
▪ CRC : 25 CA
▪ Adresse esclave : 04
▪ Code fonction : lecture avec MSB = 1 : 83
▪ Code erreur (n° registre) : 02
▪ CRC : 01 31
▪ Adresse esclave : 04
▪ Code fonction : lecture registre : 03
▪ Nombre d’octets données : 02
▪ Données du registre 0002 : MSB 02 et LSB : 58
▪ CRC : B8 DE
Lorsque les contrôleurs sont configurés pour communiquer sur un réseau Modbus à l'aide
d'ASCII (American Standard Code for Information Interchange), chaque octet de 8 bits dans un message
est envoyé sous la forme de deux caractères ASCII. Le principal avantage de ce mode est qu'il permet
des intervalles de temps allant jusqu'à une seconde entre les caractères sans provoquer d'erreur.
Dans ce mode de transmission, un octet est codé par 2 caractères ASCII et la trame MODBUS
prend alors la forme décrite ci-dessous :
En mode ASCII, la transmission d’un caractère nécessite l’utilisation de 10 bits selon l’organisation
suivante :
▪ 1 bit de START
▪ 7 bits de données, le LSB est envoyé en premier,
▪ bit de parité, parité paire par défaut (même si on peut configurer d’autre parité, voir
aucune),
▪ 1 bit de STOP (2 dans le cas où il n’y a pas de parité).
Chaque caractère de la trame est envoyé dans l’ordre (de la gauche vers la droite) et chaque
trame est envoyée suivant la « syntaxe » suivante :
La détection du début et de fin de trame est assurée par l’émission du caractère « : » (0x3A en
hexa) comme caractère de START et de la chaîne « CR LF » (Carriage Returne 0x0D, Line Feed 0x0A) en
fin de trame.
Le code utilisé pour la détection d’erreur est le LRC (Longitudinal Redundancy Checking),
L’état « Idle » est l’état initial qui fait suite à la mise sous tension. Une requête ne peut être
émise qu’à partir de cet état. Une fois qu’il a émis une requête, le maître ne peut pas envoyer une
autre requête tant qu’il n’est pas revenu dans l’état initial.
En mode diffusion, le maître n’attend aucune réponse des esclaves. Il doit cependant attendre
un certain temps « Turnaround delay » pour permettre aux esclaves de recevoir la donnée et de l’écrire
dans leur registre ou sur leur I/O. Typiquement ce temps est de 100ms à 200ms.
En mode individuel, le maître émet une requête sur le bus et attend une réponse de l’esclave.
Il lance en parallèle un compteur qui lui permet de définir le « Time Out Response », temps maximum
(typiquement de 1s à 2s) au delà duquel le maître interprète une erreur et retente sa requête. Le
nombre de tentative est configurable au niveau du setup du maître.
Quand une réponse est reçue, le maître vérifie les données, lance son traitement puis se remet
dans son état initial
L’État "Idle" = aucune demande en attente. C'est l'état initial après la mise sous tension.
Lorsqu'une demande est reçue, l'esclave vérifie le paquet avant d'effectuer l'action demandée
dans le paquet. Différentes erreurs peuvent se produire : erreur de format dans la requête, action
invalide, … En cas d'erreur, une réponse doit être envoyée au maître.
Une fois l'action requise terminée, un message unicast nécessite qu'une réponse soit formatée
et envoyée au maître.
Si l'esclave détecte une erreur dans la trame reçue, aucune réponse n'est retournée au maître.
Les compteurs de diagnostic MODBUS sont définis et doivent être gérés par n'importe quel
esclave afin de fournir des informations de diagnostic. Ces compteurs peuvent être récupérés grâce à
la fonction Diagnostic MODBUS (voir Annexe A, et le protocole d'application MODBUS spécification.
Le protocole Modbus est généralement utilisé pour transmettre les signaux des appareils
d’instrumentation et de contrôle à un contrôleur logique programmable (PLC) ou à un système de
collecte de données (SCADA), par exemple un système qui mesure la température et l’humidité et
communique les résultats à un ordinateur. Modbus est souvent utilisé pour connecter un ordinateur
de supervision à une unité terminale distante (RTU) dans les systèmes de contrôle de supervision et
d’acquisition de données (SCADA).
Évidemment la communication Modbus TCP est basée sur l’architecture client/serveur. Pour
permettre l’établissement des connexions et l’échange de données entre équipements, le processus
serveur Modbus TCP “écoute“ sur le port TCP 502. Le fonctionnement de base est le suivant :
Le module client Modbus construit une requête sur la base des informations transmises par
l’application et attend en retour une réponse du serveur MODBUS
Un module serveur Modbus est, quant à lui, chargé de recevoir les requêtes et de mettre en
œuvre des actions (de lecture et d’écriture notamment) afin d’y répondre.
Chaque équipement MODBUS/TCP qu'il soit client ou serveur sera identifié par deux
informations :
✓ Adresse IP (donc adresse Ethernet via le protocole ARP) = à définir par l'utilisateur
Le protocole Modbus TCP permet d'encapsuler des trames Modbus PDU dans des trames
Ethernet, et ainsi offrir les services Modbus ce type de réseau :
La couche application fournie le PDU qui se compose du code de la fonction à mettre en œuvre,
suivie des données utiles à la fonction.
C’est au niveau de la construction de l’ADU (Application Data Unit) que les différences
apparaissent. Rappelez-vous, dans le cas de la liaison série, on venait rajouter l’adresse de l’esclave en
début de trame et un contrôle d’erreur en fin de trame.
En mode TCP/IP, on utilise un « en-tête » (header) particulier appelé le MBAP header (MODBUS
Application Protocol header).
Toutes les trames sont envoyées via TCP/IP sur le port 502, port d’écoute par défaut.
Remarque sur l’unit identifier : ce champ est utilisé pour le routage d’un système situé sur un
sous réseau au format MODBUS. Si le serveur est connecté à un sous réseau MODBSU série ou adressé
par l’intermédiaire d’un pont ou d’une passerelle, l’« unit identifier » est nécessaire pour identifier
l’esclave connecté sur le sous réseau. Dans ce cas, l’unit identifier contient l’adresse de l’esclave.
Lorsqu’on adresse un serveur MODBUS possédant une liaison directe TCP IP, l’unit identifier
n’est plus utile, car adressé directement par l’adresse IP. Dans ce cas on place 0xFF dans l’ « unit
identifier »
Exemple :
La requête équivalente à cet exemple Modbus RTU : 11 03 006B 0003 7687
5 Fonction MODBUS
MODBUS offre 19 fonctions différentes. Elles se caractérisent par un code fonction sur un octet
(en hexadécimal). Le protocole Modbus propose un certain nombre de fonctions qui permettent de
lire ou d'écrire des données sur le réseau Modbus.
6 Versions de protocole
Il existe des versions du protocole Modbus pour le port série et pour Ethernet et d'autres
protocoles qui prennent en charge la suite de protocoles Internet . Il existe de nombreuses variantes
de protocoles Modbus:
➢ Modbus RTU (Remote Terminal Unit) : Il est utilisé dans la communication série et
utilise une représentation binaire compacte des données pour la communication par
protocole. Le format RTU suit les commandes/données avec une somme de contrôle
de contrôle de redondance cyclique. Comme mécanisme de contrôle d'erreur pour
garantir la fiabilité des données. Modbus RTU est l'implémentation la plus courante
disponible pour Modbus. Un message Modbus RTU doit être transmis en continu
sans hésitation entre les caractères. Les messages Modbus sont encadrés (séparés)
par des périodes d'inactivité (silencieuses).
➢ Modbus ASCII (American Standard Code for Information Interchange) : Il est utilisé
dans la communication série et utilise des caractères ASCII pour la communication
par protocole. Le format ASCII utilise une somme de contrôle de contrôle de
redondance longitudinale . Les messages Modbus ASCII sont encadrés par deux
points (":") et un saut de ligne (CR / LF).
➢ Modbus TCP / IP ou Modbus TCP : Il s'agit d'une variante Modbus utilisée pour les
communications sur les réseaux TCP / IP , se connectant sur le port 502. Elle ne
nécessite pas de calcul de somme de contrôle (checksum calculation), car les couches
inférieures offrent déjà une protection de somme de contrôle.
➢ Modbus over TCP / IP ou Modbus RTU / IP : Il s'agit d'une variante Modbus qui
diffère de Modbus TCP en ce qu'une somme de contrôle est incluse dans la charge
utile comme avec Modbus RTU.
➢ Modbus sur UDP : L'utilisation de Modbus sur UDP sur les réseaux IP, élimine les
conditions requises pour TCP . [sept]
➢ Modbus Plus (Modbus +, MB + ou MBP) : Modbus Plus est propriétaire de Schneider
Electric et, contrairement aux autres variantes, il prend en charge les
communications peer-to-peer entre plusieurs maîtres. Il nécessite un coprocesseur
dédié pour gérer la rotation rapide des jetons. Il utilise une paire torsadée à 1 Mbit/s.
Un matériel spécial est requis pour connecter Modbus Plus à un ordinateur,
généralement une carte conçue pour le bus ISA (Industry Standard Architecture), PCI
(Peripheral Component Interconnect).
➢ Pemex Modbus : Il s'agit d'une extension du Modbus standard avec prise en charge
des données historiques et de flux. Il a été conçu pour la société pétrolière et gazière
Pemex pour une utilisation dans le contrôle des processus et n'a jamais été
largement adopté.
➢ Enron Modbus : Il s'agit d'une autre extension du Modbus standard développé par
Enron Corporation Les principales différences entre les deux protocoles sont la
numérotation des adresses de registre, la prise en charge des registres 32 bits et 16
bits et la capacité de transmettre des journaux d'événements et des données
historiques.
Le modèle de données et les appels de fonction sont identiques pour les 4 premières variantes
de protocoles ; seule l'encapsulation est différente. Cependant, les variantes ne sont pas
interopérables, pas plus que les formats de trame.
7 Limitations
▪ Étant donné que Modbus a été conçu à la fin des années 1970 pour communiquer avec les
contrôleurs logiques programmables, le nombre de types de données est limité à ceux compris par
les automates programmables à l'époque. Les gros objets binaires ne sont pas pris en charge.
▪ Il n'existe aucun moyen standard pour un nœud de trouver la description d'un objet de données,
par exemple, pour déterminer si une valeur de registre représente une température comprise
entre 30 et 175 degrés.
▪ Étant donné que Modbus est un protocole maître / esclave, il n'y a aucun moyen pour un appareil
de terrain de "signaler une exception" (sauf sur Ethernet TCP / IP, appelé open-mbus) - le nœud
maître doit régulièrement interroger chaque appareil de terrain et rechercher les changements
dans les données. Cela consomme de la bande passante et du temps réseau dans les applications
où la bande passante peut être coûteuse, comme sur une liaison radio à faible débit.
▪ Modbus est limité à l'adressage de 254 appareils sur une seule liaison de données, ce qui limite le
nombre d'appareils de terrain pouvant être connectés à une station maître (encore une fois,
Ethernet TCP / IP est une exception).
▪ Les transmissions Modbus doivent être contiguës, ce qui limite les types d'appareils de
communication à distance à ceux qui peuvent mettre en mémoire tampon les données pour éviter
les lacunes dans la transmission.
▪ Le protocole Modbus lui-même n'offre aucune sécurité contre les commandes non autorisées ou
l'interception de données.