Serveur d'impression

Modbus sur WLAN (partie 2) : configuration du logiciel et du module – Serveur d’impression

Le 27 décembre 2021 - 13 minutes de lecture


Le module basé sur Espressif NodeMCU décrit dans cette série vous permet d'utiliser le protocole Modbus sur un WLAN. Nous couvrons maintenant la configuration du logiciel et du module Modbus.

Dans la première partie de cette série d'articles, nous avons traité du matériel du projet. Le module est construit autour d'une carte NodeMCU équipée d'un microcontrôleur ESP8266, avec une carte de base supplémentaire fournissant des ports compatibles avec l'industrie. Après une brève introduction au principe de fonctionnement du protocole Modbus, nous nous intéressons ici au pilotage du module et au logiciel utilisé à cet effet. Le contrôleur de porte d'ascenseur de la première partie est à nouveau utilisé dans l'exemple.

Le protocole Modbus

Le protocole Modbus est largement utilisé dans le secteur automobile. Il fonctionne selon le principe maître/esclave et le maître du bus peut contrôler jusqu'à 246 appareils esclaves. Les nœuds de bus peuvent se voir attribuer des adresses de 1 à 247. L'adresse 0 est réservée aux données de diffusion ; toutes les données envoyées à cette adresse sont reçues par tous les nœuds. La cohérence des paquets de données individuels est assurée par des sommes de contrôle CRC. Les appareils esclaves ont des registres internes avec diverses fonctions. Tableau 1 donne un aperçu des fonctions Modbus.

Tableau 1 : Présentation des fonctions Modbus.
La description Mode Morceaux
Entrée/sortie individuelle « bobine » Lire écrire 1
« Entrées discrètes » individuelles Lecture seulement 1
« Registres d'entrée » (analogique/numérique) Lecture seulement 16
Entrées/sorties « Holding Registers » (analogiques/numériques) Lire écrire 16

Il existe trois variantes du protocole Modbus :

  • Modbus RTU : Transmission binaire sur RS485 (EIA485).
  • Modbus ASCII : transmission de texte en clair sur RS485 (EIA485). C'est moins efficace que la transmission binaire, mais lisible par l'homme. Les commandes peuvent être envoyées à l'aide d'un simple utilitaire de terminal.
  • Modbus TCP : Dans cette variante, les commandes Modbus sont transmises via TCP/IP. C'est généralement via Ethernet, mais avec ce module, c'est via WLAN.

Pour des informations plus détaillées et des descriptions de protocoles, visitez le site Modbus site Internet.

Préparation du module WLAN Modbus

Pour utiliser le module WLAN avec le protocole Modbus, vous devez d'abord charger le firmware requis. Pour cela, retirez la carte NodeMCU de la carte Modbus et connectez-la à un port USB de votre ordinateur. Ouvrez ensuite l'IDE Arduino, configuré comme décrit dans la première partie de cet article. Vous pouvez télécharger le firmware, qui transforme le module en client Modbus, depuis la page du projet Elektor.

Ouvrir le fichier téléchargé OpenPLC_ESP8266_1_0_MUX_V1_1.ino dans l'IDE Arduino (Fichier -> Ouvrir). L'IDE Arduino demandera si le projet doit être déplacé vers le carnet de croquis. Répondez à ceci avec 'Oui'. Si l'IDE crée un nouveau dossier, copiez le fichier d'en-tête (modbus.h) dans le nouveau dossier contenant le ino fichier, de sorte que le compilateur sera en mesure de trouver l'en-tête.

Pour permettre l'accès au module via WLAN, les données d'accès WLAN doivent être modifiées au début du code source (voir Liste 1). Là, vous devez entrer les données d'accès de votre propre WLAN.

Listing 1 : configuration WLAN du module Modbus.

/*********CONFIGURATION DU RÉSEAU*********/

const char *ssid = "";

const char *mot de passe = "";

/******************************************/

Après avoir effectué cette modification, vous pouvez charger le programme dans le module Modbus comme décrit dans la première partie. Le module fonctionne avec DHCP, ce qui signifie qu'une adresse IP lui sera attribuée automatiquement par votre routeur. Vous pouvez vérifier cela dans le firmware du routeur. Alternativement, vous pouvez afficher la sortie du programme sur le moniteur série Arduino IDE (ouvert par l'icône en forme de miroir en haut à droite). Dans la liste déroulante en bas à droite, définissez le débit de données de l'interface sur 115 200 bauds. Liste 2 montre un exemple de la façon de sortir l'adresse IP vers le moniteur série. Pour éviter d'avoir à répéter cette procédure à chaque mise sous tension du module Modbus, vous devez attribuer une adresse IP statique. Tous les routeurs récents autorisent cette option. Dans tous les cas, vous devez noter l'adresse IP du module sortie par le programme afin que vous puissiez accéder au module via WLAN. Si vous ne voyez aucune sortie, appuyez sur le bouton Reset de la carte NodeMCU pour redémarrer le logiciel, car l'adresse IP n'est émise que pendant le processus de démarrage.

