NEWS
Modbus liefert nur Nullen
-
Modbus Adapter verbindet sich mit RS485 RTU Schnittstellen, liefert aber nur NULL-Werte
Master: IOBroker, Modbus Adapter V3.4.9., RPi4, ttyUSB0, USB Stecker zu RS485, AbschlussR=2x120 Ohm
Slave: SDM630 Stromzähler
RTU: 9600-8N1Diagnose: Modbus adapter grün!, Objekte werden im 1000ms Takt upgedated (blinken grün)m Werte sind aber alle 0!
Am Zähler wird das Telefonsymbol gezeigt, Bestätigung für die bestehende RS485 Verbindung zum MasterIch habe schon alle verschiedenen Formate (Float, bs, ws, ...) ausprobiert.
Mit dem ModbusTestprogramm am PC (mbus.exe) zeigt er die richtigen (plausible) Werte für die Register, bei Float reversed
Die Leitung, Adapter, Zähler, RS485 scheint offensichtlich zu funktionieren.Mir ist aufgefallen, dass in allen Dokus die ich finden kann, die Input-Register mit 3x.xxx beginnen, die holdingRegister mit 4x.xxx. Laut einigen Foren sollte man die Datenregister aber unter HoldingRegister eingeben... das hat bei mir nichts gebracht. Ich habe die Werte nun mit den vollen Registern unter InputRegister eingegeben. (zB 30.001 für die VOLT auf L1)
Wenn ich die gleichen Register in die HoldingRegister Tabelle eingebe, ändert sich komischerweise nichts, außer, dass die Objekte nun unter "holdingRegister" angelegt werden...Egal: Ich bin jedenfalls am Ende meiner (ohnehin schon geringen) Weisheit angelangt...
Ich brauch halt die Werte, und keine NULLEN....Whats the trick ???
Meine letzte Hoffnung setze ich auf den stromversorgten USB Anschluss, den ich hoffentlich heute in der Post habe...
Vielleicht machen ja die USB Ports am RPi4 bei USB-Platte und USB.to.RS485 schlapp...Gruss
Michael.
-
@michael-3
was bitte ist deine Konfiguration?der Zähler am Slave, aber Adapter und USB am Master?
-
@homoran :
der Slave ist ein SDM630 ModBus Stromzähler mit RS484 Schnittstelle (A,B,GND), die communication ist dort mit 9600-8N1 eingestellt.
der "Takt" kommt mE vom Master, mit 1000ms (siehe Screenshot IOB/ModBus Adapter), auch am Master (IOB) ist die gleiche comm eingestellt (siehe oben)die DatenRegister kommen aus dem Handbuch des Stromzählers, die Daten sind alle am PC mit dem gleichen USB2RS485 Stecker geprüft worden.
Welche Konfiguration meinst Du genau?
-
@homoran :
-
@michael-3 ich meinte natürlich RS485 !!
-
@michael-3 sagte in Modbus liefert nur Nullen:
Welche Konfiguration meinst Du genau?
die Hardwarestruktur
Sind Master und Slave zwei ioBroker Hosts im Multihost Modus?
-
@homoran :
Nein! Ganz easy.
Ich habe einen Rpi4, auf dem läuft IOB, mit dem Modbus Adapter. Instanz-0 ( auch nur einer), = Master.
Im USB Port des RPi4 steckt ein (physischer) adapter USB auf RS485. Dieser ist als Schnittstelle im Modbus Adapter (software) definiert: seriell 9600-8N1 (siehe Bild oben). Der USB Stecker hat 3 Anschlüsse (A+, B-, Gnd) die Verbindung läuft, der port wird gefunden und er verbindet sich mit der Gegenstelle (Instanz=grüne Ampel, Telefonsymbol auf dem Stromzöhler)
Völlig getrennt davon, hängt ein SDM630 Stromzähler im Schrank. = Slave. Dieser hat eine interne Modbus-RS485 Schnittstelle (Anschlüsse A+\B-, Gnd) über die er hunderte von Daten überträgt… ich habe nur 17 ausgewählt, (siehe oben).
Die beiden RS485 Points sind verkabelt und mit Endwiderständen 120 Ohm versehen, wie man das halt so macht…
Die Datenregister sind im Modbusadapter (IOB) definiert…. Siehe oben Bild.
Problem:
Im IOB werden nur nullen in die Objekte (inputregister) eingelesen.
Bild oben…Hardware:
1 RPi4B 8GB, 500GB SSD(boot)
1 SDM630
1 USB2RS485 Stecker
Kabel….
Mehr ist es nicht..Software:
IOB,
Modbus Adapter,Getestet habe ich den Aufbau wie folgt getestet:
Anstelle des RPi wurde der USB Adapter in meinen PC gesteckt, dort läuft eine Testsoftware zur Prüfung der RS485 Verbindung (mbus.exe)
Ich kann dort jeden Wert aus dem SDM630 auslesen, stecke ich es wieder in der RPi, stehen nullen in den objekten des Modbusadapters…
Die nullen blinken /1000ms - was mir zeigt, das die Verbindung steht, der Master Daten abfragt, aber anscheinend nichts bekommt… -
@michael-3 sagte in Modbus liefert nur Nullen:
Du hast überall Float (Big Endian Word Smap ) ist aber laut anderen Thread´s
Float (Big Endian )
https://forum.iobroker.net/topic/29903/gelöst-stromzähler-b-g-sdm630-modbus-rs-485-usb-mqtt/107
-
Jetzt bin ich total verwirrt...
Das hatte ich schon x-mal ausprobiert.. und heute: es geht!
Aber ich habe auch die Alias Häkchen gesetzt, und... keine Ahnung.
Mit meiner anderen Software muss ich Float Swapped eingeben.. keine Ahnung wer-da-wie-rum swapped.ABER: nun Vollcrash....
Ich hatte gestern nebenbei auch auf die letzte Version des Modbus Adapters aktualisiert.
Vorher konnte ich nach Veränderungen bei den Objekten diese im IOB löschen, und beim Aktualisieren der Instanz wurden diese wieder neu (frisch!, das war der Plan) angelegt.
Jetzt tut er das auf einmal nicht mehr... und ich habe überhaupt keine Objekte mehr - alles weg --- und ich bekomme nichts mehr zurück... ich lege neue an, nix!
bei mir ist nichts reproduzierbar... mal tut er dies, dann wieder das... check ich nicht.
-
jetzt ist es total zerstört--- !
einmal "Mehrere Geräte-IDs" Häkchen gesetzt, und dann wieder gelöscht....
JETZT springt die Ampel nach 2-3 sek. wieder auf Gelb...
als Objekte hat er nur einen Teil, nicht alle hinterlegtem Register, angelegt, diese sind aber jetzt zT schwarz, die anderen rot, welche und warum .... keine Ahnung....
Muss ich den adapter jetzt deinstallieren und wieder neu installieren? bringt das was?
-
siehe bitte meine Nachrichten weiter unten...
Der Modbus Adapter (letzte Aktualisierung gestern) generiert nicht reproduzierbare Ergebnisse.
Gestern hat die Comm noch funktioniert, es war wohl tatsächlich der Datentyp (Float -"ungeSwapped") egal.
Geändert: dann legt er keine Objekte mehr an, sodass plötzlich alle DAten komplett weg sind.
Dann sind plötzlich wieder Objekte da (aber nicht alle, nur ein paar, ca 40% "schwarz" und Rest "rot")
Und nun geht der Modbus Adapter sogar auf Gelb -> Tod!Das einzige was ich geändert hatte war:
- Haken bei "Mehrere Geräte IDs": ich wollte die "1" wieder sehen...
- Datentyp Float (ohne swap)
- Die Objekte im IOB gelöscht, da diese bisher dann beim Neustart der Instanz neu (mglw zusätzlich) generiert wurden..
Ich habe den Adapter nun neu installiert. Dann macht er das wieder (alte weg, neue Objekte anlegen)
Die neue Editierfunktion TSV funktionierte bei mir nun leider auch nicht so recht, sodass ich die Werte leider alle neu abtippen musste.. egal...
Der ERSTE Wert mit dem Register 30001 wird nur beim Start der Instanz einmal gelesen, alle anderen werden im vorgegebenen Takt (zB 1000ms) gelesen.
Somit blinken bei mir alle Objekte nun schön fröhlich mit ihren Werten... nur L1 Volt (Reg 30001) bleibt schwarz mit dem ersten Wert von 230 Volt... und wird nicht aktualisiert.
Gruss und vielen Dank schonmal an die Community!
Michael.
PS: ich habe gerade erst gesehen, dass ich wohl 2 accounts habe, eines auf dem Handy (M W) und dieses auf dem PC (M)--- das muss ich mal korrigieren.
-
Hurra, es läuft !
Vielen Dank für den Tip mit dem Data-Typ!
Jetzt wird (ohne das ich etwas getan habe) auch nach ca. 1Stunde der erste Wert ausgelesen..Mit diesen Einstellungen funktioniert es nun!
Ein SDM630-Modbus Stromzähler kann in den IO Broker eingelesen werden...
Vielen Dank!
Gruss und schönes Wochende.
Michael. -
@michael-3 Hallo, wie ist es inzwischen weitergegangen?
Ich habe ein ähnliches Problem. Er hat einmal ausgelesen (einen von einem Wert, den ich wissen will) und dann nicht mehr..
Gruß -
@herr_kuschel sagte in Modbus liefert nur Nullen:
@michael-3 Hallo, wie ist es inzwischen weitergegangen?
Ich habe ein ähnliches Problem. Er hat einmal ausgelesen (einen von einem Wert, den ich wissen will) und dann nicht mehr..
GrußHallo,
bei mir hat final geholfen, den modbus.adapter zu löschen und dann neu zu installieren.
Die Eingangs-Register habe ich dann manuell neu angelegt.Dann lief es, seither absolut save und fehlerfrei...
-
@michael-3 danke für den Tipp.
Hat bei mir leider nichts gebracht.
Ich werde weiter ausprobieren.. -
@herr_kuschel sagte in Modbus liefert nur Nullen:
Ich habe ein ähnliches Problem. Er hat einmal ausgelesen (einen von einem Wert, den ich wissen will) und dann nicht mehr..
Das heißt ,du du fragst erstmal nur ein Registeradresse ab ?
Was kommt im Log , weil es jetzt nicht mehr geht ( Stelle auf die Log-Stufe Debug ) ?