Wechselrichter SD-4862W-II-EU4 MODbus auslesen

Zwei Anmerkungen:

Wenn Du schon Modbus-Register listest, wäre es günstig, auch zu erwähnen, was für Register das sind; Modbus kennt "analog value" und "holding register" (und die Bit-Registertypen "coil" und "input state", aber die nutzt Du hier offensichtlich nicht).

Du scheinst "holding register" zu verwenden, das legt der Wert "03" (function code 3, read holding register) in Deinem Tasmota-Skript nahe.

Eine Tabellenspalte mit "ASCII" zu überschreiben, in der Dezimalzahlen stehen, ist ... unerwartet.

Wenn Du Deine Tabelle also überschreiben würdest mit "holding register", und die "ASCII" überschriebene Spalte mit "Adresse" oder "Offset" beschriften würdest und noch den Zusatz anbrächtest, daß Du bei 0 mit dem Zählen anfängst, wäre auch den Nutzern komplett anderer Modbus-Software gedient.

: Bearbeitet durch User
OP

Danke fürs durchlesen. Du hast recht, die Seite ist (noch) nicht besonders ordentlich. Ich habe "Holding" noch im Text untergebracht und "Addr.dec." mit in die Tabelle geschrieben. Das mit dem Offset lass ich mal weg, das verwirrt ja nur. Vielleicht behebe ich ja später noch das Deutsch/Englisch Gemisch. Vielen Dank! Ich selbst habe für einen anderen Wechselrichter solche Tabellen im Internet gefunden und wollte meine Erkenntnisse zu dieser Type beisteuern.

Marten P. schrieb:

Das mit dem Offset lass ich mal weg, das verwirrt ja nur.

Das Problem bei Modbus ist dessen Geschichte, und die Tatsache, daß es zweieinhalb konträre Methoden gibt, Register zu numerieren.

Im eigentlichen Protokoll, das über die Schnittstelle geht (egal ob Modbus/RTU oder Modbus/TCP) werden Register mit einem 16-Bit-Wert adressiert, der den kompletten Zahlenraum von 0 bist 65535 umfasst.

Eine sehr oft anzutreffende ältere Methode vermischt Registerarten und Adressen und verwendet willkürliche "Offsets":

00001 bis 09999 sind "coils" (Bitein- und Ausgänge)

10001 bis 19999 sind "discrete inputs" (Biteingänge)

30001 bis 39999 sind "input register" (Analogeingänge, 16-Bit-Wert)

40001 bis 49999 sind "holding register" (Analogein- und Ausgänge, 16-Bit-Wert)

Damit sind nur 9999 Register jedes Typs ansprechbar.

Tatsächlich werden in allen Fällen die Adressen 0 bis 9998 auf den Bus gegeben.

Eine andere Variante erweitert das um eine Zehnerpotenz:

0xxxxx sind "coils" (Bitein- und Ausgänge)

1xxxxx sind "discrete inputs" (Biteingänge)

3xxxxx sind "input register" (Analogeingänge, 16-Bit-Wert)

4xxxxx sind "holding register" (Analogein- und Ausgänge, 16-Bit-Wert)

Auch hier beginnt die Zählung bei 1.

In allen Fällen ist das Protokoll immer das gleiche und adressiert Register bei 0 beginnend, unabhängig von deren Typ.

Man muss also, wenn man eine Modbusbeschreibung eines Gerätes sieht, immer genau prüfen, welche "Codierung" die Registernummern/Adressen verwenden.

Und daher ist es wichtig, daß man, wenn man ein Modbusgerät selbst beschreibt, man genau erwähnt, welche "Codierung" man nutzt.

: Bearbeitet durch User

Antwort schreiben

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.