|  | Le protocole ModBus (constructeur Modicon)/Jbus (constructeur Télémécanique) est un protocole de dialogue créant une structure hiérarchisée avec un maître et un ou plusieurs esclave. Modèle OSI : Principe Maître / Esclave : Ce type de protocole permet d'interroger depuis le maître, un ou plusieurs esclaves intelligents

Deux types de dialogue sont possibles entre le maître et l'esclave :

Le maître parle à un esclave et attend sa réponse.

Le maître parle à l'ensemble des esclaves sans attente de réponse.

Le maître gère les échanges et lui seul en a l'initiative.
Ce maître réitère la question lors d'un échange erroné et décrète l'esclave absent après une non-réponse dans un temps donné (time out). Il ne peut y avoir sur la ligne qu'un seul équipement en train d'émettre.
Aucun esclave ne peut lui-même envoyer un message sans y avoir été invité. Toutes communications d'esclave à esclave ne peuvent exister que si le logiciel du maître a été conçu pour recevoir des données et les renvoyer d'un esclave à l'autre .

Le maître peut adresser 127 équipements repérés de l'équipement n°1 à l'équipement n°126, l'équipement 0 étant prédéfini.
Si le maître utilise le numéro d'équipement 0, une diffusion vers tous les esclaves sera effectués.
L'utilisation de l'équipement 0 n'est autorisé qu'en écriture.

Tableau des requêtes pour Maître JBUS / MODBUS :

Liste des fonctions JBUS / MODBUS supportées
01 : Lecture de n bits
02 : Lecture de n bits entrées
03 : Lecture de n mots **
04 : Lecture de n mots d'entrées
05 : Ecriture d'un bit
06 : Ecriture d'un mot
07 : Lecture rapide de 8 bits*
08 : Diagnostic des échanges*
11 : Lecture compteur d'événement *
12 : Lecture du buffer trace*
13 : Commandes programme -Sous fonctions 01 : Arrêt de l'unité centrale 02 : Marche de l'unité centrale 03 : Déchargement de la mémoire
04 : Chargement de la mémoire
25 : Connexion à la mémoire API
26 : Déconnexion de la mémoire API

14 : Diagnostic des commandes programme*
15 : Ecriture de n bits
16 : Ecriture de n mots**

* : Supporté uniquement par le protocole Jbus. ** : Ce code fonction est utilisé également pour l'accès au format "mot double" (READDWORD,...) et au format "mot flottant" (READFWORD,...).

ModBus RTU / ASCII :

- Définition d'une trame au format RTU :

N° d'esclave | : 0 à 255
Code fonction | : Indique le type d'échange
Zone de données | : Champ d'informations contenant les paramètres liés à la fonction : adresse mot, valeur de mot, nombre de mots...etc.
CRC16 | : Mot utilisé pour détecter les erreurs de transmission (Cyclic Redundary Check).

LECTURE DE N BITS : Code fonction 01 ou 02 (01 ou 02 en Héxa)

> Commande :

> Adresse du périphérique | Code fonction 01 ou 02 | Adresse du premier bit | Nombre de bits à lire | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

> Réponse :

> Adresse du périphérique | Code fonction 01 ou 02 | Nombre d'octets lus | Premier octet de données | ... | Dernier octet de données | CRC
> 1 octet | 1 octet | 1 octet | 1 octet | ... | 1 octet | LSB | MSB

LECTURE DE N MOTS : Code fonction 03 ou 04 (03 ou 04 en Héxa)

> Commande :

> Adresse du périphérique | Code fonction 03 ou 04 | Adresse du premier mot | Nombre de mots à lire | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

> Réponse :

> Adresse du périphérique | Code fonction 03 ou 04 | Nombre d'octets lus | Valeur du premier mot | ... | Valeur du dernier mot | CRC
> 1 octet | 1 octet | 1 octet | MSB | LSB | ... | MSB | LSB | LSB | MSB

LECTURE D'UN BIT : Code fonction 05 (05 en Héxa)

> Commande :

> Adresse du périphérique | Code fonction 05 | Adresse du bit | Valeur du bit | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

> Réponse :

