Ignorer et passer au contenu

Boutique officielle Eletechsup - OEM / ODM / Stock disponible, livraison dans le monde entier sous 6 à 10 jours

Eletechsup R421B16 Contrôle de relais Modbus RS485

Copie de notre client : 
Carte de relais Modbus contrôlée par Arduino

C'est un sujet un peu ennuyeux, mais je n'ai trouvé personne d'autre qui avait publié quelque chose sur le contrôle de ce type de carte de relais à partir d'un Arduino. J'ai passé beaucoup de temps à essayer de faire fonctionner tout cela, à chercher de la documentation sur la carte de relais et à comprendre comment fonctionnent les bibliothèques Modbus d'Arduino. J'espère que cet Instructable vous fera gagner du temps.

Je travaille sur un projet pour un ami qui a une maison câblée avec des interrupteurs tactiles basse tension dans toute la maison qui allument les lumières et certaines prises. Le système a été installé par lui et son père en 1957. C'était à la pointe de la technologie à l'époque. Après 60 ans, les relais utilisés tombent en panne. À 60 $ chacun, nous avons décidé de les remplacer par une installation différente. En cherchant des relais et des contrôleurs, nous avons opté pour un Arduino Mega et un assortiment de cartes de relais.

Choisir les relais

Nous avions besoin d'environ 32 relais et également de jusqu'à 32 entrées d'interrupteur.

Les cartes de relais que nous avons examinées étaient de 4 types

1. Un relais sur la carte contrôlé par une broche Arduino

2. Les relais pouvaient être contrôlés via le port série, RS232, nécessitant une connexion série pour chaque carte de relais

3. Les relais pouvaient être contrôlés via la connexion Internet sur la carte de relais

4. Les relais pouvaient être contrôlés via RS485 en utilisant le protocole Modbus.

Le numéro un ci-dessus nécessitait presque toutes les broches disponibles sur le Mega sans laisser de place pour l'extension. Le numéro deux nécessiterait moins de broches que le numéro un, mais deux broches pour chaque carte utilisée. Le numéro trois nécessitait l'ajout d'une carte Ethernet pour l'Arduino Mega et rendait le système dépendant du fonctionnement d'Internet. Panne d'Ethernet = maison dans le noir. Le numéro quatre utilisant Modbus permet d'utiliser 2 fils pour contrôler jusqu'à 127 cartes de relais. Il semblait y avoir une grande variété de ces cartes vendues par de nombreux fournisseurs. Modbus est une norme industrielle qui risque d'être présente pendant un certain temps. Arduino possède plusieurs bibliothèques Modbus, donc la majeure partie du travail a déjà été codée.

Le relais est arrivé sans manuel, sans instructions, sans fiche technique et sans assistance technique. Je n'ai trouvé aucune page web ni vidéo sur le contrôle de cette carte à partir d'un Arduino.

J'ai finalement trouvé cette annonce pour la carte de relais. https://eletechsup.com/products/r421b16-16-channel-dc-12v-rs485-relay-module-modbus-rtu-485-remote-control-switch-board-for-plc-ptz-camera-motor?_pos=31&_sid=bf69d07bd&_ss=r

 

En réponse à la deuxième question, ce lien a été fourni vers un fichier compressé .rar qui contient un manuel.

https://485io.com/eletechsup/R421B16-1.rar

 

 Si quelqu'un connaissait le protocole Modbus sur le bout des doigts, cela aurait pu suffire. Cela a permis de vérifier comment les interrupteurs DIP étaient utilisés pour définir l'adresse esclave Modbus. Cela a donné des exemples de codes à envoyer à la carte de relais, y compris les sommes de contrôle. Cela a indiqué que les codes étaient envoyés en HEX et que la taille de ces codes était de 8 ou 16 bits.

Matériel

Carte de relais utilisant le contrôle Modbus RS485. Elles sont disponibles en cartes de 4, 8, 16 et 32 relais.

 https://eletechsup.com/products/r421b16-16-channel-dc-12v-rs485-relay-module-modbus-rtu-485-remote-control-switch-board-for-plc-ptz-camera-motor?_pos=31&_sid=bf69d07bd&_ss=r

 

Étape 1 : Assembler votre matériel

Assembler votre matériel

Utilisez l'image ci-dessus pour raccorder votre matériel. L'alimentation de la carte de relais n'est pas montrée.

Arduino Mega vers carte RS485.

5V vers VCC

Gnd vers Gnd

RX (broche 0) vers TX

TX (broche 1) vers RX

Connexions de RS485 à la carte de relais.

A+ vers A+

B- vers B-

GND n'est pas connecté à moins que la distance entre les appareils ne soit longue, auquel cas il serait connecté à la terre

La carte de relais a besoin de sa propre alimentation qui correspond à la carte commandée. 5VDC, 12VDC ou 24VDC

