Forum: Mikrocontroller und Digitale Elektronik Modbus RS485 RTU - China Relais Board


von Jan H. (janiiix3)


Lesenswert?

Moin Moin,

hat sich jemand schon mal dieses Board vorgenommen?

https://de.aliexpress.com/item/Modbus-RTU-4-Way-Relay-Module-DIY-STM8S103-System-4-Road-Input-485-Communication/32704810964.html

Irgendwie passen diese ganzen Befehle nicht zu den Relais.
Bis jetzt konnte ich nur 3 Relais zum zucken bringen mit diesen 
Befehlen..
1
Das 1. Relais offen
2
01 05 00 01 01 00 9d 9a
3
Relais 1 geschlossen
4
01 05 00 01 00 00 9c 0a
5
Das 2. Relais offen
6
01 05 00 02 01 00 6d 9a
7
2 Relais aus
8
01 05 00 02 00 00 6c 0a
9
Das 3. Relais offen
10
01 05 00 03 01 00 3c 5a
11
3 Relais aus
12
01 05 00 03 00 00 3d ca
13
4 Relais offen
14
01 05 00 04 01 00 8d 9b
15
4 Relais aus
16
01 05 00 04 00 00 8c 0b

Wenn ich:
1
Alles aus
2
01 05 00 ff 00 00 fd fa
3
Alles Licht
4
01 05 00 ffff ff fc 4a
Gehen alle. Also das 4´te Relais scheint zu funktionieren. Nur eben 
nicht der Befehl.

Jemand das gleiche Problem gehabt?

von TestX (Gast)


Lesenswert?

Aus deinem post wird nicht klar was  funktioniert und was nicht.

von Jan H. (janiiix3)


Lesenswert?

Sorry.
Mit den Befehlen sollte man Relais 1-4 ansteuern können.
Jedoch kann Ich nur 1-3 ansteuern. Der letzte Befehl scheint fehlerhaft 
zu sein.

von TestX (Gast)


Lesenswert?

Checksumme falsch berechnet ?

von Jan H. (janiiix3)


Lesenswert?

TestX schrieb:
> Checksumme falsch berechnet ?

Ich weiß nicht was die da gemacht haben. Überall der selbe Mist.
Die haben da irgendwas durcheinander gebracht.

Habe es aber herausfinden können. Falls es noch jemand braucht.
1
Relais 1 schalten: 01 05 00 00 01 00 CC 5A | ausschalten: 01 05 00 00 00 00 CD CA
2
3
Relais 2 schalten: 01 05 00 01 01 00 9d 9a | ausschalten: 01 05 00 01 00 00 9c 0a
4
5
Relais 3 schalten: 01 05 00 02 01 00 6d 9a | ausschalten: 01 05 00 02 00 00 6c 0a
6
7
Relais 4 schalten: 01 05 00 03 01 00 3c 5a | ausschalten: 01 05 00 03 00 00 3d ca

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Die haben da irgendwas durcheinander gebracht.

Ja, das ist wirr.

Hier mal der Protokollaufbau:

01 ist die Geräteadresse

05 steht für Write single coil

Die nächsten zwei Bytes sind die Registeradresse (MSB first), d.h. die 
Nummer Deiner Relais.

Die darauf folgenden zwei Bytes dürfen laut Protokolldefinition entweder 
den Wert 00 00 (aus) oder den Wert FF 00 (an) haben.

Darauf folgt noch ein 16-Bit-CRC.

Daß hier 01 00 akzeptiert wird, ist verwunderlich.

Wobei: Hast Du mal das spezifikationskonforme FF 00 ausprobiert?
1
Relais 1 schalten: 01 05 00 00 FF 00 xx yy | ausschalten: 01 05 00 00 00 00 CD CA

(CRC magst Du gerne selbst berechnen)


Wenn Du mehrere Relais gleichzeitig schalten möchtest, kannst Du Write 
multiple coils (Funktionscode 15) verwenden:

01 - Geräteadresse
0F - Write Multiple Coils
00 00 - Registernummer der ersten Coil (16 Bit)
00 04 - Anzahl der zu beschreibenden Coils (16 Bit)
01 - Anzahl der folgenden Bytes mit Bitwerten (8 Bit)
0F - Bitfeld mit Wert für die zu beschreibenden Coils, hier alle vier an

