Modbus Register-Decoder
Rohe Register einfügen und alle Lesarten sehen: 16-, 32- und 64-Bit-Ganzzahlen und Floats, in allen vier Byte-Reihenfolgen. Geben Sie den Wert ein, den Ihr Gerät anzeigt, und der Decoder findet das passende Format.
Register
BeispielGetrennt durch Leerzeichen, Kommas oder Zeilenumbrüche. Auch aus Modbus Poll kopierte Zeilen wie 3 = 17254 funktionieren.
Wert finden
Geben Sie den Wert ein, den Zähler, Umrichter oder HMI anzeigt. Der Decoder probiert jedes Register, jeden Datentyp, jede Byte-Reihenfolge und die übliche Skalierung (÷10, ÷100, ÷1000) durch, beste Übereinstimmung zuerst.
Export für Home Assistant
Verwendet den oben gewählten Treffer; ein Klick auf einen anderen Treffer wechselt ihn. Fügen Sie das Ergebnis in configuration.yaml ein.
Sie haben schon einen modbus:-Hub? Kopieren Sie nur den Sensor-Eintrag unter sensors:. Starten Sie Home Assistant nach der Änderung neu.
32-Bit-Werte
Zwei Register als ein Wert gelesen. Wählen Sie das erste Register des Paars.
| Reihenfolge | Float32 | Int32 | UInt32 | Bytes |
|---|
64-Bit-Werte
Vier Register als ein Wert gelesen, ab dem oben gewählten Register.
| Reihenfolge | Float64 | Int64 | UInt64 | Bytes |
|---|
16-Bit-Register
| Adresse | Hex | UInt16 | Int16 | Bits 15 … 0 |
|---|
Läuft komplett in Ihrem Browser. Ihre Eingaben werden an keinen Server gesendet.
Byte-Reihenfolgen erklärt
Ein 32-Bit-Wert besteht aus vier Bytes A B C D, verteilt auf zwei 16-Bit-Register. Geräte ordnen sie unterschiedlich an, deshalb können dieselben Register 230.5 oder Unsinn bedeuten.
- ABCD
- Big-Endian. Höherwertiges Wort zuerst, wie in der Modbus-Spezifikation vorgesehen. Probieren Sie das zuerst.
- CDAB
- Word-Swap. Niederwertiges Wort zuerst. Sehr verbreitet bei Energiezählern und SPS.
- BADC
- Byte-Swap. Bytes innerhalb jedes Registers vertauscht. Selten.
- DCBA
- Little-Endian. Alles umgekehrt.
So lesen Sie die Ergebnisse
Modbus überträgt nur 16-Bit-Register. Was sie bedeuten – eine vorzeichenbehaftete Zahl, ein 32-Bit-Float, ein Wert in Zehnteln – legt der Gerätehersteller fest, nicht das Protokoll. Der Decoder stellt alle gängigen Lesarten nebeneinander, damit Sie sie mit der Anzeige oder der Registerkarte vergleichen können.
- 16-Bit-Register zeigen jedes Register als vorzeichenlose Zahl (0 bis 65535), als vorzeichenbehaftete Zahl (−32768 bis 32767) und als einzelne Bits. Status- und Alarmwörter werden Bit für Bit gelesen.
- 32-Bit-Werte verbinden zwei benachbarte Register zu einem Float32, Int32 oder UInt32 in allen vier Byte-Reihenfolgen. Wählen Sie über der Tabelle das erste Register des Paars.
- 64-Bit-Werte verbinden vier Register zu einem Float64, Int64 oder UInt64. Manche Zähler und Wechselrichter nutzen sie für Energiesummen, die nicht in 32 Bit passen.
- Wert finden nimmt den Wert aus der Anzeige und probiert jedes Register, jeden Typ, jede Byte-Reihenfolge und eine Skalierung von ÷10, ÷100 oder ÷1000. Treffer innerhalb von 0.5 % werden aufgelistet, der nächste zuerst. Ein Klick auf einen 32-Bit-Treffer markiert ihn in der Tabelle.
- Export für Home Assistant macht aus dem gewählten Treffer einen Sensor für die Modbus-Integration. Datentyp, Swap, Skalierung, Genauigkeit und die nullbasierte Adresse werden für Sie ausgefüllt.
Typische Fehler
- Adresse um eins verschoben. Steht im Handbuch „Register 40001“, ist in der Anfrage meist Adresse 0 gemeint. Wirken alle Werte verschoben, lesen Sie ein Register früher oder später.
- Vertauschte Wörter. Eine Spannung von 1.2e-38 oder 2.6e+9 statt 230 V bedeutet fast immer, dass die beiden Register in falscher Reihenfolge stehen. Probieren Sie CDAB.
- Holding- oder Input-Register. 4xxxx-Register werden mit Funktion 03 gelesen, 3xxxx-Register mit Funktion 04. Dieselbe Nummer kann in beiden Tabellen unterschiedliche Daten enthalten.
- Versteckte Skalierung. 2305 statt 230.5 ist ein Wert in Zehnteln. Registerkarten geben das als Faktor (0.1) oder als Anzahl der Nachkommastellen an.
- Vorzeichenbehaftete Werte als vorzeichenlos gelesen. Ins Netz eingespeiste Leistung oder eine Temperatur unter null erscheint als Zahl nahe 65535, wenn sie als UInt16 gelesen wird.
Fragen aus der Praxis
Warum bekomme ich statt meines Floats eine riesige Zahl oder NaN?
Die beiden Register sind mit ziemlicher Sicherheit in falscher Reihenfolge zusammengesetzt. Ein Float32 trägt Vorzeichen und Exponent in den ersten Bytes; kommt das niederwertige Wort zuerst, landen Bits der Mantisse im Exponenten und es entstehen Werte wie 4.6e-41 oder 2.6e+9. Vergleichen Sie die vier Zeilen der 32-Bit-Tabelle: Die Zeile, die zu Ihrer Anzeige passt, ist die Byte-Reihenfolge, die Ihre Software braucht.
Im Handbuch steht 40001, meine Software will 0. Was stimmt?
Beides zeigt auf dasselbe Register. 40001 ist eine Registernummer in der klassischen Modicon-Schreibweise: Die führende 4 kennzeichnet ein Holding-Register, gezählt wird ab 1. Die Anfrage auf der Leitung enthält eine nullbasierte Adresse, aus 40001 wird also 0 und aus 40002 wird 1. Die meisten Programme fragen nach der nullbasierten Adresse. Geben Sie hier 40001 als erste Adresse ein, damit die Beschriftung zu Ihrem Handbuch passt.
Welche Byte-Reihenfolge verwenden Energiezähler und Solar-Wechselrichter?
Eine feste Regel gibt es nicht. Die Modbus-Spezifikation definiert nur 16-Bit-Register, daher entscheidet jeder Hersteller selbst, wie er 32-Bit-Werte verpackt. Viele Geräte senden das höherwertige Wort zuerst (ABCD), ein großer Teil der Zähler und SPS jedoch das niederwertige zuerst (CDAB). Die Registerkarte sollte das angeben. Wenn nicht, lesen Sie einen bekannten Wert wie Netzspannung oder Frequenz und nutzen Sie „Wert finden“.
Wie füge ich Werte aus Modbus Poll oder einem Log ein?
Fügen Sie die Zeilen unverändert ein. Der Decoder nimmt den Wert nach einem Gleichheitszeichen oder Doppelpunkt, aus 0 = 17254 und 1 = 32768 werden also zwei Register. Wählen Sie Dezimal, wenn Ihre Werte dezimal sind; kann die Eingabe kein Hex sein (zum Beispiel fünfstellige Zahlen), schaltet der Decoder selbst auf Dezimal um.
Werden meine Daten irgendwohin gesendet?
Nein. Die Dekodierung läuft als Teil dieser Seite in Ihrem Browser. Nichts, was Sie einfügen, wird auf einen Server hochgeladen oder dort gespeichert.
Verwandte Werkzeuge
- Adress-Umrechner40001 ↔ Offset 0, Schreibweise 4x/3x/0x/1x, 5- und 6-stellige Adressen.
- Wert-KodiererEinen Wert wie 230.5 in Register für jede Byte-Reihenfolge umwandeln.