Vous êtes sur la page 1sur 45

Le protocole

MODBUS

BTS SNIR 1
Introduction

 C’est un protocole de communication utilisé pour


des réseaux d'automates programmables

 Créer par Modicon (Schneider Electric)

 Apparue en 1979

 Est un standard de fait

BTS SNIR 2
Exemple d’architecture
MODBUS

3
Exemple d’architecture
MODBUS Supervision / SCADA

BTS SNIR 4
MODBUS et modèle O.S.I.
 Le protocole MODBUS est un protocole de type applicatif (couche 7)
 En-dessous, il existe plusieurs possibilités pour implémenter le protocole
MODBUS

– Liaison série (RS-232 ou RS-485) en fonctionnement Maître/Esclave


– Réseau (TCP/IP/Ethernet) en fonctionnement Client/Serveur
 Modbus TCP/IP 5
Communication

Requête
Client Serveur
Maître Réponse Esclave

• Le maitre initie la communication.


• Le maitre s’adresse individuellement aux esclaves (monocast)
ou à tous les esclaves en diffusion (broadcast).
• L’esclave répond à la requête du maitre sauf en diffusion.
• Normalement un seul maitre et plusieurs esclaves.
• Esclave : API, capteurs, actionneurs
• Maitre : scada, HMI (écran tactile)
• En modbus, c’est toujours le serveur qui est esclave
BTS SNIR et le client qui est maître 6
La trame MODBUS
 Le protocole MODBUS définit uniquement le PDU (Protocol Data
Unit) (indépendant du type de liaison)
 La partie ADU (Application Data Unit) est fonction des couches de
communications utilisées en dessous de la couche MODBUS

Différent suivant le type de liaison : RS-232, TCP/IP…

 Taille du PDU = 253 bytes


Historiquement due à la première implémentation sur une liaison RS485 dont l’ADU est de 256 bytes.

 RS232/RS485 ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 bytes
 TCP/IP ADU = 253 bytes + MBAP (7 bytes) = 260 bytes

7
Les données MODBUS
 Les quatre types de données échangées :

BTS SNIR 8
Type de données et organisation
mémoire de l’équipement

The example below shows data organization in In this example, the device has only 1 data
a device having digital and analog, inputs and block. The same data can be reached via
outputs. Each block is separate because data several MODBUS functions, either via a 16 bit
from different blocks have no correlation. Each access or via an access bit.
block is thus accessible with different 9
MODBUS functions.
Codes fonction du MODBUS
Fonctions prédéfinies associées à un code sur 1 octet

10
Codes fonction du MODBUS
 Le code 0 est invalide

 Les code entre 128 et 255 sont réservés et sont utilisés pour les réponses
aux exceptions.

 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)

Exemple (adressage spécifique à un type d’appareil) :

Adresse physique Adresse Register Size Code Read Code Write


des registres ModBus
00001 – 10000 0 – 9999 1 bit coils 1 5 (15)
10001 – 30000 0 – 9999 1 bit inputs 2
30001 – 40000 0 – 9999 16 bit input regs 4
40001 + 0+ 16 bit holding regs 3 6 (16)
Communication
Arbitrage :

 C’est le Client/Maitre qui initie le dialogue


 Le Server/Esclave répond à la requête

BTS SNIR 12
Communication MODBUS avec erreur

Code Nom
01 Illegal function
02 Illegal data address

Les fonction d'exception sont représentées 03 Illegal data value


comme les fonctions classiques par un code. 04 Slave device failure
05 Acknowledge
Règle à appliquer : 06 Slave device busy
Exception code = Function code + 0x80 08 Memory parity error
(équivalent : mettre le bit de poids fort à 1) 0a Gateway path unavailable
Gateway target device failed to
0b
respond
Communication MODBUS avec erreur
Exception Code Description
0x01 Illegal Function
0x02 Illegal Data Address
0x03 Illegal Data Value
0x04 Slave device failure
0x05 Acknowledge
Slave Device Busy (Gateway reports)
Too many requests are sent/queued in the same time.
0x06 Slave device busy
Suggestions: Configure the client software with a larger (slower) scan-
time/timeout setting.
0x07 Negative Acknowledge
0x08 Memory Parity Error
0x0A Gateway Path Unavailable
Slave Device Timeout (Gateway reports)
No response from slave device.
Gateway target device failed to respond
0x0B Suggestions: Try larger Slave Timeout setting.
Check serial port signal (resistor), wiring, NetID and baud rate/data format
configurations.
Exemple : 03 (0x03) Read Holding Registers

The register data in the response message are packed as two bytes per register. For each
register, the first byte contains the high order bits and the second contains the low order bits.
Exemple : lecture des registres 108 à 110 contenant respectivement 22B, 0 et 64

15
Exemple : 06 (0x06) Write Single Register

Exemple : écriture de la valeur 3 dans le registre 2