gefolgt von zwei Bytes CRC.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Hier mal der Protokollaufbau
Genial. Wo hast Du den denn gefunden?

von m-bus (Gast)


Lesenswert?

Torsten C. schrieb:
> Genial. Wo hast Du den denn gefunden?
nicht ganz so übersichtlich:
https://en.wikipedia.org/wiki/Modbus#Function_code_5_(force/write_single_coil)

NB.: sonderlich wirr ist 0..3 statt 1..4 für 4 Ausgänge und [0]=off 
[1..ff]=on auch nicht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Torsten C. schrieb:
> Wo hast Du den denn gefunden?

Das ist die stinknormale Modbus-Spezifikation, in knapper Form findet 
sich die bei Wikipedia (link von "m-bus"), und ausführlicher hier:

http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf

und hier

http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf

von Daniel -. (root)


Lesenswert?

ich habe vor kurzem mit wago 750 Modbuskoppler gespielt
und ebenfalls viel suchen und lesen und experimentiren müssen.
Zumal die Adressen von der Aufsteckreihenfolge abhängen
und die Befehle je nach bit oder wort Zugriff sich unterscheiden.
Wenn ich Zeit habe lade ich das mal auf github hoch.
Es gibt nicht wirklich viel freie Software oder Beispiele im Netz.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Daniel -. schrieb:
> Zumal die Adressen von der Aufsteckreihenfolge abhängen

 Wie denn sonst ?

 Gerätenummer wird normalerweise vom Hersteller festgelegt und
 ins Flash geschrieben.
 Adresse im Netz wird für neue Geräte vom Master zugeteilt.

von Michael W. (Gast)


Lesenswert?

Hallo,

Habe mir so eine Relaiskarte zugelegt:
https://www.amazon.de/Relaiskarte-Relaismodul-Platine-Relais-Controller/dp/B07JKZSFBG

Board-Typ:
eletechsup r421b16

Sollte ähnlich funktionieren, wie die 4er Karte von Jan.
Leider finde ich seitens des Herstelles keine Definition der Modbus-Rtu 
Kommunikation (Baudrate, Start, stop, bits, ..).

Kann mir bitte wer weiterhelfen?
Bzw. gibt es eine Standard Kommunukationseinstellung für Modbus-RTU?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Michael W. schrieb:
> Bzw. gibt es eine Standard Kommunukationseinstellung für Modbus-RTU?

Default ist 19200 8E1. Steht so in der Spezifikation (habe ich am 6.1. 
in diesem Thread verlinkt).

von Ralf (Gast)


Lesenswert?

Ich betreibe eine Relaiskarte aus China von Eb..


8CH dc 12V Modbus RTU RS485 Relay Switch Board for PLC Lamp LED PTZ 
Camera


auf der Rückseite steht R421A08

Das Teil ist mit Funktion 6 wie folgt schaltbar:

01 Modbus Adr.
06 Write single Register
00 01 Relais Nr.
01 00 Relais "EIN" bzw. 02 00 Relais aus
XX XX CRC

Der EIN Befehl ist z.B.

01 06 00 01 01 00 D8 FA

Läuft mit 9600,8,N,1

von Michael W. (Gast)


Lesenswert?

Danke Ralf,

Mit deinen Einstellungen hats geklappt.

Hier noch paar geteste funktionierende Beispiele:
// Relais 1
On:   01 06 00 01 01 00 D9 9A
Off:  01 06 00 01 02 00 D9 6A

// Relais 2
On:  01 06 00 02 01 00 29 9A
Off:  01 06 00 02 02 00 29 6A

// Relais 16
On:  01 06 00 10 01 00 89 9F
Off:  01 06 00 10 02 00 89 6F

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Michael W. schrieb:
> On:   01 06 00 01 01 00 D9 9A

Das widerspricht

Ralf schrieb:
> 01 06 00 01 01 00 D8 FA

Die letzten beiden Bytes sind CRC des Telegramms; beide Telegramme sind 
gleich, die letzten beiden Bytes aber nicht.

Irgendwas läuft hier also schief.

von Ralf (Gast)


Lesenswert?

Da ist mir ein Fehler unterlaufen, ich habe da die CRC von einem anderem 
Befehl erwischt:

On:   01 06 00 01 01 00 D9 9A

Die CRC D9 9A ist natürlich richtig.

von Ralf (Gast)


Lesenswert?

