Modbus et IPX800 V5

De GCE Electronics
Aller à la navigation Aller à la recherche


Modbus

Modbus-dall-e.jpg
Nom Modbus
Famille IPX800 V5
Wiki créé le 11/09/2024
Wiki mis à jour le 11/09/2024
Auteur fgtoul

Introduction

Nous allons explorer un sujet technique qui pourrait sembler intimidant pour certains. Hier encore, j'étais dans le même bateau, jusqu'à ce qu'un véritable chevalier blanc vienne chez moi pour me donner quelques leçons et m'aider à y voir plus clair. Un grand merci à @Jweb pour son aide précieuse !

Aujourd'hui, je ne prétends pas être un expert en la matière, mais je souhaite partager ce que j'ai appris pour vous aider à progresser dans l'intégration de votre installation sans vous laisser décourager par le protocole Modbus.

Ce qui va suivre n'est pas un guide exhaustif sur le protocole Modbus, mais plutôt une explication simplifiée adaptée à nos configurations utilisant les IPX800 V5.

Historique

Modicon, une entreprise américaine, a introduit le protocole Modbus il y a 45 ans pour permettre aux automates programmables et aux dispositifs industriels de communiquer entre eux. En 1996, Schneider Electric a racheté Modicon. Sous la marque Modicon, l’entreprise française a considérablement développé et commercialisé une large gamme de contrôleurs et de solutions utilisant Modbus. En 2004, Schneider Electric a transféré les droits à l’organisation [Modbus.org]. Depuis lors, les spécifications sont disponibles gratuitement et il n’y a pas de frais de licence pour l’utilisation des protocoles Modbus et Modbus TCP.

À l’origine, Modbus permettait les communications sur un bus filaire série. Cependant, les contraintes de ce mode de communication ont conduit à des évolutions telles que Modbus TCP, qui permet des communications sur des distances beaucoup plus longues et avec un nombre de périphériques théoriquement illimité.

RTU vs TCP

Modbus RTU

Modbus RTU (Remote Terminal Unit) : Utilise une communication série (RS232, RS485) avec une transmission binaire compacte. C’est le mode le plus couramment utilisé dans les environnements industriels

La communication Modbus sur notre IPX800 utilise l'interface RS-485 en mode maître/esclave, avec 1 seul maître sur le réseau (dans notre cas l'IPX étant le maître).

Dans ce système, le maître prend l'initiative et interroge les esclaves, qui attendent les requêtes du maître pour fournir des informations. Les dispositifs esclaves ne peuvent pas envoyer de données de manière autonome.

Le maître a la possibilité d'écrire ou de lire des données dans les registres des périphériques esclaves.

Modbus RTU sur RS485 fonctionne généralement en mode half-duplex, ce qui signifie que les données peuvent être envoyées dans les deux sens, mais pas simultanément. Dans ce cas, le bus utilise 2 fils.


Avantages :

Simplicité : Facile à implémenter et à configurer.

Coût : Moins coûteux en termes de matériel et de mise en œuvre.

Fiabilité : Utilise une communication série (RS485), qui est robuste et fiable pour les environnements industriels.

Efficacité : Optimise l’utilisation de la bande passante grâce à une transmission binaire compacte.


Inconvénients :

Distance limitée : La distance maximale sans répéteur est d’environ 1200 mètres.

Nombre limité d’appareils : Peut connecter jusqu’à 32 appareils sur une seule ligne sans répéteur (247 avec répéteurs).

Débit de données : Plus lent par rapport à Modbus TCP, avec des taux de transfert de données limités par la vitesse de la communication série (9600 ou 115200 Bauds)

1 seul maître sur le réseau, ce qui interdit la communication avec certains appareils comme des onduleurs photovoltaïques souvent maîtres eux-mêmes.



Modbus TCP/IP

Modbus TCP/IP fonctionne sur des réseaux Ethernet, permettant une communication plus rapide et une intégration facile avec les réseaux informatiques existants. Cette architecture Maître/Esclaves fonctionne en mode full-duplex, permettant l’envoi et la réception de données simultanément dans les deux sens. Cela améliore la vitesse et l’efficacité de la communication.


Avantages :

Vitesse : Offre des taux de transfert de données plus rapides grâce à l’utilisation des réseaux Ethernet.

Scalabilité : Peut gérer un nombre théoriquement illimité d’appareils sur un réseau IP.

Flexibilité : Permet des connexions filaires et sans fil, facilitant l’intégration avec les infrastructures réseau existantes.

