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