Direkt zum Inhalt

Eletechsup Offizieller Store - OEM / ODM / Lagerware weltweit in 6-10 Tagen

Eletechsup R421B16 Modbus-RS485-Relaistuerung

Kopie von unserem Kunden: 
Arduino-gesteuertes Modbus-Relaisboard

Das ist ein eher trockenes Thema, aber ich konnte niemanden finden, der etwas darüber gepostet hatte, wie man diese Art von Relaisboard mit einem Arduino steuert. Ich habe viel Zeit damit verbracht, das Ganze zum Laufen zu bringen, Dokumentationen für das Relaisboard zu finden und herauszufinden, wie die Arduino-Modbus-Bibliotheken funktionieren. Ich hoffe, dass dieses Instructable Ihnen etwas Zeit spart.

Ich arbeite an einem Projekt für einen Freund, dessen Haus mit Niederspannungs-Tastern verdrahtet ist, die überall im Haus die Beleuchtung und einige geschaltete Steckdosen einschalten. Das System wurde 1957 von ihm und seinem Vater installiert. Damals war es hochmodern. Nach 60 Jahren fallen die verwendeten Relais aus. Da sie 60 $ pro Stück kosten, haben wir beschlossen, sie durch eine andere Lösung zu ersetzen. Bei der Suche nach Relais und Steuerungen haben wir uns für einen Arduino Mega und eine Auswahl an Relaisboards entschieden.

Auswahl der Relais

Wir benötigten etwa 32 Relais und außerdem bis zu 32 Schaltereingänge.

Die Relaisboards, die wir uns angesehen haben, gab es in 4 Varianten:

1. Ein Arduino-Pin steuerte ein Relais auf dem Board

2. Die Relais konnten über den seriellen Port RS232 gesteuert werden, was für jedes Relaisboard eine eigene serielle Verbindung erforderte

3. Die Relais konnten über die Internetverbindung auf dem Relaisboard gesteuert werden

4. Die Relais konnten über RS485 mit dem Modbus-Protokoll gesteuert werden.

Variante 1 erforderte fast alle verfügbaren Pins des Mega ohne Spielraum für Erweiterungen. Variante 2 benötigte weniger Pins als Variante 1, aber zwei Pins für jedes verwendete Board. Variante 3 erforderte das Hinzufügen eines Ethernet-Boards für den Arduino Mega und machte das System von einer funktionierenden Internetverbindung abhängig. Ethernet-Ausfall = dunkles Haus. Variante 4 mit Modbus ermöglicht die Verwendung von 2 Drähten zur Steuerung von bis zu 127 Relaisboards. Es schien eine große Vielfalt dieser Boards bei ziemlich vielen Anbietern erhältlich zu sein. Modbus ist ein Industriestandard, der wahrscheinlich noch eine Weile Bestand haben wird. Arduino verfügt über mehrere Modbus-Bibliotheken, sodass der Großteil der Arbeit bereits programmiert ist.

Das Relais kam ohne Handbuch, ohne Anleitung, ohne Datenblatt und ohne technischen Support. Ich habe keine Webseiten oder Videos zur Steuerung dieses Boards mit einem Arduino gefunden.

Schließlich fand ich dieses Angebot für das Relaisboard. 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

 

Als Antwort auf die zweite Frage wurde ein Link zu einer .rar-komprimierten Datei bereitgestellt, die ein Handbuch enthält.

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

 

 Wenn jemand das Modbus-Protokoll in- und auswendig kannte, hätte das vielleicht gereicht. Es bestätigte, wie die DIP-Schalter verwendet wurden, um die Modbus-Slave-Adresse einzustellen. Es enthielt Beispiele für Codes, die an das Relaisboard gesendet werden müssen, einschließlich Prüfsummen. Es wies darauf hin, dass die Codes als HEX gesendet wurden und die Größe dieser Codes entweder 8 oder 16 Bit betrug.

Materialien

Relaisboard mit RS485-Modbus-Steuerung. Diese sind als 4-, 8-, 16- und 32-Relais-Boards erhältlich.

 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

 

Schritt 1: Hardware zusammenbauen

Hardware zusammenbauen

Verwenden Sie das Bild oben, um Ihre Hardware anzuschließen. Die Stromversorgung des Relaisboards ist nicht abgebildet.

Arduino Mega an RS485-Board.

5V an VCC

Gnd an Gnd

RX (Pin 0) an TX

TX (Pin 1) an RX

Verbindungen vom RS485 zum Relaisboard.

A+ an A+

B- an B-

GND wird nicht verbunden, es sei denn, der Abstand zwischen den Geräten ist groß, dann wird es mit der Erdung verbunden

Das Relaisboard benötigt eine eigene Stromversorgung, die zur bestellten Platine passt. 5VDC, 12VDC oder 24VDC

Weitere Modbus-Geräte mit unterschiedlichen Adressen können hinzugefügt werden. Alle A+ werden miteinander verbunden und alle B- miteinander verbunden.

DIP-Schalter-Einstellungen auf dem Relaisboard.

Schalter eins sollte in der Position On stehen und die restlichen 5 in der Position Off für den bereitgestellten Code. Wenn zusätzliche Relaisboards hinzugefügt werden, passen Sie die DIP-Schalter gemäß dem Handbuch an.