16
MODBUS ligne série
Maitre / Esclave
RS232/RS485

BTS SNIR 17
MODBUS ligne série

 Le maitre est le client


BTS SNIR
 Les esclaves sont des serveurs 18
Trame MODBUS ligne série

ADU

 Le champ d’adresse ne contient que l’adresse de


l’esclave. Entre 1 et FF.

19
Types de réseaux de
communications

Liaison simple Liaison multipoints

- 254 adresses d'esclaves possibles.


- Selon les configurations (rs485) il
peut n'y avoir que 32 stations et 31
BTS SNIR esclaves possibles. 20
Caractérisation des échanges
Les demandes du maître sont adressées soit :
 A un esclave donné : Monocast

 A tous les esclaves : Broadcast (diffusion)

Adresse esclave = 0

BTS SNIR 21
Diagramme d'occupation du support de transmission

BTS SNIR 22
BTS SNIR 23
Contrôle des messages reçus
par l'esclave
 Lorsque l'esclave reçoit le message de demande,
il le range en mémoire, calcule le CRC et le
compare au CRC 16 reçu :

– Si le message reçu est incorrect (inégalité des CRC


16), l'esclave ne répond pas.

– Si le message reçu est correct mais que l'esclave ne


peut le traiter (adresse erronée, donnée incorrecte...),
il renvoie une réponse d'exception.

BTS SNIR 24
CRC
 Important : dans le CRC 16, l’octet de poids faible (pf) est
transmis en premier.
Transmission en "Little endian"

Tous le reste de la trame est en "Big endian"

BTS SNIR 25
Attention nombre d’octets et pas de bits !

BTS SNIR 26
BTS SNIR 27
Modes de transmission série
 MODBUS utilise deux modes de transmission série au choix :

 Mode ASCII

 Mode RTU

 Toutes les données doivent être codées en "Big endian".

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

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

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

BTS SNIR 28
Mode ASCII
(American Standard Code for Information Interchange)

 Chaque octet du message est transcrit avec deux caractères ASCII


 Le format ASCII offre une "souplesse" plus importante sur les timing inter-octet
(jusqu'à 1 seconde) et constitue une véritable transmission asynchrone.
 Codage sur 10 bits :

LRC :
Longitudinal
Redundancy
Checking
Mode RTU
(Remote Terminal Unit)
 Chaque octet de donnée est transmis sans codage : 4 bits pour
chaque chiffre hexadécimal
 Le format RTU permet pour une même vitesse de transmission un plus fort
débit de données
 Environ 95% des modules communicants sur MODBUS utilisent des
trames "RTU« . C’est le mode par défaut
 Codage sur 11 bits :
Mode RTU
(Remote Terminal Unit)

BTS SNIR 31
Etats de la transmission RTU

BTS SNIR 32
JBUS

Jbus est un réseau local industriel (bus de


terrain) variante de Modbus initié par April
(gamme d'automate des sociétés Renault et Merlin Gerin).

Le protocole Jbus utilise une partie du


protocole Modbus.

BTS SNIR 33
BTS SNIR 34
BTS SNIR 35
MODBUS TCP/IP

BTS SNIR 36
MODBUS TCP/IP
 Encapsule un message MODBUS dans une trame TCP/IP
classique.

BTS SNIR 37
Trame MODBUS TCP/IP
 le champ "Error check" disparait car les couches
TCP/IP effectuent déjà un contrôle d'erreur (CRC)

Modbus/TCP -> port 502

BTS SNIR 38
En-tête MBAP
(ModBus Application Protocol header)
 L'en-tête MBAP d'une longueur de 7 octets, se décompose
comme suit :

BTS SNIR 39
Champs MBAP
Description des différents champs :

 Transaction Identifier : numéro d'un message MODBUS.


Chaque message (requête+réponse) est identifié par un numéro
différent

 Protocol Identifier : numéro du protocole pour les systèmes


multiplexés qui en utilisent plusieurs (MODBUS = 0)

 Length : longueur du message à suivre


Unit Identifier + Data

 Unit Identifier : identifiant d'un équipement


(adresse d’un esclave derrière une passerelle Ethernet/RS485)

BTS SNIR 40
Exemple
ADU en hexa :
 00 00  Transaction identifier
 00 00  Protocole identifier (à 0 si Modbus)
 00 06  Longueur (ce qui suit)
 01  esclave 01 si plusieurs esclave via une
passerelle Ethernet/RS485

 06  Code fonction écrire un mot


 00 01  Adresse PDU
 00 0A  Valeur à modifier

BTS SNIR 41
Etats du maître

Source : http://www.modbus.org/

BTS SNIR 42
Etats de l’esclave

Source : http://www.modbus.org/

BTS SNIR 43
Démonstration
Simulateur esclave : ModSim32

Maître : Modbus Doctor ou ModScan

BTS SNIR 44
Analyse WireShark

45

Vous aimerez peut-être aussi