Wie bereits geschrieben betreibe ich eine Relaiskarte aus China von Eb..

8CH dc 12V Modbus RTU RS485 Relay Switch Board for PLC Lamp LED PTZ
Camera

auf der Rückseite steht R421A08, dieses Teil scheint von der Ansteuerung 
gleich mit der R421B16 zu sein.


Kann man an dem Teil die Baudrate verstellen?

von danny L. (da_danny)


Lesenswert?

Guten Abend,

ich bin auch schon mal über die Teile gestolpert. Ich habe mir 
allerdings die mit zusätzlichen Eingängen angeschaut:
https://www.aliexpress.com/item/8-CH-MODBUS-RTU-RS485-Network-expansion-board-RS485-Modbus-RTU-mode/32529941646.html?spm=2114.10010108.1000013.1.73304460OrEjoZ&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.99734.0&scm_id=1007.13339.99734.0&scm-url=1007.13339.99734.0&pvid=515e79de-e05f-42a8-b5e5-76cd0c75eaf5

Die Dinger werden mit einem Controller von ST betrieben UND es gibt auf 
dem Board eine Debug Schnittstelle! sollte nicht so schwer sein dafür 
eigene Firmware zu bauen ;)

Ciao
danny

von Wolfgang (Gast)


Lesenswert?

Michael W. schrieb:
> Hier noch paar geteste funktionierende Beispiele:

Und hier noch ein paar:
// Relais 1 Umschalten
01 06 00 01 03 00 D8 FA

// Relais 1 Tastpuls (1s)
01 06 00 01 05 00 DB 5A

// Relais 1 Puls 5s
01 06 00 01 06 05 1B A9

// Relais 1 Puls 10s
01 06 00 01 06 0A 5B AD

// Relais 3 Puls 100s
01 06 00 01 06 64 DA 41

von B. J. (bjue)


Lesenswert?

Hallo,
ich habe auch so eine 4-fach Relaiskarte und bin auch gerade mangels 
Beschreibung am Erforschen der Möglichkeiten. Meine Ergebnisse für 
MODBUS:
1
01 06 00 01  01  XX  XX XX - Relais1 EIN
2
01 06 00 01  02  XX  XX XX - Relais1 AUS
3
01 06 00 01  03  XX  XX XX - Relais1 TOGGLE
4
01 06 00 01  04  XX  XX XX - Relais1 EIN und alle anderen AUS
5
01 06 00 01  05  XX  XX XX - Relais1 1s IMPULS und alle anderen AUS
6
01 06 00 01  06  00  DB AA - Relais1 sehr kurzer IMPULS und alle anderen AUS
7
01 06 00 01  06  01  1A 6A - Relais1 1s  IMPULS und alle anderen AUS
8
01 06 00 01  06  0A  5B AD - Relais1 10s IMPULS und alle anderen AUS
9
             
10
01 06 00 05  04  XX  XX XX - alle Relais AUS (weil es Relais 5 nicht gibt)

Impulse (Byte 5=06h) funktionieren bei Relais 3 und 4 nicht (es kommt 
nur ein kurzer Impuls).
Bei den Impulsen gehen immer alle anderen Relais AUS, ob das so gewollt 
ist?

von Rainer W. (rawi)


Angehängte Dateien:

Lesenswert?

Für diese unter "RS485 Relay Module MODBUS & AT control remote switch" 
auf eBay erhältlichen Relais-Module gibt es im AT-Modus (Dip-Switch 6 
auf off, keine Adressierung über Dip-Switches 1..5) anscheinend die 
nachfolgenden Kommandos.

Dabei steht:
<n> für Relaisnummer [1..x]
<tttt> für Zeit in Sekunden, 4-stellig

Anworten tut die Karte mit ["Open<n>", "Close<n>"]
"mit Verriegelung" bedeutet, dass mit dem Befehl alle anderen Relais 
ausgeschaltet werden, d.h. nur jeweils ein Relais ist aktiv
1
Kommandos:
2
AT+O<n> an ("Open")
3
AT+L<n> an ("Open"), mit Verriegelung
4
AT+C<n> aus ("Close")
5
AT+T<n> umschalten
6
AT+M<n> Puls (0.5s), mit Verriegelung 
7
AT+D<n>=<tttt> Puls, Dauer tttt Sekunden, mit Verriegelung 
8
AT+R<n> Zustand lesen
Beispiele:
"AT+D2=0005" Puls von 5 s Dauer Relais 2, alle anderen Relais werden aus 
geschaltet, Antort: "Open2"
"AT+O1" Relais 1 wird aktivieren, Antwort "Open1"
"AT+C2" Relais 2 wird deaktivieren, Antwort "Close2"