Installation facile : Utilise du matériel Ethernet standard, ce qui simplifie l’installation et la configuration.


Inconvénients :

Coût : Plus coûteux en termes de matériel et de mise en œuvre par rapport à Modbus RTU.

Latence : Peut avoir une latence plus élevée en raison de la surcharge du protocole TCP/IP4.

Complexité : Plus complexe à configurer et à maintenir, nécessitant une connaissance des réseaux IP4.

Conclusion

Modbus RTU est idéal pour les systèmes plus petits et moins complexes où la simplicité et le coût sont des facteurs importants.

Modbus TCP est mieux adapté aux systèmes plus grands et plus complexes nécessitant une communication rapide et une grande scalabilité.

Modbus RTU

Le maître

Notre IPX800 V5 possède tous les outils pour interroger ou piloter des dispositifs sur son réseau Modbus. Un maître peut envoyer des requêtes de lecture ou d'écriture de données vers un dispositif particulier grâce à l'adresse unique qui identifie chaque esclave (1 à 247). Il peut également s'adresser à tous les esclaves simultanément en envoyant un Broadcast sur l'adresse 0. Vu que tous les esclaves ne peuvent pas répondre simultanément, le broadcast est utilisé pour l'envoi de commandes d'écriture.

L'esclave

Chaque esclave est identifié par son adresse réseau unique. L'esclave, comme nous l'avons abordé plus haut, ne peut prendre aucune initiative. Il reste en veille jusqu'à réception d'une requête émise par le maître. Si la requête lui est bien adressée (son adresse réseau unique correspond), il traite la demande et renvoie une réponse au maître. Il traitera également la demande dans le cas d'un Broadcast.

Les requêtes

En Modbus RTU, les messages sont encapsulés dans un format binaire compact et transmis via des interfaces série (RS485 pour notre IPX) Chaque message contient une adresse d’esclave, un code de fonction, des données et un CRC (Cyclic Redundancy Check) pour la vérification des erreurs.

Silence Adresse Fonction Données CRC Silence
Début 1 octet 1 octet n octets 2 octets Fin
0 à 247 1 à 127 Données à envoyer Contrôle

Pour connaître les requêtes utilisables sur votre appareil esclave, vous devrez vous référer à la documentation du fabricant.

Remarque :
Vous remarquerez que l'esclave détermine le début et la fin d'une trame grâce à 2 silences. Ces silences doivent avoir chacun une durée équivalente à celle de la transmission de 3.5 caractères (1 caractère=11 bits).

Avec une vitesse de transmission de 9600 Bauds, le silence doit donc durer 3.5 * 11 * (1/9600) secondes, soit environ 4 millièmes de secondes.
Avec une vitesse de transmission de 115200 Bauds, le silence doit donc durer environ 3 millièmes de secondes.

C'est pourquoi, lors de la programmation de l'ipx800, il faut éviter de traiter plusieurs requêtes sur une même règle. L'ipx800 pourrait envoyer les trames trop rapprochées les unes des autres, il y aurait alors risque de perte d'informations.


les différents codes de fonction

Requêtes de lecture

Lecture des bits de sortie (coils) :0x01 Description : Lire l’état des bits de sortie (coils) des esclaves.

Lecture des entrées discrètes :0x02 Description : Lire l’état des entrées discrètes (discrete inputs) des esclaves.

Lecture des registres d’entrée : 0x04 Description : Lire les valeurs des registres d’entrée (input registers) des esclaves.

Lecture des registres de maintien : 0x03 Description : Lire les valeurs des registres de maintien (holding registers) des esclaves.

Requêtes d’écriture

Écriture d’un bit de sortie unique : 0x05 Description : Écrire une valeur dans un bit de sortie (coil) unique.

Écriture d’un registre de maintien unique : 0x06 Description : Écrire une valeur dans un registre de maintien (holding register) unique.

Écriture de plusieurs bits de sortie : 0x0F Description : Écrire des valeurs dans plusieurs bits de sortie (coils).

Écriture de plusieurs registres de maintien : 0x10 Description : Écrire des valeurs dans plusieurs registres de maintien (holding registers).

Requêtes de diagnostic

Diagnostic : 0x08 Description : Effectuer des tests de diagnostic sur les esclaves.

Logiciel Modbus

Pour lire les trames sur le bus RTU, vous pouvez utiliser des logiciels gratuits disponibles sur le Web.

Ce logiciel vous permettra de dialoguer avec votre dispositif esclave et d'en comprendre le mode de communication.