Listing 2 : sortie de l'adresse IP du module WLAN Modbus.

Connexion à Vodafone-3980

…….

Wi-Fi connecté

Serveur démarré

Mon IP : 192.168.0.85

Premier test

Pour vérifier si le module Modbus WLAN fonctionne correctement, vous pouvez utiliser l'outil EasyModbus, qui peut être téléchargé depuis SourceForge. EasyModbus fournit un serveur, un client et une bibliothèque. Pour ce test, vous n'avez besoin que du client, qui peut être téléchargé directement. Pour utiliser l'outil, vous devez avoir une version Java installée sur votre PC. Si Java n'est pas encore installé, vous pouvez utiliser le OpenJDK gratuit, qui est très populaire dans la communauté des développeurs et des fabricants et est un composant standard de toutes les distributions Linux. Dans Ubuntu, par exemple, vous pouvez l'installer avec la commande terminal sudo apt installer openjdk-11-jdk.

Pour exécuter le client EasyModbus, entrez la commande java -jar EasyModbusJavaClient.jar. Figure 1 montre la sortie du client EasyModbus (à gauche sous Linux ; à droite sous Windows). Ici, vous devez sélectionner Modbus TCP et entrez l'adresse IP de votre module. Quitter le Adresse de départ mis à 1 et changer le Nombre de valeurs à 4. Si vous cliquez maintenant Lire les entrées discrètes – FC 2, les quatre entrées numériques du module seront lues et affichées. Vous devez appliquer un signal à au moins une des entrées, afin que vous puissiez voir si tout fonctionne comme prévu.

Modbus Over WLAN : Le client EasyModbus lisant les données
Figure 1 : Le client EasyModbus lit les données du module. La version Linux est affichée à gauche et la version Windows à droite.

Le client EasyModbus ne peut lire que les données de Modbus ; il ne peut pas écrire de données. Pour tester l'écriture, vous pouvez utiliser l'exemple de programme décrit ci-dessous. Les données effectivement transmises sont visibles en bas de la fenêtre du client EasyModbus. Cette fonction est très utile pour le débogage. Si le premier test a réussi, vous pouvez maintenant procéder à la programmation du module avec Python.

Installation de la bibliothèque Modbus +

Pour rendre le test plus réaliste, nous utilisons ici le modèle de porte d'ascenseur de la première partie. Nous avons écrit un programme pour le PC qui reçoit les positions des boutons et des fins de course via Modbus afin de transmettre les actions motrices correspondantes (encore via Modbus).

Notre programme Python a besoin d'une bibliothèque pour accéder au Modbus. Cela n'a rien d'inhabituel ; il existe des bibliothèques Modbus pour pratiquement tous les langages de programmation. Si nécessaire, vous pouvez même générer vous-même les séquences de bits des commandes et les envoyer sur le réseau. Cependant, nous ne voulons pas entrer dans cela ici.

Tout d'abord, vous devez vous assurer que le programme d'installation du package Python pépin est à bord, ce qui devrait toujours être le cas avec des installations Python assez récentes. Vous pouvez vérifier cela avec soit $ python -m pip –version sous Linux ou C:> py -m pip –version sous Windows.

Si la pépin l'installateur n'est pas présent, vous pouvez l'installer via Python avec get-pip.py (n'utilisez pas le gestionnaire de packages Linux pour cela) :

wget https://bootstrap.pypa.io/get-pip.py

python get-pip.py

get-pip.py

Installez ensuite la bibliothèque Modbus :

$ python -m pip install -U pymodbusTCP

C:> py -m pip install -U pymodbusTCP

Vous pouvez trouver une documentation complète pour la bibliothèque, ainsi que de nombreux exemples de code.

Exemple de programme

Examinons en détail l'exemple de programme dans Liste 3. La première ligne importe la bibliothèque Modbus. La ligne suivante crée un nouvel objet de connexion afin de communiquer avec un appareil Modbus spécifique. Plusieurs paramètres peuvent être passés pour cela. Dans notre cas, nous passons l'adresse IP de l'appareil cible comme héberger. Le port 502 est le port par défaut pour la communication Modbus TCP. Le paramètre ouverture_auto détermine si la connexion doit être configurée automatiquement ou manuellement. Dans notre exemple, nous avons choisi automatique pour plus de commodité, mais si vous souhaitez avoir un contrôle total sur la configuration de la connexion, vous devez choisir Faux. Avec la configuration manuelle de la connexion, vous disposez de plus d'options pour le contrôle et la gestion des erreurs. Si le paramètre déboguer est réglé sur Vrai, le logiciel affichera toutes les données transmises vers la console. Ceci est très utile lorsque vous recherchez un bogue.

Listing 3 : Exemple de programme tor.py pour le contrôle de porte.

depuis pyModbusTCP.client importer ModbusClient

client = ModbusClient(host="192.168.0.85", port=502, auto_open=True, debug=False)

tandis que (Vrai):

input=client.read_discrete_inputs(0,4)

end_switch_top  = entrées[0]

end_switch_bottom = entrées[1]

push_button_down     = entrées[2]

