La différence entre Modbus RTU et Modbus TCP tient au réseau qui transporte les mêmes requêtes Modbus. Modbus RTU est conçu pour un bus série : un seul maître interroge à tour de rôle des appareils adressés sur une paire RS-485, et chaque trame se termine par un CRC sur 16 bits. Modbus TCP est conçu pour un réseau IP : un client se connecte à l’adresse IP de l’appareil sur le port 502, et un en-tête MBAP de 7 octets remplace l’adresse série et le CRC. Sur un site existant, le choix suit généralement l’interface dont l’équipement dispose déjà.
Ce guide fait partie de la série Modbus et RS-485.
Modbus TCP ou RTU : les différences
| Modbus RTU | Modbus TCP | |
|---|---|---|
| Transport | Liaison série : RS-485, ou RS-232 pour un seul appareil | TCP/IP sur Ethernet ou Wi-Fi |
| Débit | 19 200 bauds par défaut, 9 600 également obligatoire, autres débits facultatifs | Ethernet à 10 ou 100 Mbit/s ; le traitement dans l’appareil est en général la limite |
| Port | Un port série : bornes RS-485 ou port COM | Port TCP 502, ou 802 pour Modbus Security |
| Adresse de l’appareil | 1 à 247 sur le bus, 0 pour la diffusion | Adresse IP, plus un identifiant d’unité pour les appareils derrière une passerelle |
| Trame | Adresse, code de fonction, données, CRC sur 16 bits | En-tête MBAP (7 octets), code de fonction, données |
| Contrôle d’erreur | CRC dans chaque trame | Sommes de contrôle TCP ; aucun CRC Modbus |
| Séparation des trames | Silence d’au moins 3,5 temps de caractère | Champ de longueur dans l’en-tête |
| Requêtes simultanées | Une seule à la fois sur le bus | Plusieurs connexions ; l’identifiant de transaction associe chaque réponse à sa requête |
| Réglages courants | Débit, parité, bits d’arrêt, adresse | Adresse IP, port 502, identifiant d’unité |
| Câblage | Paire torsadée en chaîne, avec terminaison aux deux extrémités | Réseau du site |
| Liaison entre les deux | Une passerelle sur le bus répond aux clients TCP et transmet chaque requête sous forme de trame RTU | L’identifiant d’unité désigne l’appareil série derrière la passerelle |
Le guide RS-485 et Modbus explique la couche série sous Modbus RTU et sa différence avec RS-232. Les codes de fonction, comme 03 pour lire des registres de maintien, 04 pour lire des registres d’entrée et 06 et 16 pour écrire, sont identiques dans les deux variantes. Les types de données, l’ordre des mots et les facteurs d’échelle le sont aussi. Le guide des tables de registres les détaille.
Fonctionnement du protocole Modbus TCP
Modbus TCP transporte le protocole applicatif Modbus dans des paquets TCP/IP. Un client, par exemple un système SCADA, un BMS ou une passerelle, ouvre une connexion TCP vers un serveur, par exemple un compteur ou un automate, et y envoie ses requêtes. Le serveur répond à chaque requête et n’envoie jamais de données sans y être invité. Les documents plus anciens appellent le client maître et le serveur esclave.
Un serveur écoute sur le port TCP 502, que l’IANA a enregistré pour Modbus. Certains appareils permettent de changer ce port, et certaines passerelles série utilisent un port différent pour chaque ligne série. Un client peut garder une connexion ouverte pour de nombreuses requêtes. Un serveur accepte les connexions de plusieurs clients, dans la limite qui lui est propre.
Tables de données et codes de fonction
Tout appareil Modbus, en TCP comme en RTU, présente ses données dans quatre tables :
| Table | Taille d’un élément | Accès | Lecture | Écriture |
|---|---|---|---|---|
| Bobines (coils) | 1 bit | Lecture et écriture | 01 | 05 (une), 15 (plusieurs) |
| Entrées discrètes | 1 bit | Lecture seule | 02 | Non inscriptible |
| Registres d’entrée | 16 bits | Lecture seule | 04 | Non inscriptible |
| Registres de maintien | 16 bits | Lecture et écriture | 03 | 06 (un), 16 (plusieurs) |
Les compteurs d’énergie publient leurs mesures dans des registres d’entrée ou des registres de maintien. Une valeur sur 32 bits, comme une tension en virgule flottante ou un index d’énergie, occupe deux registres consécutifs, et la table de registres indique leur ordre. La trame porte une adresse comptée à partir de zéro : le registre de maintien qu’un manuel appelle 40108 correspond donc à l’adresse 107 (0x006B). Le convertisseur d’adresses Modbus passe d’une notation à l’autre.
Comparaison des trames
Une requête de lecture de trois registres de maintien à partir de l’adresse 0x006B, sur l’appareil 17, se présente ainsi :
| Variante | Octets (hexadécimal) |
|---|---|
| Modbus RTU | 11 03 00 6B 00 03, puis le CRC sur 2 octets |
| Modbus TCP | 00 01 00 00 00 06 11 03 00 6B 00 03 |
Dans la trame TCP, les sept premiers octets forment l’en-tête MBAP : identifiant de transaction (0x0001), identifiant de protocole (toujours 0 pour Modbus), longueur de la suite (6 octets) et identifiant d’unité (0x11). L’unité de données de protocole qui suit est identique. Le calculateur de CRC et LRC Modbus produit les octets de contrôle RTU :
La réponse du serveur reprend l’en-tête MBAP avec sa propre longueur, suivie du code de fonction, d’un nombre d’octets et des valeurs des registres. Si les trois registres contiennent 555, 0 et 100, la réponse Modbus TCP est :
00 01 00 00 00 09 11 03 06 02 2B 00 00 00 64
La longueur vaut désormais 9 octets : l’identifiant d’unité, le code de fonction, le nombre d’octets et 6 octets de données. Lorsqu’un appareil ne peut pas exécuter une requête, il renvoie une exception : le code de fonction avec son bit de poids fort à 1 (0x83 pour la fonction 03), puis un code d’exception. Le code 02, adresse de données illégale, signale généralement une adresse erronée ou une lecture qui dépasse la fin d’un bloc :
00 01 00 00 00 03 11 83 02
La référence des codes de fonction et d’exception Modbus explique chaque code.
Une même mesure en RTU et en TCP
Eastron propose son compteur triphasé SDM630 en RS-485, le SDM630-Modbus, et en Ethernet, le SDM630-TCP. Les deux documents de protocole placent la tension phase 1-neutre à la référence de registre d’entrée 30001, adresse de protocole 0, sous forme de flottant sur 32 bits occupant deux registres, lu avec la fonction 04. L’unité de données de protocole est 04 00 00 00 02 dans les deux cas :
| Compteur | Requête de la tension de la phase 1 (hexadécimal) |
|---|---|
| SDM630-Modbus à l’adresse de bus 1 | 01 04 00 00 00 02 71 CB |
| SDM630-TCP avec l’identifiant d’unité 1 | 00 01 00 00 00 06 01 04 00 00 00 02 |
Une réponse dont les données valent 43 66 00 00 correspond à 230,0 V lorsque le mot de poids fort vient en premier ; le décodeur de registres Modbus montre les autres ordres des mots. Eastron publie une table de registres distincte pour chaque modèle : vérifiez chaque point dans la table du modèle installé au lieu de supposer que la table série s’applique.
Temporisation et débit utile
Sur un bus RTU, une seule requête est en cours à la fois. Sa durée comprend la transmission de la requête et de la réponse, le temps de réponse de l’appareil et l’intervalle entre trames. À 9 600 bauds avec parité paire, chaque caractère occupe 11 bits ; un octet prend donc environ 1,15 ms. Le guide Modbus série fixe l’intervalle entre trames à 1,75 ms au-dessus de 19 200 bauds. Le calculateur de temporisation Modbus RTU additionne ces durées pour tout un bus :
Le guide d’interrogation et de nouvelles tentatives montre l’effet d’un seul appareil hors ligne sur ce cycle. En Modbus TCP, le réseau est rarement le facteur limitant ; ce sont généralement le temps de traitement de l’appareil et son nombre maximal de connexions simultanées. De nombreux compteurs n’acceptent que quelques connexions TCP, parfois une seule. Vérifiez cette limite avant que plusieurs systèmes interrogent le même compteur.
Tester une connexion Modbus TCP
Vérifiez la connexion couche par couche, afin que chaque échec désigne une seule cause :
- Relevez l’adresse IP, le masque de sous-réseau et la passerelle par défaut de l’appareil sur son afficheur ou dans son outil de configuration. Vérifiez que le client se trouve sur le même sous-réseau, ou qu’un routeur et le pare-feu autorisent le trafic.
- Depuis un ordinateur de ce réseau, vérifiez que le port TCP 502 accepte une connexion. Sous macOS ou Linux,
nc -vz 192.0.2.10 502indique si le port est ouvert (utilisez l’adresse de l’appareil). - Avec un client Modbus, lisez un registre dont la valeur est visible sur l’afficheur de l’appareil, par exemple une tension de phase. Utilisez l’identifiant d’unité indiqué dans le manuel.
- Comparez la valeur, son facteur d’échelle et son unité avec l’afficheur. Ajoutez ensuite le reste de la table de registres.
- Si le port s’ouvre mais que chaque lecture expire, vérifiez l’identifiant d’unité, et vérifiez si un autre client occupe la seule connexion que l’appareil accepte.
De Modbus RTU à TCP : passerelles et identifiants d’unité
Une passerelle série vers Ethernet permet aux clients Modbus TCP de joindre des appareils RTU. Le client envoie une requête TCP à l’adresse IP de la passerelle, en plaçant l’adresse série de l’appareil dans l’identifiant d’unité. La passerelle envoie la requête sur le bus, attend la réponse et la renvoie par TCP.
Trois points exigent de l’attention :
- Identifiant d’unité pour un appareil TCP direct. Le guide Modbus TCP indique que ce champ n’est pas utilisé lorsque le serveur est adressé par son IP et recommande 0xFF. Beaucoup d’appareils l’ignorent ; certains exigent 1 ou leur propre adresse série. Suivez la documentation de l’appareil.
- Délais d’expiration. Le délai TCP du client doit dépasser celui de la liaison série de la passerelle, augmenté de l’attente des autres requêtes sur le bus. Sinon, le client abandonne alors que la passerelle attend encore.
- RTU sur TCP. Certains convertisseurs transmettent les trames RTU, avec leur CRC et sans en-tête MBAP, telles quelles sur une connexion TCP. Ce n’est pas du Modbus TCP et le client doit être configuré dans le bon mode. Le guide des passerelles de protocole distingue un pont d’une passerelle de traduction, et le guide des passerelles Modbus et BACnet aide à en choisir une.
Pour chaque point, consignez l’adresse IP, le port, l’identifiant d’unité et l’appareil physique qui répond. Après le remplacement d’une passerelle, vérifiez d’abord ce routage.
Modbus TCP ou RTU : choisir pour un site
Choisissez le transport déjà présent sur l’équipement :
| Situation | Choix habituel |
|---|---|
| Compteurs avec bornes RS-485 uniquement, dans un ou deux tableaux | Modbus RTU sur un bus court, ou interface locale |
| Équipement avec port Ethernet sur un réseau géré | Modbus TCP, avec un plan d’adressage validé par l’équipe informatique du site |
| Bus RTU existant déjà interrogé par un BMS | Lire les données depuis le BMS ou une passerelle ; n’ajoutez pas un second maître |
| Nombreux appareils série à lire par plusieurs systèmes | Passerelle Modbus TCP devant le bus |
| Compteurs série éloignés du Gateway sans chemin de câble | Interface Modbus sans fil près des compteurs |
Pour les deux variantes, obtenez la table de registres du modèle et du micrologiciel exacts avant de choisir le matériel. La mention « Modbus pris en charge » ne précise pas les valeurs publiées par l’appareil.
Sécurité
Modbus TCP et Modbus RTU ne comportent ni authentification ni chiffrement. Tout client pouvant joindre le port 502 peut lire et, si l’appareil l’autorise, écrire. Protégez-les par la conception du réseau : réseau ou VLAN séparé pour les équipements de commande, règles de pare-feu limitant l’accès aux systèmes qui en ont besoin et aucune exposition à Internet.
La Modbus Organization publie un protocole Modbus Security distinct, qui encapsule Modbus dans TLS avec des certificats X.509 sur le port 802. Les deux extrémités doivent le prendre en charge. Une passerelle devant un appareil Modbus non protégé ne sécurise pas cet appareil ; elle déplace seulement la frontière de sécurité.
Vérifiez les lectures avant toute écriture. Traitez les écritures comme une étape distincte approuvée par le responsable de l’équipement.
Modbus TCP et RTU avec Edge
Edge sur le Gateway ZGW-20 est un client Modbus pour les deux variantes. Il interroge les appareils Modbus TCP du réseau du site, y compris les convertisseurs RTU sur TCP, ainsi que les appareils Modbus RTU raccordés à un port série : l’entrée RS-485 de la carte d’E/S sur la version industrielle, ou un adaptateur série USB. Chaque connexion possède sa propre file d’attente, ses délais d’expiration et sa fréquence d’interrogation. Pour un compteur qu’aucun câble de données ne peut relier au Gateway, une interface Modbus ZMB le lit sur RS-485 et transmet ses registres par le réseau maillé Zigbee. Edge comprend également un serveur Modbus ; un BMS ou un système SCADA peut ainsi lire les données du site sur le Gateway sous forme de registres Modbus TCP sur le port 10502. Le guide des passerelles Modbus et BACnet compare cette solution à un convertisseur de protocole dédié. Pour essayer d’abord Edge avec un seul compteur, un Raspberry Pi configuré avec System Manager l’exécute avec un appareil Modbus de 32 registres au plus sous licence gratuite ; voir évaluer Edge sur un Raspberry Pi. Le guide de mise en service Modbus RS-485 détaille la partie série.
Questions fréquentes
Quelle différence entre Modbus TCP et Modbus RTU ?
Modbus RTU utilise une liaison série telle que RS-485 : trames binaires, CRC de contrôle d’erreur et un maître qui interroge les appareils par adresse. Modbus TCP utilise un réseau IP : mêmes requêtes dans un en-tête MBAP de 7 octets, envoyées par TCP au port 502, avec contrôle d’erreur assuré par TCP. Les codes de fonction et les tables de registres sont identiques.
Faut-il utiliser Modbus TCP ou Modbus RTU ?
Utilisez l’interface dont l’équipement dispose déjà. Modbus TCP convient aux appareils dotés d’un port Ethernet sur un réseau administré, et permet à plusieurs systèmes de lire un même appareil dans la limite de ses connexions. Modbus RTU convient aux compteurs à bornes RS-485 dans un ou deux tableaux, sur un bus court avec un seul maître. Si des appareils série doivent rejoindre un réseau IP, placez une passerelle devant le bus.
Quel port utilise Modbus TCP ?
Le port TCP 502. Le protocole Modbus Security, qui encapsule Modbus dans TLS, utilise le port 802.
Quel port utilise Modbus RTU ?
Aucun au sens réseau. Modbus RTU fonctionne sur un port série : les bornes RS-485 de l’appareil, ou un port COM ou un adaptateur série USB sur un ordinateur. Le port 502 est celui de Modbus TCP. Une passerelle série-Ethernet peut attribuer un port TCP distinct à chacune de ses lignes série.
Qu’est-ce que l’identifiant d’unité en Modbus TCP ?
Un champ d’un octet de l’en-tête MBAP. Une passerelle l’utilise pour acheminer une requête vers l’appareil série situé derrière elle : il porte donc l’adresse de cet appareil. Pour un appareil Modbus TCP direct, le guide recommande 0xFF, mais beaucoup d’appareils attendent 1 ou acceptent toute valeur.
Qu’est-ce que Modbus RTU sur TCP ?
Une trame RTU, avec son adresse et son CRC, envoyée telle quelle sur une connexion TCP, sans en-tête MBAP. Certains convertisseurs série vers Ethernet fonctionnent ainsi. Ce n’est pas du Modbus TCP ; le client doit être configuré dans le bon mode pour chaque appareil.
Modbus TCP et Modbus TCP/IP sont-ils la même chose ?
Oui. Les deux noms désignent des requêtes Modbus transportées dans des paquets TCP sur un réseau IP, chaque requête étant précédée de l’en-tête MBAP de 7 octets. Modbus RTU sur TCP est différent : il envoie des trames RTU, avec leur CRC et sans en-tête MBAP, sur une connexion TCP.
Comment tester une connexion Modbus TCP ?
Vérifiez que l’adresse IP de l’appareil se trouve sur un réseau que le client peut joindre et que le port TCP 502 accepte une connexion. Lisez ensuite un registre dont la valeur est visible sur l’afficheur de l’appareil, avec l’identifiant d’unité indiqué dans le manuel, et comparez la valeur, le facteur d’échelle et l’unité avec l’afficheur avant de lire le reste de la table.