Cela vous sera fort utile pour programmer l'IPX800 V5 par la suite.

Vous aurez en outre besoin d'un adaptateur USB pour interfacer votre PC. Vous pouvez en trouver pour moins de 20€

USB rs485.png

Reportez vous à la documentation de l'adaptateur pour son installation et son branchement. En général, nous n'utiliserons que 2 bornes (A et B), la borne GND servira pour la mise en commun des Grounds entre l'alimentation du port USB et celle de l'esclave.

Cet adaptateur crée un port série virtuel qu'il conviendra de configurer avec les paramètres requis par l'esclave.

exemple :

Vitesse : 9600 ou 115200 Bauds

Nombre de Bits : 8

Bit de parité : N

En ce qui concerne le logiciel, j'utilise Modbus Doctor.

Voilà, vous êtes prêt à communiquer en Modbus RTU entre votre PC (maître) et l'esclave.

Exemples d'utilisation

Capteur de conductivité Modbus RTU

J'ai acquis un capteur de conductivité (EC) qui me permettra de mesurer et réguler le taux de nutriments dans la solution qui nourrira le jardin hydroponique. Cette installation fera sans doute l'objet d'un autre article, mais je ne rentrerai pas dans les détails ici.

La conductivité d'un liquide varie avec sa température, ce capteur mesure donc les 2 grandeurs afin de permettre le calcul du facteur de correction.

Chaque grandeur pourra alors être demandée par le maître.

Voici la documentation du produit (je vous fais grâce des pages en mandarin. Heureusement que Google Lens permet des traductions instantanées).

Format de communication
Vitesse en Bauds Bit de parité Bits de données Bit d'arrêt
9600 N 8 1

Ce sont les paramètres de la configuration du port série virtuel créé par l'adaptateur.

Adresse des registres
Adresse Valeur Plage Lecture/Ecriture
0x 00 00 Température en °C 0 à 80.0 Lecture seule
0x 00 01 Conductivité en µS 0 à 4000 Lecture seule
0x 00 03 ID Esclave 0 à 247 Lecture/Ecriture

Ce sont les adresses des registres qu'il sera possible de lire ou écrire.

Requête d'interrogation de l'esclave (03)
Adresse de l'esclave code fonction Bit fort adresse registre Bit faible adresse registre Nombre de registres à lire (bits forts) nombre de registres à lire (bits faibles) CRC (bits forts) CRC (bits faibles)
1 octet 03H 1 octet 1 octet 1 octet 1 octet 1 octet 1 octet
Réponse de l'esclave à une requête 03
Adresse de l'esclave code fonction Nombre d'octets de données Données CRC (bits forts) CRC (Bits faibles)
1 octet 03H 1 octet N * 2 octets de données 1 octet 1 octet


Nous avons maintenant toutes les informations pour interroger les données du capteur.

Exemples de trame

Selon la documentations ci-dessus, construisons la requête de type 03 pour récupérer la conductivité sur l'esclave

Cette trame émise par le maître est donc construite comme suit :

01 (1 octet) : ID unique de l'esclave destinataire

03 (1 octet) : Fonction lecture de registres

00 00 (2 octets) : Adresse de début de lecture, ici : 0

00 01 (2 octets) : Nombre de registres à lire, ici 1. Nous demandons donc la valeur de la conductivité.

84 0A (2 octets) : CRC

Emettons la trame avec notre logiciel Modbus (en général il calcule automatiquement les octets du CRC)

01 03 00 00 00 01 84 0A

L'esclave ID 1 pourrait répondre :

01 03 02 06 FA 3B A7

Cette réponse émise par l'esclave se décompose comme ceci:

01 (1 octet) : ID de l'esclave

03 (1 octet) : la commande reçue

02 (1 octet) : le nombre d'octets qui constituent les données de la réponse, ici il y aura 2 octets

Du coup on récupère les 2 octets suivants pour connaître la valeur de la réponse :

06 FA (2 octets) : ces 2 octets, qui constituent la valeur de conductivité, devront être interprétés conformément à la doc. Il y a souvent une formule à appliquer pour déterminer la valeur réelle.

3B A7 (2 octets) : CRC


La documentation donne la formule à appliquer pour obtenir la valeur de conductivité.

Soit A la valeur contenue dans l'octet de poids fort, et B celle de l'octet de poids faible.

La formule est A* 256 + B


Nous obtenons après conversion hexadécimale vers décimal : 6*256 + 250 = 1786 µS/cm