Hallo zusammen,
ich habe einen Stromzähler (SDM72DM) gekauft, um die aktuelle
importierte und exportierte Leistung auslesen zu können. Diese Daten
möchte ich dann auswerten und bei zu viel Exportierter Leistung
(PV-Anlage) einen Verbraucher automatisch hinzuschalten, um meinen
Eigenverbrauch zu erhöhen. Ich hätte dabei an eine Ansteuerung einer
Wallbox (GoE-Charger) per MQTT API gedacht...
Soweit so gut.. jedoch scheitert es gerade an dem Versuch die Daten des
Stromzählers per RS485 auszulesen. Ich konnte die Daten bereits mit Dem
Programm "Modbus Poll" , und einem USB-->RS485 Adapter am PC anzeigen
lassen. Damit kann ich aber die daten nicht weiterverarbeiten.
Ich möchte den Zähler daher mit einem Python Programm auslesen.
Dieses Programm hätte ich gebastelt, jedoch bekomme ich als Ausgabe nur
den Wert "0":
Zum Testen möchte ich hier das Input Register 3001 auslesen. Deshalb
"adress= 0x0000", "count=2" da laut Datenblatt zweit 16 bit Register für
einen Parameter benutzt werden. "slave=1", da ich die Adresse des
Zählers auf 1 eingestellt ist.
Kann mir da jemand helfen, was ich falsch mache? Ein verdacht wäre, dass
das Format "Float" Probleme verursacht.
Danke für die Antwort ;)
ich habe dein Ratschlag befolgt, und ich denke das ist schonmal der
richtige weg, ich bekomme natürlich als Ergebnis wieder nur eine "0"
heraus, da ich ja gar keine Daten vom Bus Teilnehmer bekomme. Ich denke
dass beim Auslesen des Registers irgendetwas schief läuft :(
Mathias schrieb:> client = ModbusSerialClient(port= "COM7", timout = 2, baudrate= 9600,> bytesize=8, parity= 'N', stopbits=1)
Der Modbus-Standard schreibt Even Parity als Default vor. Schau mal, ob
die Einstellungen für den UART stimmen.
fchk
Bietet die verwendete Python-Library auch die Möglichkeit, die Rohdaten,
die über den Bus transportiert werden, anzuzeigen (als Hexdump)?
Falls ja, poste mal das Anfragetelegramm und die Antwort.
Zeig' auch mal das, was Modbus Poll anzeigt - nutzt das RTU oder ASCII?
"Display > Communication" sollte so etwas anzeigen:
https://www.modbustools.com/images/mbpoll-communication-traffic.png
Frank K. schrieb:> Der Modbus-Standard schreibt Even Parity als Default vor. Schau mal, ob> die Einstellungen für den UART stimmen.
ich hab den kleinen Bruder von dem Stromzähler, den SDM230, an einem
ESP32 Modbus RTU->TCP Gateway hängen, läuft bei mir mit 9600 8N1.
Aber: Das kann man am Zähler durch ewig lange Morsecode-Klickorgien sehr
frei konfigurieren...
Also: Am Gerät nachschauen, wie's tatsächlich eingestellt ist.
Nachtrag: Gerade mal im Debug-Modus das Read-Commando wie vom TE geplant
geschickt,
Antwort 0x4366b925, als Float 230.723
Den Online-Konverter hab ich hier gefunden:
https://gregstoll.dyndns.org/~gregstoll/floattohex/
Εrnst B. schrieb:> Nachtrag: Gerade mal im Debug-Modus das Read-Commando wie vom TE geplant> geschickt,> Antwort 0x4366b925, als Float 230.723
Danke für die Zahlen.Passt.