École Nationale d’ingénieurs de Université de Monastir
Monastir
TP4 – Le protocole Modbus
Matière : Réseaux Locaux Industriels (RLI)
Enseignant : Dr. Marwen Amiri
Niveau : 2 ème année du cycle Ingénieur en Génie Électrique
Groupes : Elect 2 - G1, Elect 2 – G2
Objectifs pédagogiques :
1) Comprendre le protocole Modbus TCP
Identifier la structure des trames Modbus TCP.
Différencier les rôles du client et du serveur dans une communication Modbus TCP.
2) Maîtriser l'utilisation de Wireshark pour l'analyse du trafic Modbus
Ouvrir et analyser un fichier de capture de paquets.
Appliquer des filtres pour isoler les trames Modbus TCP.
Identifier les différentes couches du modèle OSI impliquées dans Modbus TCP.
3) Analyser une communication Modbus TCP
Déterminer le nombre de trames échangées et la durée de la capture.
Identifier les adresses IP et MAC des équipements impliqués.
Reconnaître les ports utilisés par le protocole Modbus TCP.
1
4) Détecter et interpréter les erreurs de communication
Identifier les éventuelles réponses d’exception envoyées par le serveur.
Détecter la présence de codes fonction inconnus dans les requêtes.
5) Représenter graphiquement les échanges de trames Modbus TCP
Construire un chronogramme illustrant les échanges de trames.
Expliquer l'encapsulation des données Modbus TCP dans les couches inférieures.
6) Comprendre l’interopérabilité entre Modbus TCP et Modbus RTU
Convertir une trame Modbus TCP en Modbus RTU pour une passerelle.
Analyser les différences entre ces deux modes de communication.
Modbus est avant tout un protocole d'application, c'est-à-dire un ensemble de règles régissant
l'échange et le dialogue entre différents équipements. Bien qu'il ne soit pas un réseau en soi, un
système de communication utilisant le protocole Modbus est souvent désigné par abus de langage
comme un « réseau Modbus ».
Plusieurs implémentations de Modbus existent :
Modbus RTU (Remote Terminal Unit) : Utilise une liaison série, généralement via des
interfaces RS-485 ou RS-232, et transmet les données au format binaire. Modbus RTU est
robuste et fiable, souvent utilisé dans des environnements industriels exigeants.
Modbus ASCII : Bien que mentionné, il est important de noter que Modbus ASCII est une
variante moins courante qui utilise une transmission série avec des données encodées en
ASCII. Elle est moins utilisée que Modbus RTU.
Modbus Plus : Un protocole plus ancien, développé par Modicon, qui a été conçu pour
améliorer la vitesse et la fiabilité par rapport à Modbus RTU. Cependant, il est moins courant
aujourd'hui.
Modbus TCP/IP : Utilise les réseaux Ethernet et le protocole TCP/IP pour transmettre des
données. Il est adapté aux réseaux locaux ou étendus et permet une communication rapide et
fiable via Internet.
2
Client : sollicite un service auprès du serveur.
Serveur : est à l’écoute des clients et ne répond qu’à leurs requêtes.
Temps : le temps de réponse est indéterminé et dépend de l’architecture du réseau.
3
Exemple d’équipements de communication (Voir TD 4 Le réseau Modbus)
1. Client : Automate Programmable Industriel (API / PLC)
Exemple d’équipement : Siemens S7-1200 ou Schneider M241
Rôle : L'API agit comme un client Modbus TCP/IP en envoyant des requêtes de
lecture/écriture à un serveur (ex. : capteur, variateur).
2. Serveur : Un variateur de vitesse Modbus TCP
Exemple d’équipement : Altivar 320 de Schneider Electric
Rôle : Le variateur est un serveur Modbus TCP/IP qui répond aux requêtes du client pour
modifier la vitesse ou récupérer l’état du moteur.
Dans un environnement industriel, d’autres équipements peuvent jouer ces rôles :
Un PC avec un logiciel SCADA (client) interrogeant un automate PLC (serveur).
Un Raspberry Pi (client) communiquant avec un module d’entrées/sorties WAGO
(serveur).
Rôle d’un automate ?
un automate (ou tout autre appareil compatible Modbus TCP) peut effectivement jouer à la fois le
rôle de serveur et de client dans un réseau Modbus TCP, selon le scénario de communication. Cela
dépend des besoins du système et des capacités de l'automate. Voici quelques explications sur
comment cela fonctionne :
1. Rôle de serveur Modbus TCP
Serveur Modbus TCP (ou esclave) : L'automate attend des requêtes provenant d'un ou
plusieurs clients Modbus et y répond. Il est généralement configuré pour écouter sur un port
spécifique (généralement le port 502) et fournir des informations ou exécuter des commandes
en réponse à des demandes.
Exemple d'utilisation : Un automate peut être configuré comme un serveur Modbus pour
fournir des informations sur des capteurs ou effectuer des actions comme la régulation d'une
température dans un processus industriel.
2. Rôle de client Modbus TCP
Client Modbus TCP (ou maître) : L'automate peut également envoyer des requêtes à d'autres
serveurs Modbus (souvent d'autres automates ou équipements) pour récupérer des données ou
commander des actions. Il fonctionne alors comme un client qui initie les communications.
4
Exemple d'utilisation : Un automate peut interroger un autre serveur Modbus pour obtenir
des informations sur l'état d'autres équipements ou contrôler des appareils externes.
Le stack Modbus-TCP sur Ethernet :
C'est une couche application Modbus sur un réseau Ethernet TCP/IP, utilisée pour communiquer dans
une architecture d'automatisme industriel, proposée par Schneider Electric (Mars 1999). Elle permet
notamment l'intégration de blocs d'entrée/sortie déportés, d'API, etc., sur Ethernet.
La trame bien connue du protocole Modbus est partiellement réutilisée et complétée par un en-tête
spécifique. Le CRC16 de Modbus est supprimé, car le protocole TCP/IP intègre un CRC32, ainsi
que les couches IP et Ethernet, qui assurent également une protection contre les erreurs.
Explication CRC16 :
Le CRC16 de Modbus est supprimé dans Modbus TCP/IP car le protocole TCP/IP assure déjà
l’intégrité des données grâce à plusieurs mécanismes de contrôle d'erreur intégrés aux différentes
couches du modèle OSI :
1. Contrôle d’intégrité au niveau de la couche Transport (TCP)
TCP utilise un checksum dans son en-tête pour vérifier l’intégrité des segments de données.
2. Contrôle d’intégrité au niveau de la couche Réseau (IP)
L’en-tête IPv4 comporte un checksum pour s'assurer que les données IP n'ont pas été
corrompues. (Note : IPv6 ne contient pas de checksum, mais il s’appuie sur les couches
inférieures).
5
3. Contrôle d’intégrité au niveau de la couche Liaison de données (Ethernet)
Ethernet utilise un CRC32 (Frame Check Sequence - FCS) pour détecter les erreurs de
transmission.
Pourquoi supprimer le CRC16 dans Modbus TCP/IP ?
Dans Modbus RTU (liaison série), le CRC16 est essentiel car il garantit l’intégrité des données sur
des lignes série sujettes aux perturbations électromagnétiques.
Dans Modbus TCP, ce contrôle devient redondant, car plusieurs mécanismes de validation sont déjà
présents dans les couches réseau et transport. Cela permet de réduire la charge utile des messages et
d’améliorer les performances de communication
Format de l’APDU de Modbus-TCP :
Scénario d’échange Modbus-TCP (Port 502) :
Une application serveur Modbus TCP est en écoute sur le port 502.
Une application cliente établie une connexion sur un port local >1024 avec le serveur identifié par sa
socket (@IP, 502)
6
Principe de communication client -serveur :
L'explication suivante détaille comment fonctionne la communication entre un serveur Modbus
TCP et un client Modbus TCP, ainsi que la manière dont les ports sont utilisés pour cette
communication :
1. Serveur Modbus TCP en écoute sur le port 502
Port 502 : Le port 502 est le port standard utilisé par le protocole Modbus TCP pour les
communications réseau. C'est un port bien connu et réservé spécifiquement pour ce protocole.
Serveur Modbus TCP : Lorsqu'une application serveur Modbus TCP est en cours d'exécution,
elle écoute les connexions entrantes sur le port 502. Cela signifie qu'elle est prête à accepter
des connexions de clients qui veulent interroger ou envoyer des commandes à l'automate ou à
l'équipement. Le serveur attend donc que les clients se connectent et envoient des requêtes.
Exemple de rôle serveur : Un automate configuré comme serveur Modbus TCP écoute sur ce
port (502) et attend que d'autres équipements ou systèmes (clients Modbus) lui envoient des
requêtes. Ces requêtes peuvent concerner des actions telles que la lecture ou l'écriture de
données (par exemple, la lecture des registres de l'automate).
2. Client Modbus TCP se connectant à un serveur via une socket
Un client Modbus TCP établit une connexion au serveur Modbus TCP en utilisant une socket. Voici
les éléments clés de cette connexion :
Port local > 1024 : Le client utilise généralement un port local supérieur à 1024 pour
établir la connexion. Les ports dans la plage 1024-65535 sont appelés ports dynamiques ou
ports éphémères. Ces ports sont alloués dynamiquement par le système d'exploitation
7
chaque fois qu'une application en a besoin. Cela permet au client d'ouvrir une connexion
temporaire pour la durée de la communication avec le serveur Modbus.
o Par exemple, un client pourrait utiliser le port 3000 pour sa connexion locale, ce qui
signifie que la communication du client se fait via le port 3000, mais cette connexion
est établie sur le port 502 du serveur Modbus.
Adresse IP du serveur et port 502 : Le client doit spécifier l'adresse IP du serveur et le port
502 dans sa connexion. Le serveur Modbus TCP étant en écoute sur le port 502, le client
utilise l'adresse IP du serveur pour établir la connexion. Le client envoie alors des requêtes
via le port 502 du serveur.
o Socket : La socket est un point de terminaison pour la communication sur le réseau.
Elle est utilisée pour envoyer et recevoir des données entre les clients et les serveurs.
Lorsqu'un client se connecte à un serveur, une socket serveur est créée côté serveur et
une socket cliente est créée côté client.
o Exemple : Un client avec l'adresse IP 192.168.1.2 et un port dynamique 3000 se
connecte à un serveur avec l'adresse IP 192.168.1.1 et le port 502. La communication
entre les deux s'établit via leur socket respective.
3. Processus complet de connexion
1. Serveur :
L'application serveur Modbus TCP est lancée.
Elle ouvre une socket serveur et commence à écouter sur le port 502.
Elle attend qu'un client se connecte pour échanger des données.
2. Client :
Le client Modbus TCP crée une socket cliente et choisit un port local > 1024 (par exemple,
le port 3000).
Il envoie une requête de connexion vers le serveur à l'adresse IP du serveur et sur le port 502.
Une fois la connexion établie, le client peut envoyer des requêtes Modbus (comme des
lectures ou écritures de registres) via la socket.
8
Explication :
Abréviation :
fd = File Descriptor (descripteur de fichier)
socket() = Création d'un socket réseau
La fonction socket() crée un point de communication (socket).
Elle retourne un descripteur de fichier (fd), qui est un entier représentant la connexion réseau.
La fonction bind () en programmation réseau est utilisée pour associer un socket à une adresse
IP et un numéro de port spécifiques.
Définition d’un socket : Un socket est un point d’extrémité utilisé pour la communication entre
deux machines sur un réseau. Il permet l’échange de données entre un client et un serveur via un
protocole réseau comme TCP/IP ou UDP.
9
Comment fonctionne un socket ?
Un socket fonctionne comme un canal de communication entre deux processus (applications) situés
sur la même machine ou sur des machines différentes.
Un socket est défini par :
Une adresse IP (ex: 192.168.1.10)
Un port (ex: 502 pour Modbus TCP)
Un protocole (TCP ou UDP)
10
Travail demandé :
Dans ce TP, nous examinerons une capture de paquets de communication Modbus TCP.
1) Lancez Wireshark et ouvrez le fichier « capture001modbus.pcap ».
2) Indiquez le nombre de trames échangées dans cette capture.
3) Indiquez la durée de cette capture.
4) Indiquez les protocoles qui ont envoyé des trames dans cette capture. Pour chaque protocole,
précisez à quelle couche il appartient.
5) Combien d’équipements interviennent dans cette communication ?
6) Quel mode de communication est utilisé pour le réseau MODBUS ?
7) Indiquez l’adresse IP et l’adresse physique du serveur ou des serveurs Modbus TCP. Quel port a
utilisé l’application du serveur Modbus TCP ?
8) Indiquez l’adresse ou les adresses IP et l’adresse physique ou les adresses physiques du client ou
des clients Modbus. Indiquez leurs IDs.
9) Repérez un APDU Modbus-TCP. Indiquez sa taille, les valeurs de ses différents champs et leurs
significations.
10) Dans un graphique, représentez l’encapsulation du protocole Modbus-TCP.
11) Dans une trame Modbus-TCP, le CRC16 Modbus est-il présent ? Pourquoi ?
12) Pour chacun des cas suivants, donnez un exemple d’une trame de requête présente dans cette
capture, si elle existe.
Nature de Numéro de la Type de Code Nombre des Adresse de
la trame trame donnée fonction données à lire donné à lire
ou à écrire ou à écrire
Lecture des
bits
Lecture des
registres
Ecriture des
registres
Lecture des
registres
13) Pour chacun des cas suivant donner un exemple d’une trame de réponse présente dans cette
capture si elle existe
Trame de réponse à une : Numéro de la Code fonction Les données de
trame réponses
11
Requête de lecture des bits
Requête d’écreture des bits
Requête de lecture des
registres
Requête d’écreture des
registres
14) Y a-t-il des requêtes envoyées par le serveur qui ont engendré une exception ? si oui lesquelles ?
pour chacune quel était la source de l’exception.
15) Y a-t-il des trames de requêtes qui ont inclus des codes fonctions inconnues? si oui indiquer les
numéros de ces trames et leurs codes fonctions.
16) Représenter le Scénario d’échange MODBUS-TCP des trames de 1 à 15 par un chronogramme.
17) On suppose que la trame de requête numéro 108 est transmise à une passerelle Modbud-
TCP/Modbus-RTU. Donner en binaire le PDU de la trame retransmise par la passerelle et qui
circulera sur le médium physique du réseau Modbus RTU.
12