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 : [Link]
BTS SNIR 42
Etats de l’esclave
Source : [Link]
BTS SNIR 43
Démonstration
Simulateur esclave : ModSim32
Maître : Modbus Doctor ou ModScan
BTS SNIR 44
Analyse WireShark
45