von Rainer W. (rawi)


Lesenswert?

Ralf schrieb:
> Kann man an dem Teil die Baudrate verstellen?

Die Übertragungsparameter sind wohl auf 9600,8,n,1 festgelegt.

von Wolfgang (Gast)


Lesenswert?

B. J. schrieb:
> 01 06 00 01  06  00  DB AA - Relais1 sehr kurzer IMPULS und alle anderen
> AUS
> 01 06 00 01  06  01  1A 6A - Relais1 1s  IMPULS und alle anderen AUS
> 01 06 00 01  06  0A  5B AD - Relais1 10s IMPULS und alle anderen AUS

Kann ich so nicht ganz bestätigen.
Bei mir gehen nur die Relais 3 und 4 aus, wenn man einen Impuls auf 1 
oder 2 startet
Bei Impuls auf 3 oder 4 (nur 8ms lang, unabhängig vom Längenparameter) 
geht Relais 1 nicht aus.

von Jonas (Gast)


Lesenswert?

Hi Leute!

weis jemand von euch wie ich genau diese relaiskarte in openhab 
angebunden bekomme? https://www.openhab.org/addons/bindings/modbus1/

meine modbus.cfg:
serial.slave1.connection=/dev/ttyUSB0:9600:8:none:1:rtu:1000
serial.slave1.type=holding
serial.slave1.id=1
serial.slave1.start=0
serial.slave1.length=16
serial.slave1.valuetype=uint16