Des appareils Modbus supplémentaires avec des adresses différentes peuvent être ajoutés. Tous les A+ sont reliés ensemble et tous les B- sont reliés ensemble.

Réglages des interrupteurs DIP sur la carte de relais.

L'interrupteur un devrait être en position On et les 5 restants en position off pour le code fourni. Si vous ajoutez d'autres cartes de relais, ajustez les interrupteurs DIP selon le manuel.

Étape 2 : Exemple de code

Ce code est exécuté et téléchargé sur l'Arduino Mega depuis le programme Arduino IDE.

Les instructions pour télécharger et démarrer avec ce logiciel se trouvent ici. https://www.arduino.cc/en/Guide

Ce code nécessite également la bibliothèque ArduinoModbus. Celle-ci peut être installée depuis le logiciel Arduino IDE.

https://www.arduino.cc/en/guide/libraries

Remplacez la bibliothèque Bridge dans l'exemple par ArduinoModbus. Si on vous demande d'installer d'autres bibliothèques requises, cliquez sur oui. Cela ajoutera également la bibliothèque RS485.

Téléchargez le code d'exemple depuis cette page.

Dans le logiciel Arduino, choisissez Fichier>>Ouvrir et trouvez le code téléchargé.

Dans le logiciel Arduino, sélectionnez Outils>>Carte et trouvez Arduino Mega

Branchez l'Arduino Mega en connectant un câble USB de votre ordinateur au Mega

Dans le logiciel Arduino, sélectionnez Outils>>Port et sélectionnez le port pour le Mega

À ce stade, vous devriez pouvoir compiler et télécharger le programme d'exemple sur le Mega.

Remarque importante.

Lorsque vous téléchargez sur le Mega, la carte RS485 doit être déconnectée.

La bibliothèque ArduinoModbus partage le port série avec le port série intégré et il y a un conflit lors du téléchargement. Il y a un certain nombre d'autres ports série matériels sur un Mega mais je n'ai pas pu faire utiliser ceux-ci à la bibliothèque ArduinoModbus pour éviter ce problème.

Explication du code.

#include // Cette ligne ajoute le code de la bibliothèque à notre code

byte gSlaveID = 0x01;

// définit l'adresse du code HEX de la carte de relais dans notre code. Cela correspond à ce qui est réglé sur les interrupteurs DIP sur la carte de relais et peut être un nombre entre 1 et 127. L'adresse zéro est réservée pour le maître qui dans ce cas est l'Arduino Mega

// démarrer le client Modbus RTU dans la fonction setup() du code
if (!ModbusRTUClient.begin(9600)) {

Serial.println("Échec du démarrage du client Modbus RTU !");

La carte que j'ai utilisée était configurée pour parler à 9600 bauds. Cela peut être différent pour un autre appareil Modbus. Arduino utilise 8 bits, parité aucune, bit d'arrêt 1 par défaut et cette carte de relais aussi. Si votre carte est différente, consultez cette page pour d'autres configs. https://www.arduino.cc/reference/en/language/funct...

Le reste du code dans la boucle() se contente d'allumer chacun des 16 relais un par un puis de les éteindre un par un puis de basculer 16 relais sélectionnés aléatoirement, en les allumant s'ils sont éteints et en les éteignant s'ils sont allumés.

Notez que cette carte ne répond pas à l'écriture sur les bobines directement comme c'est courant avec le protocole Modbus mais écrit plutôt une valeur dans un registre de maintien. J'ai utilisé seulement trois valeurs dans cet exemple pour allumer, éteindre ou basculer un relais. Il y a plusieurs autres options listées dans le manuel. Les registres de maintien peuvent également être lus mais je n'ai pas eu besoin de le faire et je n'ai pas inclus cela dans cet exemple.

ModbusRTUClient.holdingRegisterWrite(gSlaveID, i, 0x0100)

Dans la ligne ci-dessus gSlaveID était réglé sur un, i est un nombre entre un et 16 et se réfère au relais à être contrôlé. Le 0x0100 est le code pour dire à la carte d'allumer le relais, 0x0200 est utilisé pour allumer le relais et 0x0300 bascule le relais à l'opposé de ce qu'il est actuellement.

J'ai essayé ce code d'exemple en utilisant un Arduino UNO et il s'est compilé mais avait un avertissement de faible mémoire. Après l'avoir téléchargé, il a imprimé juste quelques lettres sur le moniteur série et a planté. Mon hypothèse est que la bibliothèque ArduinoModbus est trop grande pour la mémoire disponible sur l'UNO.

Un sketch Arduino supplémentaire a été ajouté qui utilise le code modbus pour contrôler les lumières et les prises dans une maison construite dans les années 1950 qui a des interrupteurs basse tension. Les relais tombaient en panne donc tout le système a été remplacé en utilisant ce code.


Retour au blog

Laisser un commentaire