So funktioniert der Modbus-Register-Decoder
Modbus überträgt Daten in 16-Bit-Registern, und jedes Register reist mit dem höherwertigen Byte zuerst. Mehr legt das Protokoll nicht fest. Eine Temperatur als 32-Bit-Gleitkommazahl oder ein Energiezähler als 64-Bit-Ganzzahl verteilt sich auf zwei oder vier Register, und deren Reihenfolge wählt der Gerätehersteller. Die meisten Geräte senden das höherwertige Register zuerst, manche das niederwertige, und einige tauschen zusätzlich die beiden Bytes in jedem Register.
Der Decoder nimmt die Register genau so, wie Ihr Master, Gateway oder Testwerkzeug sie anzeigt, und dekodiert sie in allen vier Reihenfolgen zugleich. Die Reihenfolge wird mit den Buchstaben der Bytes des Werts geschrieben, A ist das höchstwertige: ABCD ist Big-Endian, CDAB der übliche Worttausch, BADC tauscht die Bytes in jedem Register, DCBA ist vollständig Little-Endian.
Die richtige Byte-Reihenfolge finden
Lesen Sie ein Registerpaar, während Sie ungefähr wissen, was das Gerät melden sollte, und suchen Sie die Zeile, die passt. Die Register 0x4120 0x0000 ergeben als ABCD den Wert 10,0. Als CDAB gelesen ergeben sie 2,3 × 10⁻⁴¹, einen Wert, den kein Sensor meldet; solche Zeilen graut der Decoder aus. Sendet das Gerät das niederwertige Register zuerst, sehen Sie stattdessen 0x0000 0x4120, und die Zeile CDAB zeigt die 10.
Kennen Sie die Reihenfolge eines Werts, gilt sie für jeden Wert dieses Geräts und Datentyps. Tragen Sie sie in die Konfiguration des Masters ein, statt im SPS-Programm Bytes zu tauschen.
Skalierung und Datentypen
Viele Geräte senden Ganzzahlen mit impliziter Skalierung: ein Druck von 1234, der 12,34 bar bedeutet, oder eine Temperatur in Zehntelgrad. Geben Sie Skalierungsfaktor und Offset aus der Registertabelle ein, dann zeigt der Decoder den technischen Wert neben dem Rohwert; der Wert ist Rohwert × Skalierungsfaktor + Offset. Derselbe Faktor gilt rückwärts, wenn Sie einen Wert zum Schreiben kodieren.
INT16 und UINT16 unterscheiden sich nur darin, wie das oberste Bit gelesen wird: 0xFFFF ist ohne Vorzeichen 65535 und mit Vorzeichen −1. Die meisten Registertabellen nennen den Typ jeder Adresse; fehlt er, ist ein Wert, der nie negativ sein sollte, meist vorzeichenlos.
Registernummern und Adressen
Gerätehandbücher führen Register oft als 40001, 30001 oder 400001. Das ist die Modicon-Konvention: Die erste Ziffer nennt die Tabelle (4 für Holding-Register, 3 für Input-Register, 0 für Coils, 1 für diskrete Eingänge), der Rest zählt ab 1. Die Anfrage auf der Leitung enthält die ab 0 gezählte Adresse, 40001 ist also Holding-Register-Adresse 0, gelesen mit Funktionscode 03. Geben Sie die Referenz ein, um Protokolladresse, Funktionscodes und die Register zu sehen, die ein Mehrregisterwert belegt.
Ein Fehler um eins ist hier der häufigste Grund für einen plausiblen, aber falschen Wert: Der Master liest die zweite Hälfte eines Werts und die erste Hälfte des nächsten.
Häufige Fragen
Warum zeigt der Decoder bei manchen Zeilen NaN?
Eine Gleitkommazahl, deren Exponentenbits alle eins sind, ist keine Zahl oder unendlich. Eine falsche Byte-Reihenfolge erzeugt dieses Muster oft; ebenso ein Gerät, das einen Sensorfehler absichtlich mit NaN meldet. Für den zweiten Fall das Gerätehandbuch prüfen.
Kann ich die Register als eine Hex-Zeichenfolge eingeben?
Ja. Acht oder sechzehn Hex-Ziffern ohne Leerzeichen werden in Register zu vier Ziffern aufgeteilt, 41200000 wird also als 0x4120 0x0000 gelesen.
Und Modbus TCP?
Die Registeranordnung ist bei TCP und RTU dieselbe; nur die Rahmen unterscheiden sich. Die Byte-Reihenfolge von Mehrregisterwerten gehört zum Gerät, nicht zum Übertragungsweg.