NEWS
Modbus Adresse gesucht
-
ich habe einen China Stromzähler (DDS661) bei dem ich zwar mit Adresse 0x00 die Spannung, 0x13 dieStromstärke, 0x12 die Leistung und 0x100 den Zählerstand auslesen kann, da ich aber keine Doku finde weiß ich nicht wie ich die ID des Zählers ändern kann. Kennt jemand so einen Zähler und kann mir die Adresse für die ID sagen?
-
@wolfgangfb sagte in Modbus Adresse gesucht:
ich habe einen China Stromzähler (
Deswegen kaufe ich nur in D mit Support!
aber ich hab mal für dich gegoogelt
https://forum.arduino.cc/t/leistungsmesser-dds661-modbus-per-arduino-auslesen/1322943da ist das pdf in einem post
-
@homoran
Danke! Die Seite kannte ich tatsächlich, habe aber den Teil mit der Anleitung übersehen. Mit dieser Anleitung hat es tatsächlich geklappt, die ID zu ändern (wobei mir nicht klar ist, warum man eine ID in IEEEE 754 Floating Point lesen/schreiben muss).Für alle die vor dem gleichen Problem stehen, hier die genaue Anleitung zum Ändern der ID:
Ich verwende QModMaster um mit dem Energy Meter per USB<>RS485 Adapter zu kommuniziern.
Ich musste zuerst den Treiber installieren. Ich habe mich an diese Anleitung gehalten:
FT232 USB UART Treiber
Wichtig: Schritt 2 wiederholen (steht aber explizit so in der Anleitung, ich habe es beim ersten mal aber überlesen)
Einstellungen: Modbus Mode: RTU, beim DDS661 ist wichtig, dass die Parität "even" und nicht "no parity" ist. Also so wie der Zähler z.B. von Ali geliefert wird sind die Einstellungen 9600 Baud, 8 Dat Bit, 1 Stop Bit, Parität Even und RTS Disable.Um die aktuelle Modbus Slave ID zu lesen wählt man "Function Code" Read Holding Register (0x03), Start Address 9 (Hex, spielt aber bei Zalen kleiner als dezimal 10 keine Rolle, wichtig ist, dass da ein Offset von 1 ist, also Adresse 9 liest in Wirklichkeit 8). Dann auf "Scan" und im Bus Monitor sieht man "TX 01 03 00 08 00 02 xx xx" (Prüfsumme sehe ich jetzt nicht mehr) und bei RX: 01 03 04 3f 80 00 00 xx xx". Die Adresse ist 3f 80 00 00, die kann man z.B. auf IEEE 754 Konverter in Dezimaldarstellung umrechnen und erhält 1 (also die ID).
Um die ID auf 2 zu ändern gibt man bei Function Code "Write multiple registers (0x10)", Start Address 9 ein und bei Number of Registers 2. Unter "Number of Registers" kann man jetzt im ersten Register "4000" und im zweiten "0000" eingeben (40000000 ist nach IEEE-754 "2", "3" wäre 40400000 etc.) und dann auf "Commands" Read/Write" und schon hat der Zähler die Slave Address 2.
Um jetzt mit dieser neuen ID 2 z.B. die aktuelle Spannung zu ermitteln geht man auf "Read Input Register (0x04)", Start Address 1 (in Wirklichkeit also 0) und wieder Command "Read/Write", als Ergebnis erhält man "02 04 04 43 63 66 66 86 94" (Beispiel)
02 ist die Slave Address, 04 = "Read Input Register" die nächste 04 ist die Anzahl der Bytes (2 Register, also 4 Byte", dann die Daten (43 63 66 66, nach IEEE-754 ist das 227.2 (Volt) und 86 94 ist die CRC Prüfsumme.
Wenn jemand wissen möchte, wie man das z.B. mit Esp-Home in IO-Broker einbindet kann ich gerne auch den Code veröffentlichen.
Auf jeden Fall bekommt man mit dem DDS661 für unter 10 Euro (mit einem ESP32 und TTL2RS485 Adapter sind es dann 13 Euro) einen Modbus RTU fähigen Stromzähler, den man in IO-Broker einbinden kann.