Communication Modbus entre l’hôte et le Smart Display
Afin de faciliter la prise en main des Smart Display WINSTAR et de mieux comprendre leur fonctionnement, nous proposons régulièrement des projets de démonstration pratiques couvrant différents scénarios d’application. Dans cet article, nous présentons un nouvel exemple basé sur Modbus, conçu pour permettre aussi bien aux débutants qu’aux développeurs expérimentés d’en comprendre rapidement les principes fondamentaux.
Modbus est largement utilisé dans le domaine de l’automatisation industrielle pour assurer la communication avec différents équipements et capteurs ainsi que leur pilotage. Dans cette application, une carte Arduino est utilisée comme contrôleur hôte pour l’intégration du système. Via Modbus, l’Arduino exploite différents capteurs et boutons de commutation pour piloter le Smart Display, le Gauge, l’Indicator et les LED. Cette démonstration utilise une carte Arduino Mega 2560 équipée d’un shield RS485 pour communiquer avec un Smart Display via Modbus.
Le programme montre comment lire les valeurs des capteurs, changer de page d’affichage et commander les LED en fonction des valeurs mesurées à l’aide des registres Modbus.

Schéma fonctionnel du système
Les composants suivants sont nécessaires pour cette application :
- Smart Display 7 pouces avec Modbus
- Arduino Mega 2560
- Shield RS485 Modbus pour Arduino Mega 2560
- Arduino IDE v2.0.4
- Dongle Modbus RS485
- Bouton physique
- Capteur d’angle rotatif à résistance variable (Variable Resistor / Rotary Angle Sensor)
- LED
- GUI Builder v0.4.2 ou version ultérieure
La démonstration se déroule en trois étapes :
- Concevoir le projet de démonstration dans GUI Builder.
- Compiler et charger le projet.
- Programmer l’hôte Arduino.
Concevoir le projet de démonstration dans GUI Builder
Commencez par ouvrir une version à jour de GUI Builder et créez un nouveau projet. Saisissez le nom du projet, puis vérifiez le dossier de destination sélectionné automatiquement par défaut. Sélectionnez ensuite le type d’appareil correspondant au Smart Display 7 pouces utilisé dans cette démonstration, puis choisissez le protocole de communication. Conservez l’orientation de l’écran en mode paysage par défaut, sélectionnez « Blank » comme UI Template, puis cliquez sur « Create » pour créer le projet, comme illustré ci-dessous.

Une fois le projet créé, la page suivante s’affiche.

Le scénario de démonstration nécessite l’ajout d’une deuxième page. Pour cela, cliquez sur le bouton « Page », puis sur le bouton « + ».

Un arrière-plan personnalisé peut être sélectionné dans le panneau Resource.

Le style d’arrière-plan peut également être sélectionné directement dans la section Page.

Revenez ensuite à la première page et accédez à la section Controls. Selon le scénario de démonstration, sélectionnez le Toggle Button, puis faites-le glisser dans la zone de mise en page. Procédez de la même manière pour ajouter les widgets Gauge et Indicator.

Compiler et charger le projet
Après avoir créé les deux pages et ajouté les widgets Toggle Button, Gauge et Indicator sur la première page, le projet peut être compilé et chargé sur le Smart Display. Accédez à la section Page Info, cliquez sur « Device », puis sélectionnez « Device Properties ». Vérifiez le protocole utilisé, sélectionnez le port COM et configurez la vitesse de transmission. Cliquez ensuite sur « Connect to device » pour établir la connexion avec le Smart Display. Enfin, cliquez sur « Upload » pour charger le projet, comme illustré ci-dessous. Attendez que le processus de chargement soit terminé.

Une fois le chargement du projet terminé, cliquez sur « OK », comme illustré ci-dessous.

Une fois le chargement terminé, l’écran de démarrage s’affiche comme illustré ci-dessous.

Après l’écran de démarrage, le Smart Display passe automatiquement à la première page du projet. La compilation et le chargement du projet via GUI Builder sont alors terminés, comme illustré ci-dessous.

Programmer l’hôte Arduino
La figure ci-dessous présente les adresses de registre et les principales définitions utilisées dans le programme Arduino IDE. Le programme commence par définir les broches du bouton physique, du capteur d’angle rotatif à résistance variable et des LED. La communication Modbus est ensuite initialisée à l’aide de la bibliothèque ModbusMaster. Les adresses des registres Modbus nécessaires au changement de page ainsi qu’au contrôle des widgets Indicator, Gauge et Toggle Button sont également définies.

Pour mieux comprendre le processus de communication, consultez la section Test Device ou Simulator du journal de communication de GUI Builder. Elle permet d’observer les échanges entre le dispositif hôte et le Smart Display via Modbus RS485.
La figure ci-dessous présente les données du journal de communication du « Toggle Button ». Elles permettent d’identifier l’adresse utilisée pour accéder à ce widget sur le Smart Display. Le deuxième octet du champ Data Byte contient la valeur hexadécimale 00 06, qui correspond à l’adresse du Toggle Button. Convertie en décimal, cette valeur est égale à 6. Cette adresse peut être utilisée pour écrire des données dans le widget. Dans cette application, le Toggle Button est toutefois utilisé pour lire des données provenant du Smart Display. L’adresse de registre « 7 » est donc utilisée pour lire son état.

