Maîtriser Modbus sur Arduino : Guide étape par étape
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Shield RS422 / RS485 professionnel pour Arduino | 1 |
| Convertisseur USB vers RS485 | 1 |
| Plaque d'essai (breadboard) | 1 |
| LED (générique) | 1 |
| Résistance 10 kΩ | 1 |
| Résistance 221 Ω | 1 |
| Fils de connexion (jumper wires) | 1 |
| Bouton poussoir 12 mm (SparkFun) | 1 |
Applications et services en ligne
- Arduino IDE
- Modbustester
À propos de ce projet
Modbus, une norme de communication série, est devenu un protocole de communication standard de facto et constitue désormais un moyen couramment disponible pour connecter des appareils électroniques industriels. Dans Modbus RTU et Modbus ASCII, la couche physique utilisée est le RS485. Il est possible d'utiliser un Arduino comme esclave (et avec certaines restrictions aussi comme maître) dans des applications Modbus, mais une interface RS485 est nécessaire. Notre shield RS422/RS485 est un shield de communication série entièrement isolé galvaniquement, conçu pour être utilisé avec l'Arduino UNO et d'autres cartes compatibles comme l'Arduino 101, STM Nucleo... Ce shield est le choix idéal pour ce type d'applications.
L'objectif de ce document est de montrer comment créer, avec un Arduino UNO, un périphérique esclave Modbus simple. Nous utiliserons un PC comme maître Modbus.
Outils et matériaux
- Arduino UNO
- Shield RS485 pour Arduino
- Adaptateur RS485-USB pour la connexion au PC (ou un modèle moins cher)
Optionnel
- Plaque d'essai (breadboard)
- Bouton poussoir
- LED rouge
- Résistance 220 Ω
- Résistance 10 kΩ
- Fils de connexion
Logiciels
- Arduino IDE
- Modbustester
Câblage RS485
Le câblage est très simple. Il suffit de connecter les bornes A et B du shield aux lignes A et B du système Modbus. Les bornes Y et Z ne sont pas utilisées pour ce type d'application. Pour de longues distances, il est recommandé d'utiliser des paires torsadées pour A et B.
Câblage Arduino (Optionnel)
Il est recommandé d'ajouter une LED et un bouton à l'Arduino pour visualiser certains effets de la communication Modbus. C'est optionnel et non indispensable.
Réglage des commutateurs DIP
Le shield RS422/RS485 comporte 3 banques de commutateurs DIP. Vous devez les régler pour Modbus comme indiqué sur l'image ci-dessous.
- Commutateur 1 : 1-OFF, 2-ON, 3-ON, 4-OFF
- Commutateur 2 : 1-OFF, 2-OFF, 3-ON, 4-ON
- Commutateur 3 : 1-OFF ou ON*, 2-OFF, 3-OFF, 4-OFF
* Selon la position du shield RS422/RS485 sur la ligne Modbus, vous devez activer ou désactiver la résistance de terminaison. Mettez la résistance sur ON uniquement si le shield se trouve à une extrémité de la ligne de bus. Dans tous les autres cas, mettez la résistance de terminaison sur OFF.
Réglage des jumpers
On trouve 3 zones de jumpers sur le shield. Le plus important est le jumper JP1 pour la tension d'alimentation. L'Arduino UNO fonctionne en 5V en interne. Vous devez placer ce jumper sur la position 5V (pour les cartes 3.3V comme l'Arduino 101, sur la position 3.3V).
Ensuite, réglez les jumpers pour les ports de communication dans le coin supérieur gauche comme sur l'image ci-dessus. L'UART interne sur les ports 0 et 1 sera ainsi connecté à l'interface RS485 du shield.
Enfin, nous devons régler le jumper pour le port de contrôle RX/TX. Nous n'utilisons pas ce jumper car la commutation automatique RX/TX est configurée.
Installation du logiciel Modbus Tester sur PC
Nous utiliserons le PC comme maître Modbus. Vous devez télécharger Modbustester. Décompressez l'archive zip dans un nouveau répertoire sur votre disque dur. Ouvrez le logiciel et modifiez les champs indiqués comme sur l'image ci-dessous. Vous devez connecter l'adaptateur USB-RS485 avant de choisir le bon port COM pour cet adaptateur dans Modbustester.
Logiciel Arduino
Chargez le firmware dans l'Arduino IDE pour la compilation et la programmation.
Testez votre travail
C'est maintenant le moment de tester votre travail !
Vous pouvez appuyer sur le bouton "Read" dans Modbustester. Cette commande lira 8 octets de la mémoire de notre nouvel esclave. À l'adresse 400008, vous trouverez l'état du bouton. Les adresses 400001 à 400006 contiennent les valeurs des ports ADC.
Avec le bouton "Write", vous pouvez manipuler les registres de l'esclave. Vous pouvez entrer à l'adresse 400007 un 0 ou un 1 pour allumer ou éteindre la LED.
Code
Exemple de code pour Arduino UNO
/*
* Programme de test pour Arduino RS422/RS485 Shield
* Version 1.0
* Copyright (C) 2018 Hartmut Wendt www.zihatec.de
* (basé sur les sources de https://github.com/angeloc/simplemodbusng)
* Ce programme est un logiciel libre...
*/
#include <SimpleModbusSlave.h>
#define ledPin 12 // led intégrée
#define buttonPin 7 // bouton poussoir
// Registres de l'esclave
enum {
ADC0, ADC1, ADC2, ADC3, ADC4, ADC5,
LED_STATE, BUTTON_STATE, TOTAL_ERRORS,
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE];
void setup() {
modbus_configure(9600, 1, 6, TOTAL_REGS_SIZE, 0);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
for (byte i = 0; i < 6; i++) {
holdingRegs[i] = analogRead(i);
delayMicroseconds(50);
}
byte buttonState = digitalRead(buttonPin);
holdingRegs[BUTTON_STATE] = buttonState;
byte ledState = holdingRegs[LED_STATE];
if (ledState) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
holdingRegs[LED_STATE] = 0;
}
}
Schémas
Câblage de quelques composants de test sur l'Arduino
Processus de fabrication
- Maîtriser les Files C# (Queue) : Enqueue, Dequeue et Opérations Premier Entré Premier Sorti
- Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega
- Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
- Unopad : contrôleur MIDI Arduino fluide pour Ableton Live
- Capteur d'obstacle IR simple avec Arduino — LED IR + Photodiode
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Volant Joystick Arduino Personnalisé pour Jeux Vidéo
- Utiliser une thermistance facilement : Guide étape par étape Arduino
- Générer des Sons Musicaux avec Arduino : Guide Pas à Pas