Vous êtes sur la page 1sur 5

Le site du BTS-IRIS de Niort

Cours Modbus/TCP
Soumis par DS
10-03-2006
Dernière mise à jour : 16-10-2006

Depuis l'introduction fulgurante des réseaux ethernet dans l'industrie, le protocole Modbus et notamment sa version
Modbus/TCP sont couramment mis en oeuvre pour réaliser des supervisions de chaînes industrielles pilotées par des
automates programmables.

1 - Introduction

Le protocole MODBUS a été crée en 1979 par Modicon (Télémécanique, Schneider Automation)

Ce document se veut comme une introduction aux 2 documents officiels qui définissent le protocole MODBUS :

- Le protocole MODBUS (pdf)

- Le protocole MODBUS et TCP/IP (pdf)D'ailleurs, toutes les illustrations de ce cours proviennent de ces 2 documents

2 - Le protocole MODBUS

Le protocole MODBUS est couramment utilisé dans l'industrie, notamment pour dialoguer avec des automates
programmables.

2.2 - MODBUS et modèle O.S.I.

Le protocole MODBUS est un protocole de type applicatif situé sur la couche 7 du modèle OSI. En-dessous, il existe
plusieures possibilités pour implémenter le protocole MODBUS :

- via une liaison série (RS-232 ou RS-485) en fonctionnement Maître/Esclave

- via un réseau (TCP/IP/Ethernet) en fonctionnement Client/Serveur

2.2 - Trame MODBUS

Une trame MODBUS (version RS232/RS485) contient les champs suivants :

ADU (Application Data Unit) :


cette partie est fonction des couches de communications utilisées en dessous de la couche MODBUS. Par exemple
http://sandiris.free.fr/web Propulsé par Joomla! Généré: 2 February, 2009, 08:10
Le site du BTS-IRIS de Niort

l'ADU pour une liaison RS-232 sera différente de l'ADU pour une liaison TCP/IP.

PDU (Protocol Data Unit) :


cette partie est indépendante des couches de communications utilisées en dessous de la couche MODBUS. Par
exemple le PDU pour une liaison RS-232 est le même que pour une liaison TCP/IP.

Le PDU est composé de deux champs :

- Function code : il s'agit de codes de fonctions prédéfinis par le protocole MODBUS (voir chapitre 2.3)

- Data : il s'agit des données échangées par le protocole.

2.3 - Les fonctions MODBUS

Le protocole MODBUS repose sur des fonctions prédéfines et associées à un code particulier (sur 1 octet = de 0 à 255).
Le tableau ci-après récapitule les différentes fonctions utilisables que l'on peut classer en 3 familles :

- Data access : ces fonctions permettent d'accéder en lecture et/ou écriture à des bits, mots ou fichiers d'un équipement
MODBUS

- Diagnostics : ces fonctions permettent d'effectuer certains diagnostics sur un équipement MODBUS

- Other : ces fonctions permettent l'encapsulation du protocole MODBUS avec un autre (ex: CANopen)

2.4 - Les exceptions (erreurs)

Le protocole MODBUS définit en plus des fonctions classiques des fonctions et des codes d'exception destinés à la
gestion des erreurs dans une communication.

Communication MODBUS normale :

Communication MODBUS avec erreur :

2.4.1 - Les fonctions d'exception

Les fonction d'exception sont représentées comme les fonctions classiques par un code. Voici la règle à appliquer :
Exception code = Function code + 0x80

2.4.2 - Les codes d'exception

Le tableau ci-dessus récapitule les différents codes d'exception associés aux fonction d'exception :
Code
Nom
01
Illegal function
http://sandiris.free.fr/web Propulsé par Joomla! Généré: 2 February, 2009, 08:10
Le site du BTS-IRIS de Niort

02
Illegal data address
03
Illegal data value
04
Slave device failure
05
Acknowledge
06
Slave device busy
08
Memory parity error
0a
Gateway path unavailable
0b
Gateway target device failed to respond

2.5 - Les données MODBUS

Les données échangées avec le protocole MODBUS, avec un automate par exemple, sont principalement des bits et
des mots (sur 16 bits). Suivant le type d'accès (lecture et/ou écriture) on distingue différents type de données comme
dans le tableau ci-dessous :

Ces données sont différement organisées dans la mémoire d'un equipement MODBUS. Dans tous les cas, un
décodage est effectué pour chaque requête MODBUS :

3 - Le protocole MODBUS et TCP/IP

Après avoir étudié le protocole MODBUS dans sa généralité, nous allons à présent voir comment on peut utiliser ce
protocole au dessus d'un réseau TCP/IP/Ethernet. Dans la suite du document on utilisera la dénomination
MODBUS/TCP pour ce type d'utilisation du protocole.

3.1 - L'encapsulation

Le principe est simple, il s'agit d'encapsuler un message MODBUS dans une trame TCP/IP classique.

3.2 - Modèle client/serveur

http://sandiris.free.fr/web Propulsé par Joomla! Généré: 2 February, 2009, 08:10


Le site du BTS-IRIS de Niort

Le protocole MODBUS/TCP fonctionne en mode client/serveur comme ci-dessous :

Le client MODBUS effectue une requête et attend en retour une réponse du serveur MODBUS. Chaque équipement
MODBUS/TCP qu'il soit client ou serveur sera identifié par 2 informations :

- adresse IP (donc adresse Ethernet via le protocole ARP) = à définir par l'utilisateur

- port TCP = 502 (port réservé pour les applications MODBUS)

3.3 - Trame MODBUS/TCP

Pour rappel, voici la représentation d'une trame MODBUS RS232/RS485 :

Et enfin la représentation d'une trame MODBUS/TCP :

Comme on peut le voir le PDU est identique dans les 2 représentations. Pour ce qui est de l'ADU le premier champ
"Additional address" se traduit par un champ "MBAP Header" et le champ "Error check" disparait car les couches TCP/IP
effectuent déjà un contrôle d'erreur (CRC).

3.4 - En-tête MBAP (ModBus Application Protocol header)

L'en-tête MBAP d'une longueur de 7 octets se décompose comme suit :

Voici la description des différents champs :

- Transaction Identifier : il s'agit en fait du numéro d'un message MODBUS. Chaque message (requête+réponse) est
identifié par un numero différent

- Protocol Identifier : il s'agit du numéro du protocole pour les systèmes multiplexés qui en utilisent plusieurs (MODBUS
= 0)

- Length : il s'agit de la longueur du message à suivre (donc Unit Identifier + Data)

- Unit Identifier : il s'agit de l'identiant d'un équipement généralement utilisé par une passerelle (TCP/IP <-> liaison
série)

3.5 - Codage "Big endian"

Attention, toutes les données doivent être codées en "Big endian".

Rappel, 0x1234 est codée sur 2 octets MSB+LSB comme suit :


http://sandiris.free.fr/web Propulsé par Joomla! Généré: 2 February, 2009, 08:10
Le site du BTS-IRIS de Niort

- 0x12 (MSB) et 0x34 (LSB) en "Big endian" (processeurs Motorola, ...)

- 0x34 (MSB) et 0x12 (LSB) en "Little endian" (processeurs Intel, ...)

4 - Webographie

Quelques liens pour aller plus loin :


- http://www.modbus.org -> Le site officiel pour les réseaux industriels MODBUS (anglophone)

http://sandiris.free.fr/web Propulsé par Joomla! Généré: 2 February, 2009, 08:10

Vous aimerez peut-être aussi