Vous êtes sur la page 1sur 3

MODBUS TCP pour AvisoX 07/12/2009

Le protocol d'échange MODBUS TCP est une encapsulation du protocol MODBUS dans
un protocol TCP.

Le protocol MODBUS série exige une vérification des données échangées, un checksum
CRC16 est donc envoyé dans chaque trame MODBUS serie.

En MODBUS TCP, c'est le protocol TCP qui assurent la validité des trames échangées.
Le CRC16 n'est donc pas inséré dans les trames MODBUS TCP.

Une trame MODBUS TCP se compose donc de la façon suivante :

1. Un entête MBAP (ModBus Application Protocol header)

Le MBAP est composé de 7 octets

. Transaction identifier : 2 octets 0xNNNN


Il sert à identifier une trame “réponse“ en relation avec sa “question“
En effet le MODBUS TCP est un protocole asynchrone.

. Protocol identifier : 2 octets 0x00000


Toujours à 0, identifie le protocol MODBUS

. Length : 2 octets 0xNNNN


Nombre d’octets dans la trame après celui-ci

. Unit identifier 1 octet 0xFF


Numéro de l’automate connecté en mode série RS232. Toujours 255.
Pour système Schneider mettre 0 ?

2. La trame MODBUS

La trame MODBUS est tronquée de son numéro de station déjà renseigné


dans le MBAP ainsi que du CRC16 en fin de trame.

Lors d’un échange entre AvisoX et l’automate, AvisoX questionne l’automate en


envoyant une trame de la forme :

Entête MBAP + Requête MODBUS

La requête MODBUS est composée comme suit :

. Code fonction 1 octet 0x03


C’est la fonction lecture MODBUS standard.

. Adresse de lecture 2 octets 0xNNNN


Début de lecture dans la table (poids fort / poids faible)

. Nombre de registres 2 octets 0xNNNN


Nombre de mots de 16 bits à lire (poids fort / poids faible)

p-1
MODBUS TCP pour AvisoX 07/12/2009

La trame de requête fait donc : 7 + 5 = 12 octets


Le serveur MODBUS TCP interprète la requête et renvoi sa réponse. La trame de
réponse est composée de la façon suivante :

Entête MBAP + Réponse MODBUS

L’entête MBAP est identique à celui de la requête sauf la longueur qui


identifie cette fois ci la longueur des datas renvoyé.

Le code de fonction (0x03) est recopié sauf en cas d’erreur. Un code d’erreur
peut être retourné à l’emplacement du code fonction. Ce code d’erreur est
augmenté de 0x80.

La réponse MODBUS est tronquée comme lors de la requête et se compose


donc comme suit :

. Code fonction 1 octet 0x03


C’est la fonction lecture MODBUS standard.
(Eventuellement code d’erreur)

. Nombre d’octets tranférés 1 octet 0xNN


Cette valeur ne sera pas significative si l’on veut tranférer plus de 255
valeurs dans une réponse.

La trame de réponse fait donc : 7 + 2 + ( N x 2 ) ou N est le nombre de mots


de 16 bits transférés.

Exemple de transaction AvisoX ó Serveur MODBUS TCP

Demande de 5 valeurs à partir de l’adresse 1

Requête émise par AvisoX :

12.34.00.00.00.06.FF.03.00.01.00.05
MBAP (7 car.) MODBUS (5 car.)

Réponse du serveur MODBUS TCP :

12.34.00.00.00.0D.FF.03.05.01.23.01.23.01.23.01.23.01.23
MBAP (7 car.) MODBUS (12 car.)

En mode serveur MODBUS TCP AvisoX adopte le même mode d’échange.

Le serveur MODBUS TCP d’AvisoX répond sur le port 9191 par défaut.

p-2
MODBUS TCP pour AvisoX 07/12/2009

Ecriture de valeurs vers l’automate

Utilisation du code fonction 16.

Requête émise par AvisoX :

S1 Nombre d’octet dans la trame après S1 (= Q1 + 7)


R1.R2 Registre d’adresse sur l’automate
N1.N2 Nombre de registre à écrire
Q1 Nombre d’octets de données (Nombre de mots de 16 bits x 2)
V1.V2 Données à écrire sur 2 octets

X1.X2

Exemple : Ecriture de 5 registres à l’adresse 100

12.34.00.00.00.S1.00.10.R1.R2.N1.N2.Q1.01.23.01.23.01.23.01.23.01.23

12.34.00.00.00.13.00.10.00.64.00.0A.14.01.23.01.23.01.23.01.23.01.23
MBAP (7 car.) MODBUS (16 car.)

-------------------

Dans le protocole MODBUS TCP, on exprime les adresses à partir de 400001.


Il faut en fait retirer le 4 et soustraire 1 ce qui donne par exemple pour le registre
400101, 101-1 = 100 = &64 en hexa. Dans la trame on aura donc 64.

Dans l’exmple ci-dessus, on écrira en fait dans le registre 400101

p-3

Vous aimerez peut-être aussi