Modbus RTU konfigurieren

Für Themen rund um die Konfigurationsoftware des Revolution Pi
Post Reply
ghx
Posts: 19
Joined: 19 Oct 2024, 20:16

Modbus RTU konfigurieren

Post by ghx »

Hallo,

nachdem mein System wieder läuft, versuche ich nun Modbus zum laufen zu bekommen.

Meine Hardware scheint richtig angeschlossen zu sein, da ich mit modpoll auf dem Core korrekte Messwerte bekomme:

Code: Select all

modpoll -p none -1 -b 19200 -a 33 -r 1 -c 1 /dev/ttyUSB0
liefert:

Code: Select all

modpoll 3.15 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2024 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC3
Slave configuration...: address = 33, start reference = 1, count = 1
Communication.........: /dev/ttyUSB0, 19200, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, holding register table

-- Polling slave...
[1]: 430
Nun versuche ich das ganze in Pictory ModbusRTU Master einzustellen:
device_path /dev/ttyUSB0
baud_rate 19200
parity None
data_bits 8
stop_bits 1

In Extended Data:
Slave Addr. 33
Function Code READ_HOLDING_REGISTERS
Register Addr. 1
Quantity of Registers 1
Action Interval (ms) 1000
Device Value Input_Word_1

Wenn ich jetzt aber versuche etwas zu lesen:

Code: Select all

piTest -1 -r Input_Word_1; piTest -1 -r Modbus_Action_Status_1;piTest -1 -r Modbus_Master_Status
kommt:

Code: Select all

2 Byte-Value of Input_Word_1: 0 dez (=0000 hex)
1 Byte-Value of Modbus_Action_Status_1: 255 dez (=ff hex)
1 Byte-Value of Modbus_Master_Status: 255 dez (=ff hex)
Warum ist der Wert 0 und nicht 430??? Und was sagt der Fehlercode 255??
User avatar
dirk
KUNBUS
Posts: 2172
Joined: 15 Dec 2016, 13:19

Re: Modbus RTU konfigurieren

Post by dirk »

Hallo ghx,
danke für die ausführliche Schilderung des Fehlerbildes. Das ist klasse und hilft, das Problem zu verstehen. Ich finde Deine Vorgehensweise spitze, denn Du hast erst einmal gezeigt, dass Modbus ohne den Weg über das Prozessabbild funktioniert. Jetzt, beim Versuch, den RevPi Way zu nutzen und über das Prozessabbild zu kommunizieren, tun sich die Probleme auf. Also ran ans Troubleshooting und in die Mitte der Sache!

Das Statusregister, das Du ausgelesen hast, ist auch hier der Schlüssel:
Was bedeutet der Wert 255 im Register "Modbus_Master_Status"? Der Wert ist gleich 0xFF und steht unter anderem hier:
Modbus_Master_Status
Modbus_Master_Status
https://revolutionpi.com/en/tutorials/m ... -verwenden

Möglicherweise wurde das Problem durch den parallelen Zugriff sowohl über den Userspace via "Modpoll" als auch vom Service, der das Prozessabbild befüllt, verursacht.

Die RS485-Schnittstelle hier kann meiner Meinung nach nur von einem Prozess geöffnet werden, zumindest für Schreibzugriffe - es kann nur einen geben :-D

a) Stoppe alle Userspace Prozesse, die auf die RS485-Schnittstelle zugreifen, entweder durch einen "sudo reboot" oder anderweitig.
b) Führe einen Reset des PiControl Prozesses durch, "piTest -x".
c) Teste Deine Befehle nochmals - hat sich der Wert im Register "Modbus_Master_Status" verändert? Ggf. schreibe eine 1 in das Register "Master_Status_Reset" und lese den Wert nochmals aus.

Vielleicht löst sich das Ganze damit auf.
ghx
Posts: 19
Joined: 19 Oct 2024, 20:16

Re: Modbus RTU konfigurieren

Post by ghx »

Hallo Dirk,
Das Statusregister, das Du ausgelesen hast, ist auch hier der Schlüssel:
Was bedeutet der Wert 255 im Register "Modbus_Master_Status"? Der Wert ist gleich 0xFF und steht unter anderem hier:

Image
Aber 0x11 ist doch was anderes als 0xFF Oder hab ich da was falsch verstanden?
Als alter C-Programmierer dachte ich, das richtig auseinanderhalten zu können.

ein piTest -x hat gestern nix gebracht. Der Fehler blieb erhalten.

Nach einem sudo reboot liefert mir piTest folgendes:

Code: Select all

2 Byte-Value of Input_Word_1: 0 dez (=0000 hex)
1 Byte-Value of Modbus_Action_Status_1: 0 dez (=00 hex)
1 Byte-Value of Modbus_Master_Status: 0 dez (=00 hex)
Mag sein, dass es mit modpoll irgendwie kollidiert war. Jetzt jungfräulich und ohne Fehler. Aber immer noch kein Messwert!

... danach modpoll liefert Messwert.

ein piTest nach dem modpoll blieb auch fehlerfrei. Aber auch ohne Werte.

Code: Select all

2 Byte-Value of Input_Word_1: 0 dez (=0000 hex)
1 Byte-Value of Modbus_Action_Status_1: 0 dez (=00 hex)
1 Byte-Value of Modbus_Master_Status: 0 dez (=00 hex)
ghx
Posts: 19
Joined: 19 Oct 2024, 20:16

Re: Modbus RTU konfigurieren

Post by ghx »

Nach dem 3. piTest -X kommen jetzt auch Werte zurück. Vorerst stabil.
Kann da irgendetwas mit dem Timing nicht stimmen? Hat evtl modpoll ein anderes Timing wie der Modbus-Master?
ghx
Posts: 19
Joined: 19 Oct 2024, 20:16

Re: Modbus RTU konfigurieren

Post by ghx »

Neues Update:
Nach einigen Stunden blieb der Messwert hängen. Keine Updates mehr

Code: Select all

1 Byte-Value of Modbus_Action_Status_1: 0 dez (=00 hex)
1 Byte-Value of Modbus_Master_Status: 0 dez (=00 hex)
nach einem piTest -x: der Messwert 0 und

Code: Select all

1 Byte-Value of Modbus_Action_Status_1: 0 dez (=00 hex)
1 Byte-Value of Modbus_Master_Status: 255 dez (=ff hex)
das 0xff verstehe ich, da plötzlich der USB-Modbus nicht mehr ttyUSB0 sonder ttyUSB1 heißt. :shock:

Teil 2:
Nach einem reboot lief es wieder. Ich hab die Vermutung, der USB-Modbus hat einen Schlag...
User avatar
dirk
KUNBUS
Posts: 2172
Joined: 15 Dec 2016, 13:19

Re: Modbus RTU konfigurieren

Post by dirk »

Hallo ghx,
dann wurde USB wurde neu enumeriert, eventuell war die Verbindung wackelig :(
Ok, da habe ich wohl 0x11 mit 0xFF verwechselt - sorry, das schaue ich mir nochmals an, vollkommen richtig bemerkt :shock: Allerdings hast du die 0xFF ja dann doch erhalten. Das ist halt der Kern der Sache, wenn das Gerät "fehlt" kommt es zu diesem Fehlercode.
Post Reply