Le protocole Modbus (marque déposée par MODICON) est un protocole de dialogue basé sur une structure hiérarchisée entre un maître et plusieurs esclaves
Une liaison multipoints (RS-485) relie maître et esclaves
Le format des échanges est le suivant:
- 9600 ou 19200 bits / seconde
- 8 bits, sans parité, 1 stop
Deux types de dialogue sont alors possibles:
- le maître parle à un esclave et attend sa réponse
- le maître parle à l'ensemble des esclaves, sans attente de réponse (diffusion générale)
Les échanges sont donc du type half-duplex
La liaison Modbus peut être sur 4 fils ou sur 2 fils
Il ne peut y avoir sur la ligne qu'un seul équipement en train d'émettre. Aucun esclave ne peut envoyer un message sans une demande préalable du maître. Le dialogue entre les esclaves est impossible
Il existe 2 modes de transmission : ASCII ou RTU
Transmission RTU (Remote Terminal Unit)
Le maître envoie un message constitué de la façon suivante:
- adresse de l'esclave concerné, pour établir la liaison avec lui
- instruction
- donnée
- contrôle, calculé sur l'ensemble du message et destiné à assurer l'intégrité de l'échange
La détection de fin de message est réalisée sur un silence de plus de 2 caractères
L'esclave répond par un message du même type
L'adresse de l'esclave est un numéro compris entre 1 et 247 codé sur 1 octet. Le numéro 0 indique que tous les esclaves sont concernés (diffusion générale)
L'instruction est codée sur 1 octet. Par exemple, le code 03 envoyé vers un ATV-28, correspond à une demande de lecture de N mots
La donnée peut être composée de plusieurs mots, par exemple, adresse du premier mot (2 octets), puis nombre de mots (2 octets)
Le contrôle appelé CRC (Cyclical Redundancy Check), codé sur 2 octets, est calculé de la façon suivante:
XOR: OU exclusif
Le CRC est calculé par l'émetteur avant d'être transmis. Le récepteur calcule aussi le CRC et le compare avec le CRC reçu: des valeurs différentes indiquent une erreur dans la transmission du message
Exemple
Lecture par le maître des mots W450 à W456 sur un ATV-28 (esclave n°2). Cette requête comporte 8 octets:
02 | 03 | 01 C2 | 00 07 | XX XX |
n° de l'esclave | instruction de lecture de N mots |
450 est converti en code hexadécimal | 7 mots | Valeur du CRC |
Calcul du CRC16 (animation)
Transmission ASCII (American Standard Code for Information Interchange)
Le maître envoie un message constitué de la façon suivante:
- un en-tête : caractère $3A correspondant aux deux points (:)
- les octets d'information sont codés sur 2 caractères ASCII, par exemple $6A est codé par
$36 (6) et $41 (A)
- un contrôle appelé LRC8 (Longitudinal Redundancy Check 8 bits)
-
un délimiteur de fin de trame constitué par les caractères $0D (CR) et $0A (LF)
Le calcul du LRC8 se fait sur les octets hors en-tête et délimiteur par le complément à 2 de la somme des octets
exemple de requête : 01 04 04 90 00 05
01 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
04 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
90 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
00 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
05 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
SOMME |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
COMPLEMENT |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
+1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
Le LRC8 est 0110 0010 (en binaire) => 62 (en hexadécimal) => $62
Calcul du LRC8 (animation)
Le protocole Modbus est très utilisé pour les communications des automates programmables industriels et des variateurs de vitesse des moteurs électriques
RS-485 : c'est une liaison série, de type asynchrone, différentielle qui permet un débit élevé (jusqu'à 10 Méga-bits/seconde) sur une distance importante (jusqu'à 1200m). Elle dispose de 2 bornes d'émission polarisées notées T(+), T(-) et de 2 bornes de réception polarisées notées R(+), R(-)
Voir aussi : Liaison RS-232