Pourquoi l’adresse de registre « 7 » est-elle utilisée pour lire l’état du Toggle Button ? Pour plus de détails sur l’affectation des registres et le processus de communication, consultez la fiche technique du Smart Display Modbus. L’extrait ci-dessous indique les adresses utilisées par le premier objet (widget), le Toggle Button.

La figure suivante présente les données du journal de communication du « Gauge ». Elles permettent d’identifier l’adresse du widget Gauge. Le deuxième octet du champ Data Byte contient la valeur hexadécimale 00 6A, qui correspond à l’adresse du Gauge. Convertie en décimal, cette valeur est égale à 106. Cette adresse peut être utilisée pour écrire des données dans le widget Gauge.

La figure suivante présente les données du journal de communication de l’« Indicator ». Elles permettent d’identifier l’adresse du widget Indicator. Le deuxième octet du champ Data Byte contient la valeur hexadécimale 00 CE, qui correspond à l’adresse de l’Indicator. Convertie en décimal, cette valeur est égale à 206. Cette adresse peut être utilisée pour écrire des données dans le widget Indicator.

La constante ADC_REF est définie à 5 V et représente la tension de référence de l’ADC (convertisseur analogique-numérique). GROVE_VCC est définie à 5 et correspond à la tension VCC de l’interface Grove utilisée dans le circuit. La constante FULL_ANGLE est définie à 300 et représente l’angle de rotation maximal du capteur utilisé dans cette application, exprimé en degrés.

Les variables nécessaires et leurs types de données sont ensuite déclarés et initialisés à zéro.

Les modes des broches et les paramètres des composants externes, tels que le bouton physique et les LED, sont ensuite configurés. La vitesse de transmission de la communication série est également définie, comme illustré ci-dessous.

La figure suivante présente la définition de la fonction « ChangePageFunction ». La fonction « writeSingleRegister » est utilisée pour écrire les données dans le registre Modbus correspondant.

La figure suivante montre le traitement de la valeur du capteur d’angle rotatif à résistance variable (Variable Resistor / Rotary Angle Sensor). Lorsque l’hôte Arduino détecte une variation de la valeur du capteur, il transmet cette valeur au Smart Display via Modbus afin de mettre à jour le Gauge. Lorsque la valeur du Gauge est inférieure à 120, la LED connectée à la broche 13 reste éteinte et l’Indicator s’affiche en vert. Lorsque la valeur atteint ou dépasse 120, la LED s’allume et l’Indicator passe au rouge.

La figure suivante montre le traitement de l’état du bouton physique. Lorsque l’hôte Arduino détecte un changement d’état du bouton, il transmet la valeur correspondante au Smart Display via Modbus afin de changer la page affichée.

La figure suivante montre comment l’hôte Arduino lit l’état du Toggle Button depuis le Smart Display via Modbus. En fonction de la valeur reçue, la LED connectée à la broche 12 est allumée ou éteinte.

Une partie importante du programme concerne l’utilisation des fonctions « writeSingleRegister » et « readHoldingRegisters ». La fonction « writeSingleRegister » permet d’écrire des données dans les registres du Smart Display, tandis que « readHoldingRegisters » permet de lire les données provenant du Smart Display. Lors de la communication avec des widgets actifs tels que le Gauge, il est également nécessaire de prévoir un délai approprié entre les opérations Modbus. Après l’envoi d’une requête et la réception de la réponse correspondante, l’opération suivante peut être exécutée. Le programme intègre donc des délais entre les opérations de lecture et d’écriture.

Une fois le programme vérifié et chargé avec succès via Arduino IDE, les différents scénarios de démonstration peuvent être exécutés. Lorsque le Toggle Button est sur OFF, la LED externe connectée à la broche 12 est également éteinte. Lorsque le Toggle Button passe sur ON, la LED s’allume immédiatement, comme illustré ci-dessous.

Dans ce scénario de démonstration, le Gauge est piloté par le capteur d’angle rotatif à résistance variable. Lorsque la valeur du Gauge est inférieure à 120, l’Indicator s’affiche en vert et la LED connectée à la broche 13 reste éteinte. Lorsque la valeur atteint ou dépasse 120, l’Indicator passe au rouge et la LED connectée à la broche 13 s’allume, comme illustré ci-dessous.

Dans ce scénario, le bouton physique permet également de passer d’une page à l’autre. Lors du premier appui, le Smart Display passe à la deuxième page. Un nouvel appui permet de revenir à la première page, comme illustré ci-dessous.

Le projet de démonstration sur le Smart Display 7 pouces est maintenant terminé. Il utilise différents capteurs et des LED pour changer de page à l’aide d’un bouton physique et piloter le Gauge, l’Indicator ainsi que les LED externes. Pour télécharger le programme et obtenir davantage d’informations sur ce projet de démonstration, consultez le programme de démonstration sur GitHub.
Remarque : pour plus d’informations sur le Modbus RS485 Shield utilisé dans ce projet de démonstration, consultez la documentation du Modbus RS485 Shield. La configuration matérielle réelle est présentée ci-dessous.

Conclusion
Dans l’ensemble, ce programme montre concrètement comment utiliser une carte Arduino et le protocole Modbus pour communiquer avec un Smart Display et piloter différents éléments du système. Il illustre notamment la lecture des valeurs de capteurs, le changement de page d’affichage ainsi que la commande des Indicators et des LED à l’aide des registres Modbus. Cet exemple constitue ainsi une introduction pratique à la communication Modbus avec un Smart Display, aussi bien pour les développeurs débutants que pour ceux qui souhaitent approfondir son intégration dans leurs applications.