> Adresse du périphérique | Code fonction 05 | Adresse du bit | Valeur du bit | CRC
> 1 octet | 1 octet | 1 octet | MSB | LSB | LSB | MSB

ECRITURE D'UN MOT : Code fonction 06 (06 en Héxa)

> Demande :

> Adresse du périphérique | Code fonction 06 | Adresse du mot | Valeur du mot | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

> Réponse :

> Adresse du périphérique | Code fonction 06 | Adresse du mot | Valeur du mot | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

LECTURE RAPIDE DE L'ETAT: Code fonction 07 (07 en Héxa)

> Demande :

> Adresse du périphérique | Code fonction 07 | CRC
> 1 octet | 1 octet | LSB | MSB

> Réponse :

> Adresse du périphérique | Code fonction 07 | Lecture rapide de l'octet d'état | CRC
> 1 octet | 1 octet | 1 octet | LSB | MSB

BOUCLAGE DE DIAGNOSTIC: Code fonction 08 (08 en Héxa)

> Demande :

> Adresse du périphérique | Code fonction 08 | Code diagnostic 0000 | Données de bouclage | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

> Réponse :

Adresse du périphérique | Code fonction 08 | Code diagnostic 0000 | Données de bouclage | CRC
1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

ECRITURE DE N MOTS : Code fonction 16 (10 en Héxa)

> Demande :

> Adresse du périphérique | Code fonction 10 | Adresse du premier mot | Nombre de mots à écrire | Nombre d'octets de données(n) | Données | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | 1 octet | n octets | LSB | MSB

> Réponse :

> Adresse du périphérique | Code fonction 10 | Adresse du premier mot | Nombre de mots écrits | CRC
> 1 octet | 1 octet | MSB | LSB | MSB | LSB | LSB | MSB

REPONSE ERRONEE

> Adresse du périphérique | Code fonction | Code de réponse erronée | CRC
> 1 octet | 1 octet | 1 octet | LSB | MSB

Le codage des données s'effectue toujours dans l'ordre poids fort-poids faible sauf pour le CRC où l'ordre est inversé !

Par exemple pour écrire les valeurs 15 et 400 dans les mots W400 et W401 de l'esclave 2, il faut envoyer la trame de données suivante :

02 | 10 | 0190 | 0002 | 04 | 000F | 0190 | E8C9

La réponse à ce message serait :

02 | 10 | 0190 | 0002 | 2A40
--- | --- | --- | --- | ---

Autre exemple d'échange entre un maître et un esclave :

> Trame émise par le maître : 04 03 00 02 0001 9F 25

> - Adresse esclave : 04
> - Code fonction 03 = lecture registre
> - N° du registre de début de lecture : MSB : 00 et LSB : 01
> - Nombre de registre de lecture : MSB : 00 et LSB : 01
> - CRC : 9F 25

> Trame émise par l'esclave avec erreur : 04 83 02 F0 D0

