Arduino - Modbus

Dans ce tutoriel, nous allons apprendre :

Qu'est-ce que Modbus ?

Modbus est un protocole utilisé pour la communication entre dispositif et dispositif, dispositif et logiciel/application, et dispositifs vers HMI. Il est largement utilisé dans les zones industrielles pour contrôler/surveiller les dispositifs.

En un mot simple, Modbus est un langage qu'un appareil utilise pour communiquer avec d'autres appareils, des logiciels/applications et un appareil HMI.

Ce tutoriel concerne Arduino, donc Arduino représente le dispositif. En utilisant Modbus, nous pouvons réaliser :

  • Deux Arduinos communiquent entre eux pour contrôler/surveiller les entrées/sorties
  • L'Arduino communique avec le logiciel sur PC ou l'application sur le smartphone
  • L'Arduino communique avec l'appareil HMI

Par exemple, Arduino #1 avec 4 interrupteurs contrôle Arduino #2 avec 4 ampoules sur une longue distance.

Pourquoi a-t-on besoin de Modbus ?

Y a-t-il des alternatives à Modbus ? Si oui, quand utiliser Modbus ? Quand utiliser les alternatives ?

Pour répondre à ces questions, considérons un cas : Un interrupteur connecté à Arduino #1 contrôle une LED connectée à Arduino #2 sur une longue distance.

contrôle de LED par bouton à longue distance

La manière la plus simple de remplacer Modbus est de définir un protocole simple par nous-mêmes :

  • Arduino #1 :
    • Lorsque l'interrupteur est mis sur ON, Arduino #1 envoie un octet (commande) de valeur 1 à Arduino #2.
    • Lorsque l'interrupteur est mis sur OFF, Arduino #1 envoie un octet (commande) de valeur 0 à Arduino #2.
  • Arduino #2 :
    • Si l'octet reçu est 1, allumer la LED
    • Si l'octet reçu est 0, éteindre la LED

    Le protocole ci-dessus est défini par nous-mêmes, ce n'est pas un protocole standard. Nous devons en définir davantage si :

    • Arduino #1 veut savoir si la commande a été exécutée avec succès par Arduino #2
    • Arduino #1 veut vérifier l'état de la LED sur Arduino #2
    • Arduino #1 équipé de plusieurs interrupteurs veut contrôler plusieurs LED sur Arduino #2
    • Arduino #1 veut utiliser un interrupteur pour contrôler une LED sur Arduino #2 et Arduino #2 veut également utiliser un interrupteur pour contrôler une LED sur Arduino #1
    • Et plus de cas d'utilisation.

    Il n'est pas facile de définir tous les ordres par nous-mêmes. Le problème devient plus compliqué lorsque nous mélangeons les exigences mentionnées ci-dessus. Et nous ne pouvons pas non plus garantir l'absence d'erreurs.

    Un autre problème survient lorsque nous définissons le protocole par nous-mêmes. Si nous voulons que notre Arduino fonctionne avec un autre Arduino utilisant un protocole défini par une autre personne, cela est impossible à moins que nous collaborions et partagions le protocole auto-défini.

    Voici les raisons pour lesquelles nous avons besoin du protocole Modbus. Si nous utilisons le protocole Modbus :

    • Nous n'avons PAS besoin de définir les commandes, Modbus les a définies pour chaque cas. Nous devons juste les mettre en œuvre.
    • Notre appareil peut fonctionner avec d'autres appareils/logiciels qui prennent en charge Modbus SANS collaborer avec le créateur de l'appareil/logiciel.

    Si nous utilisons le protocole Modbus pour Arduino, nous pouvons utiliser de nombreux logiciels/applications gratuits pour contrôler/surveiller notre Arduino.

Quand utiliser et ne PAS utiliser Modbus

Le protocole Modbus n'est pas facile à comprendre et à mettre en œuvre pour les débutants, même si la bibliothèque Modbus est disponible. Par conséquent, il est acceptable d'utiliser un protocole simple défini par soi-même comme décrit ci-dessus si :

  • Le système est simple, tel que plusieurs interrupteurs sur Arduino #1 contrôlent plusieurs LED sur Arduino #2
  • L'Arduino n'a PAS besoin de fonctionner avec d'autres dispositifs/logiciels d'autres créateurs

Nous devrions utiliser Modbus lorsque :

  • Le système est compliqué
  • Le système nécessite une haute fiabilité
  • Arduino doit fonctionner avec d'autres appareils/logiciels d'autres créateurs

※ NOTE THAT:

Il existe d'autres protocoles standards et non standards qui sont des alternatives à Modbus. Ils ne sont pas abordés dans ce tutoriel.

Comment fonctionne le protocole Modbus

Comme décrit précédemment, un Arduino peut communiquer avec un logiciel/une application, un dispositif HMI ou un autre Arduino via le protocole Modbus. Ce tutoriel prend la communication entre deux Arduino comme exemple de communication Modbus. Les autres sont identiques.

Concepts

Il existe certains concepts dans Modbus :

  • Maître et Esclave
  • Requête et Réponse
  • Code de Fonction (FC) et Adresse

Le protocole Modbus fonctionne selon le modèle Maître-Esclave. Parmi deux Arduino, l'un DOIT fonctionner comme un Maître, et l'autre comme un Esclave.

Maître envoie une demande, et l'Esclave envoie une réponse.

Maître Esclave Modbus