item:
Switch MBRelay1 "My Modbus Switch 1" {modbus="<[slave1:0], 
>[slave1:0:trigger=ON, transformation=1], >[slave1:0:trigger=OFF, 
transformation=2]"}

bei valuetype bin ich mir nicht sicher, und bei der transformation 
ON/OFF in die command-bytes auch nicht

die karte reagiert bei den "polls" aber schonmal (led blinkt mehr 
passiert nicht)

von Jonas (Gast)


Lesenswert?

ok habs selbst hinbekommen aber für alle die mal dannach googlen:

modbus.cfg
serial.slave1.connection=/dev/ttyUSB0:9600:8:none:1:rtu:35:500
serial.slave1.type=holding
serial.slave1.id=1
serial.slave1.start=1
serial.slave1.length=16
serial.slave1.valuetype=uint16

items (bei 4 relais, ohne verzögerung):
Switch MBRelay01 "My Modbus Switch 01" {modbus="<[slave1:0], 
>[slave1:0:trigger=ON, transformation=256], >[slave1:0:trigger=OFF, 
transformation=512]"}
Switch MBRelay02 "My Modbus Switch 02" {modbus="<[slave1:1], 
>[slave1:1:trigger=ON, transformation=256], >[slave1:1:trigger=OFF, 
transformation=512]"}
Switch MBRelay03 "My Modbus Switch 03" {modbus="<[slave1:2], 
>[slave1:2:trigger=ON, transformation=256], >[slave1:2:trigger=OFF, 
transformation=512]"}
Switch MBRelay04 "My Modbus Switch 04" {modbus="<[slave1:3], 
>[slave1:3:trigger=ON, transformation=256], >[slave1:3:trigger=OFF, 
transformation=512]"}

der transformation-wert ergibt sich aus dem beiden "datenbytes" z.B. 01 
00 = 256 , 02 00 = 512 von:
01 06 00 01  01  00  XX XX - Relais1 EIN
01 06 00 01  02  00  XX XX - Relais1 AUS
siehe hier 
https://community.openhab.org/t/solved-modbus-and-cheap-4-relay-module-d18994/21711/5

trotzdem danke! wäre sonst ohne die infos von hier auch nicht 
weitergekommen

von Johann Felfer (Gast)


Lesenswert?

eletech Modbus 16 Board
R421B16

Test with QModMaster free software
Modbus Commands

Holding Registers 1 - 16 for relay 1 to 16

01xx HEX switch on
02xx HEX Switch off
05xx HEX Puls 1sec "Momentary"
06TT HEX on for TT secounts "Delay"

von Marc K. (makuser)


Lesenswert?

Hallo alle zusammen,

ich habe dieses Board jetzt auch in diversen Größen, also 1, 4 und 8 
Relais und stehe jetzt vor dem Problem, dass ich beim Testen gemerkt 
habe, dass sich der Hersteller leider nicht wirklich Modbus 
implementiert hat, sondern lediglich ein paar RS485 Kommandos.

Beispielsweise kann man die Inputs zwar mit 0x02 abfragen, aber immer 
nur von 0x00 bis 0x07 gleichzeitig, nicht einzeln.

Desweiteren stellt man die Adresse des Boards ein, indem man an die 
Adresse 0x00 schreibt, etc.

@da_danny hat auch schon erwähnt, dass es Debug ports gibt (3V3, DIO, 
CLK und GND), außerdem gibt es nochmals einen weiteren Header mit 3V3, 
RX, TX und GND. Getestet was darauf läuft bzw verfügbar ist habe ich 
jedoch noch nicht.

Kam jemand schon mit einer eigenen Firmware weiter oder mit der 
generellen Ansteuerung? Ich wäre auch sehr daran interessiert.

von Ksrimmy (Gast)


Lesenswert?

Hallo zusammen!
Habe Probleme die Eingänge zum Laufen zu bringen.
Habe Mal 3V, dann 5 V und dann 10V angelegt.
Leider immer ohne Pull-up.
Bei 3V und 5V blieben die Eingänge auf false.
Bei 10V sah ich kurz einen Funken über dem Mikrocontroller und dann 
stank es... Und das trotz Optokoppler?!

Wie beschaltet Mann die Eingänge richtig?

LG
Florian

von Marc K. (makuser)


Lesenswert?

Hallo Florian,

Bei meinem Board braucht man überhaupt keine Pull-Ups.

Magst du Mal ein Foto von deinem Board Posten, gerne auch mit 
verwendeter Verkabelung. Dann wird vielleicht klar wo bei dir der Fehler 
gelegen haben könnte.

von Florian S. (florian_s742)


Lesenswert?

Hallo Marc,
ich habe so ein Board:
https://m.de.aliexpress.com/item/32704810964.html
Ich habe am In1 / GND 10V über ein externes Netzteil angelegt. Das hat 
ihm nicht gepasst.

Kann jemand mit Sicherheit sagen, was die Eingänge vertragen sollten?

LG
Florian

von Florian S. (florian_s742)


Lesenswert?

Hallo,
ich habe jetzt noch etwas geforscht.
Das kleine 4 Kanal Relaisboard nutzt die Optokoppler als Trenner 
zwischen Prozessor und Relais. Ist das nicht übertrieben?
Dafür hat es keine Optokoppler an den Eingängen, was die Explosion des 
Mikrocontrollers erklärt.
Beim große Bruder mit acht Eingängen und acht Relais 
(https://www.aliexpress.com/item/4000087275198.html?spm=a2g0o.productlist.0.0.1c853766PVxWzs&algo_pvid=688c60b7-b591-49bc-ac4d-de510b0e8b06&algo_expid=688c60b7-b591-49bc-ac4d-de510b0e8b06-5&btsid=0bb0623a16004584642243960ebc97&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_) 
sind auch die Eingänge mit PC817 Optokopplern gesichert.
Beim Großen kann ich die Eingänge auch super über Funktion 02 - Read 
discrete inputs auslesen. Bei dem genannten mit 4 Ports bekomme ich aber 
auch beim nachbestellten Board keine Highs auf den Eingängen 
übermittelt.

Soweit ein Statusupdate.

von Daniel B. (Firma: Kübler Hallenheizungen) (harry4711)


Lesenswert?

Hallo zusammen,
bei mir läuft das Board auch soweit.
Mit einer "Einschränkung"...
Die Eingänge sind softwareseitig mit den Ausgängen verknüpft.(toggle)
Weiss jemand wie man diese Verknüpfung deaktivieren kann ?
Im Artikeltext steht nur
"8 fotoelektrisch isolierte Eingangsports (NPN ist auf niedrigem Pegel 
aktiv), und die Eingabe / Ausgabe-Beziehung kann über Befehle auf 
verknüpft (Standard) und nicht verknüpft eingestellt werden."
Bleibt nur die Frage nach dem WIE... ^^

Vielen Dank schon mal für eure Vorschläge ;-)

Grüße
Daniel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.