Schritt 2: Beispielcode

Dieser Code wird in der Arduino IDE ausgeführt und auf den Arduino Mega hochgeladen.

Anweisungen zum Herunterladen und Einsteigen in diese Software finden Sie hier. https://www.arduino.cc/en/Guide

Dieser Code erfordert auch die ArduinoModbus-Bibliothek. Diese kann innerhalb der Arduino IDE installiert werden.

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

Ersetzen Sie die Bridge-Bibliothek im Beispiel durch ArduinoModbus. Wenn Sie gefragt werden, andere erforderliche Bibliotheken zu installieren, klicken Sie auf Ja. Dadurch wird auch die RS485-Bibliothek hinzugefügt.

Laden Sie den Beispielcode von dieser Seite herunter.

Wählen Sie in der Arduino-Software Datei>>Öffnen und finden Sie den heruntergeladenen Code.

Wählen Sie in der Arduino-Software Tools>>Board und finden Sie Arduino Mega

Schließen Sie den Arduino Mega an, indem Sie ein USB-Kabel von Ihrem Computer zum Mega verbinden

Wählen Sie in der Arduino-Software Tools>>Port und wählen Sie den Port für den Mega

An diesem Punkt sollten Sie das Beispielprogramm auf den Mega kompilieren und hochladen können.

Wichtiger Hinweis.

Beim Hochladen auf den Mega muss das RS485-Board getrennt werden.

Die ArduinoModbus-Bibliothek teilt sich den seriellen Port mit dem eingebauten seriellen Port und es gibt einen Konflikt beim Hochladen. Es gibt eine Reihe anderer Hardware-Serieller-Ports auf einem Mega, aber ich konnte die ArduinoModbus-Bibliothek nicht dazu bringen, diese zu verwenden, um dieses Problem zu vermeiden.

Erklärung des Codes.

#include // Diese Zeile fügt den Code aus der Bibliothek in unseren Code ein

byte gSlaveID = 0x01;

// setzt die HEX-Code-Adresse des Relaisboards in unserem Code. Dies stimmt mit dem überein, was auf den DIP-Schaltern des Relaisboards eingestellt ist, und kann eine Zahl zwischen 1 und 127 sein. Adresse Null ist für den Master reserviert, der in diesem Fall der Arduino Mega ist

// startet den Modbus-RTU-Client in der setup()-Funktion des Codes
if (!ModbusRTUClient.begin(9600)) {

Serial.println("Modbus-RTU-Client konnte nicht gestartet werden!");

Das von mir verwendete Board war so eingestellt, dass es mit 9600 Baud kommuniziert. Das könnte bei einem anderen Modbus-Gerät anders sein. Arduino verwendet standardmäßig 8 Bit, keine Parität und 1 Stoppbit, und das gilt auch für dieses Relaisboard. Wenn Ihr Board anders ist, beachten Sie diese Seite für andere Konfigurationen. https://www.arduino.cc/reference/en/language/funct...

Der Rest des Codes in der loop() schaltet einfach jedes der 16 Relais nacheinander ein, dann schaltet er sie nacheinander aus und dann schaltet er 16 zufällig ausgewählte Relais um, indem er sie einschaltet, wenn sie ausgeschaltet sind, und ausschaltet, wenn sie eingeschaltet sind.

Beachten Sie, dass dieses Board nicht auf direktes Schreiben auf die Spulen reagiert, wie es beim Modbus-Protokoll üblich ist, sondern stattdessen einen Wert in ein Halterregister schreibt. Ich habe in diesem Beispiel nur drei Werte verwendet, um ein Relais einzuschalten, auszuschalten oder umzuschalten. Es gibt mehrere weitere Optionen, die im Handbuch aufgeführt sind. Die Halterregister können auch gelesen werden, aber ich hatte keinen Bedarf dafür und habe es in diesem Beispiel nicht aufgenommen.

ModbusRTUClient.holdingRegisterWrite(gSlaveID, i, 0x0100)

In der obigen Zeile wurde gSlaveID auf eins gesetzt, i ist eine Zahl zwischen eins und 16 und bezieht sich auf das zu steuernde Relais. 0x0100 ist der Code, um dem Board zu sagen, das Relais einzuschalten, 0x0200 wird verwendet, um das Relais auszuschalten, und 0x0300 schaltet das Relais in den entgegengesetzten Zustand um.

Ich habe diesen Beispielcode mit einem Arduino UNO ausprobiert und er ließ sich kompilieren, aber es gab eine Warnung wegen zu wenig Speicher. Nach dem Hochladen wurden nur ein paar Buchstaben im Seriellen Monitor ausgegeben und dann starb er. Meine Vermutung ist, dass die ArduinoModbus-Bibliothek zu groß für den auf dem UNO verfügbaren Speicher ist.

Ein zusätzlicher Arduino-Sketch wurde hinzugefügt, der den Modbus-Code verwendet, um die Beleuchtung und Steckdosen in einem in den 1950er Jahren erbauten Haus mit Niederspannungsschaltern zu steuern. Die Relais fielen aus, daher wurde das gesamte System mit diesem Code ersetzt.


Zurück zum Blog

Hinterlasse einen Kommentar