> - Adresse esclave : 04
> - Code fonction : lecture avec MSB = 1 : 83 (Ce code correspond au code fonction de la demande +H'80' (le bit significatif est mis à 1)
> - Code erreur (n° registre) : 02
> - CRC : F0 D0

> Trame émise par l'esclave sans erreur : 04 03 02 02 58 DE 74

> - Adresse esclave : 04
> - Code fonction : lecture registre : 03
> - Nombre d'octets données : 02
> - Données du registre 0002 : MSB 02 et LSB : 58
> - CRC : DE 74

- Définition d'une trame au format ASCII :

':' | : Caractère de début de la trame.
N° d'esclave | : Numéro de l'esclave visé : 0 à 255
Code fonction | : Code fontion de la trame
Zone de données | : Champ d'informations contenant les paramètres liés à la fonction : adresse mot, valeur de mot, nombre de mots...etc.
LRC | : Mot utilisé pour détecter les erreurs de transmission (Longitudinal Redundancy Check)
CR et LF | : Fin de la trame MODBUS

CR(Carriage Return) correspond au retour chariot : 0D(hexadécimal)
LF (Line Feed) correspond au retour à la ligne : 0A(hexadecimal)

Chaque octet composant une trame est codé avec 2 caractères ASCII (2 fois 8 bits)

Différents codes d'erreurs :

1 : | L'esclave ne reconnaît pas la fonction demandée
2 : | Les numéros des bits et des mots (adresses) indiquées dans la demande n'existent pas dans l'esclave
3 : | Les valeurs des bits et des mots indiquées dans la demande ne sont pas accessibles dans l'esclave
4 : | L'esclave a commencé à exécuter la demande mais ne peut pas continuer à la traiter complétement

Calcul du CRC (Cyclic Redundary Check) :

Le contrôle de redondance cyclique (noté CRC , ou en anglais Cyclic Redundancy Check ) est un moyen de contrôle d'intégrité des données. Il représente la principale méthode de détection d'erreurs utilisée dans les télécommunications.

Il consiste à protéger des blocs de données, appelés trames ( frames en anglais). A chaque trame est associé un bloc de données, appelé code de contrôle (parfois CRC par abus de langage ou FCS pour Frame Check Sequence dans le cas d'un code de 32 bits). Le code CRC contient des éléments redondants vis-à-vis de la trame, permettant de détecter les erreurs, mais aussi de les réparer.

Le principe du CRC consiste à traiter les séquences binaires comme des polynômes binaires, c'est-à-dire des polynômes dont les coefficients correspondent à la séquence binaire. Ainsi la séquence binaire 0110101001 peut être représentée sous la forme polynomiale suivante :

M(X) = 0*X 9 + 1*X 8 + 1*X 7 + 0*X 6 + 1*X 5 + 0*X 4 + 1*X 3 + 0*X 2 + 0*X 1 + 1*X 0

= X 8 + X 7 + X 5 + X 3 + X 0

= X 8 + X 7 + X 5 + X 3 + 1

Dans ce mécanisme de détection d'erreur, un polynôme prédéfini (appelé polynôme générateur et noté G(X)) est connu de l'émetteur et du récepteur. La détection d'erreur consiste pour l'émetteur à effectuer un algorithme sur les bits de la trame afin de générer un CRC, et de transmettre ces deux éléments au récepteur. Il suffit alors au récepteur d'effectuer le même calcul afin de vérifier que le CRC est valide.

On se donne un polynôme générateur G de degré n qui détermine le nombre de bits de contrôle.

On effectue la division de M par G.

Si la trame E = (Données, Reste) est divisible par G ( c'est à dire que le reste de la division de E par G est égal à 0) alors la trame a bien été envoyer.

Exemple :

Prenons 6 bits de données : 110101 (M)

Rajoutons 2 bits nuls pour obtenir des données de 8 bits : 11010100
Donc le polynôme générateur doit être de degré 2 : 101 (G)=> x2 + 1

Effectuons la division de M par G :

E est donc égal à (Données, Reste) : 110101 11

(11010111)2 = (215)10

(101)2 = (5)10

Donc E divisé par G correspond à 215/5=43.

Cette division a bien un reste nul donc il n'y a pas d'erreurs!

Voici L 'organigramme de l'algorithme de détection d'erreur CRC :

Calcul du LRC ( Longitudinal Redundancy Check) :

Le contrôle de parité croisé (aussi appelé contrôle de redondance longitudinale ou Longitudinal Redundancy Check , noté LRC ) consiste non pas à contrôler l'intégrité des données d'un caractère, mais à contrôler l'intégrité des bits de parité d'un bloc de caractères.

Voici la formule générale du calcul du LRC :(((Somme des valeurs en hexadécimales hors délimimiterurs)XOR FF)+1)

Exemple :

Voici la trame suivante :

: | 01 | 10 | 0064 | 0002 | 04 | 0003 | 0002 | LRC | 0D0A
--- | --- | --- | --- | --- | --- | --- | --- | --- | ---

LRC =(((01+10+00+64+00+02+04+00+03+00+02)XOR FF)+1)
=((80 XOR FF)+1)
=((10000000 XOR 11111111)+1)
=01111111+1
=10000000
=80 (héxadécimal)

D'ou la trame correspond à :

: | 01 | 10 | 0064 | 0002 | 04 | 0003 | 0002 | 80 | 0D0A
--- | --- | --- | --- | --- | --- | --- | --- | --- | ---

Retour

© Copyright 2005-2006 GS Computer. All Rights Reserved.
7773 visites