Une demande envoyée par Maître contient essentiellement les informations suivantes :

  • Code de Fonction (FC) : 1 octet, est la commande qui indique au Esclave quoi faire. Par exemple, lit l'état d'une broche d'entrée numérique, d'une broche de sortie numérique ou d'une broche d'entrée analogique, contrôle une broche de sortie numérique.
  • Adresse : 2 octets, est utilisée pour identifier la broche. Chaque broche d'entrée numérique, broche de sortie numérique, broche d'entrée analogique se voit attribuer une adresse.
  • Données (par exemple valeur de contrôle)

Une fois qu'il reçoit une demande, l'Esclave prend l'action correspondante et renvoie une réponse contenant le résultat de l'action ou les informations que le Maître a demandées.

Code de fonction

Le Code de Fonction a été défini par la norme Modbus. Il existe de nombreux Code de Fonction. Voyons quelques Code de Fonction de base ci-dessous :

  • FC 01 (Lecture de Bobines) : est une commande utilisée pour lire l'état d'une ou de plusieurs broches de sortie numériques.
  • FC 05 (Écriture d'une Seule Bobine) : est une commande utilisée pour contrôler (écrire) l'état d'une ou de plusieurs broches de sortie numériques.
  • FC 02 (Lecture d'Entrées Discrètes) : est une commande utilisée pour lire l'état d'une ou de plusieurs broches d'entrée numériques.

"FC 01" signifie que la valeur du code de fonction est 0x01.

Il existe davantage de Codes de Fonction. Afin d'éviter de surcharger les débutants, ce tutoriel ne présente que quelques Codes de Fonction essentiels.

Lorsque vous utilisez la bibliothèque Modbus Arduino, vous devez :

  • Décidez quel code de fonction utiliser
  • Donnez des adresses pour chaque broche Arduino (uniquement les broches que vous utilisez)

Les instructions détaillées d'utilisation de la bibliothèque Modbus seront présentées dans le prochain tutoriel, aimez notre page Facebook pour recevoir les notifications des nouveaux tutoriels.

Arduino Maître peut lire l'état de sa broche d'entrée numérique, puis contrôler l'état de la sortie numérique de l'Arduino Esclave, et vice versa.

Par exemple :

  • Arduino Maître est connecté au LED #M, INTERRUPTEUR #M
  • Arduino Esclave est connecté au LED #S, INTERRUPTEUR #S
  • Faisons en sorte que l'INTERRUPTEUR #M contrôle le LED #S, et que l'INTERRUPTEUR #S contrôle le LED #M
arduino modbus interrupteur à LED

Solution :

  • Maître lit l'état de l'INTERRUPTEUR #M → envoie une demande au Esclave pour contrôler la LED #S selon l'état de l'INTERRUPTEUR #M → Esclave contrôle la LED #S et envoie la réponse
  • Maître envoie une demande à Esclave pour lire l'état de l'INTERRUPTEUR #S → Esclave répond avec l'état de l'INTERRUPTEUR #S → Maître contrôle la LED #M selon l'état de l'INTERRUPTEUR #S

※ NOTE THAT:

  • Dans ce qui précède, nous utilisons les termes "broche d'entrée numérique", "broche de sortie numérique" pour faciliter la compréhension des débutants. En réalité, une "broche d'entrée numérique" représente l'état en lecture seule de n'importe quel appareil, une "broche de sortie numérique" représente l'état en lecture/écriture de n'importe quel appareil.
  • Modbus peut prendre en charge plusieurs Maîtres et plusieurs Esclaves.
  • Modbus peut être utilisé non seulement pour les entrées/sorties numériques mais aussi pour les entrées/sorties analogiques.

Protocole Modbus RTU/ASCII et Modbus TCP

Il existe trois types de Modbus populaires : Modbus RTU, Modbus ASCII et Modbus TCP. Les principes de fonctionnement sont les mêmes pour tous les types de Modbus, comme décrit ci-dessus. Chaque type de Modbus est conçu pour s'adapter à l'environnement réseau : série ou TCP.

  • Schéma du système
Modbus TCP contre Modbus RTU/ASCII
  • Pile de protocoles
modbus tcp vs modbus rtu/ascii

Différences entre Modbus RTU/ASCII et Modbus TCP

Modbus RTU/ASCII Modbus TCP
Over serial (RS-232/RS-422/RS-485) Over TCP
Support single transaction(*) Support multiple transactions(**)
  • (*): Modbus RTU/ASCII ne prend en charge qu'une seule transaction. Cela signifie que lorsqu'un Master envoie une requête Modbus, il DOIT attendre une réponse Modbus ou un délai d'expiration avant d'envoyer une autre requête.
  • (**): Modbus TCP prend en charge plusieurs transactions. Cela signifie que lorsqu'un Master envoie une requête Modbus, il n'a PAS besoin d'attendre une réponse Modbus. Il peut envoyer plusieurs requêtes de manière continue. Pour identifier une réponse correspondant à une requête, Modbus TCP dispose d'un champ supplémentaire, appelé "ID de transaction". La requête et la réponse correspondante ont le même ID de transaction.

Comment utiliser la bibliothèque Modbus Arduino

Grâce à la bibliothèque Modbus, l'utilisation de Modbus avec Arduino est simplifiée.

Nous allons réaliser un tutoriel sur comment utiliser la bibliothèque Modbus. Aimez notre page Facebook pour recevoir les notifications du nouveau tutoriel.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!