push_button_up       = entrées[3]

motor_up        = 0

motor_down       = 1

# requête end_switch

if(end_switch_top):

client.write_single_coil(motor_up,False)

print("portail ouvert")

if(end_switch_bottom):

client.write_single_coil(motor_down,False)

print("portail fermé")

# bouton poussoir de demande

if (push_button_up et non end_switch_top) :

client.write_single_coil(motor_up,True)

if (push_button_down et non end-switch_bottom):

client.write_single_coil(motor_down,True)

Utilisant un tandis que boucle, nous exécutons à plusieurs reprises le programme comme décrit dans la première partie. Cela signifie que le programme fonctionne de manière cyclique, comme tous les contrôleurs industriels. Le code à l'intérieur de la boucle est la partie principale du programme, qui lit d'abord les entrées, puis convertit les valeurs d'entrée en variables significatives. Nous définissons également des variables pour les deux sorties numériques. Cela rend les lignes de programme suivantes plus faciles à lire.

Là, vous pouvez voir que le moteur est éteint lorsque les points finaux sont atteints. Un message texte est envoyé à la console afin que vous puissiez voir la position actuelle de la porte sur l'ordinateur. Enfin et surtout, le moteur tourne dans le sens respectif lorsque le bouton Haut ou Bas est enfoncé. Le ET logique entre les fins de course empêche les relais de vibrer lorsque la porte est déjà à un point final.

Pour exécuter le programme, entrez la ligne de commande python tor.py. Comme d'habitude, vous pouvez arrêter le programme avec Ctrl-C.

IHM avancée

Une télécommande pratique avec un retour visuel que vous pouvez adapter à vos propres besoins peut être réalisée avec une variété de frameworks PC. Le programme AdvancedHMI est un logiciel open source permettant de créer des applications d'interface homme-machine (IHM) qui communiquent avec votre API ou d'autres périphériques d'E/S. Ce logiciel diffère des autres packages standard en ce qu'il vous permet de créer des fichiers exécutables au lieu de simplement des configurations interprétées par un moteur d'exécution. Il en résulte des applications très rapides et efficaces.

AdvancedHMI est basé sur le framework Microsoft .NET. Les candidatures sont générées dans Communauté Microsoft Visual Studio 2019, qui est disponible gratuitement. Cela vous permet de créer des IHM de base par glisser-déposer sans avoir à écrire de code. Le framework .NET est utilisé par un grand nombre de développeurs et dispose d'une multitude de réseaux de support. Vous pouvez trouver beaucoup plus de support pour AdvancedHMI que pour tous les autres packages HMI standard combinés.

L'auteur a utilisé cette plate-forme pour générer une interface utilisateur pour contrôler la plinthe. Il montre l'état des entrées et fournit des boutons qui peuvent être utilisés pour commuter les sorties (Figure 2).

Modbus sur WLAN : le logiciel AdvancedHMI
Figure 2 : Le logiciel AdvancedHMI génère des applications d'interface homme-machine.

Les programmes .NET, tels que cette interface utilisateur pour contrôler la plinthe, peuvent également fonctionner sous Linux avec Mono. Il a été testé avec succès sur un Raspberry Pi.

Obtenez le contrôle

Le module Modbus WLAN permet de contrôler facilement les appareils compatibles Modbus à partir d'un PC ou d'un smartphone. Ce module est également un bon projet d'apprentissage si vous souhaitez vous familiariser avec le protocole Modbus. La conception matérielle, cependant, est si robuste et tolérante aux erreurs que vous pouvez également l'utiliser dans vos propres projets ESP8266 si vous souhaitez contrôler et lire des appareils industriels tels que des électrovannes, des moteurs et d'autres types de capteurs ou d'actionneurs.


Commentaires sur Modbus ?

Vous avez des questions techniques ou des commentaires sur Modbus ou cette série d'articles ? Si tel est le cas, veuillez contacter l'auteur à [email protected] ou la rédaction à [email protected]


à propos des auteurs

Josef Bernhardt a développé un intérêt pour l'électronique dès son plus jeune âge. Il a construit sa première radio à cristal à l'âge de douze ans, et a continué avec d'autres circuits. Il a commencé à acquérir de l'expérience en programmation dans les années 1980 avec le Commodore VC20, et il connaît également la programmation en langage assembleur sur le 8088. Il peut se prévaloir de plus de 30 ans d'évolution de l'électronique à l'Université de Ratisbonne, où il a travaillé dans le domaine du développement électronique et logiciel. À l'aide de sa propre installation de production SMD, il met également en œuvre des projets électroniques pour les clients.

Martin Mohr a vu le jour à l'ère des mémoires à noyau magnétique et des commutateurs Strowger, lui permettant de découvrir personnellement toute l'évolution de la technologie informatique moderne. Sa fascination pour tout ce qui clignote remonte à sa prime jeunesse et a été encore renforcée par sa formation en électronique. Après avoir terminé un cursus en informatique, il a travaillé principalement sur le développement d'applications Java, mais le Raspberry Pi a ravivé sa passion pour l'électronique.

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.