Modbus Wert-Kodierer
Geben Sie den Wert ein, den Sie senden wollen, und wählen Sie den Datentyp. Sie erhalten die Register für jede Byte-Reihenfolge in Hex und dezimal sowie den Frame, der sie schreibt.
Wert
BeispielWie in der Registerkarte: Der Gerätewert ist das Register geteilt durch diese Zahl. Nur für Ganzzahltypen.
Register
| Reihenfolge | Hex | Dezimal | Bytes |
|---|
Schreibanfrage
Der Frame, den ein Master zum Schreiben dieser Register sendet: Funktion 06 für ein Register, 16 für mehrere.
- Modbus RTU (CRC Low-Byte zuerst)
- Modbus TCP (Transaktion 1)
Läuft komplett in Ihrem Browser. Ihre Eingaben werden an keinen Server gesendet.
Datentypen im Überblick
| Typ | Register | Bereich |
|---|---|---|
| UInt16 | 1 | 0 … 65535 |
| Int16 | 1 | −32768 … 32767 |
| UInt32 | 2 | 0 … 4294967295 |
| Int32 | 2 | −2147483648 … 2147483647 |
| Float32 | 2 | ±3.4e38, ~7 digits |
| UInt64 | 4 | 0 … 18446744073709551615 |
| Int64 | 4 | −9223372036854775808 … 9223372036854775807 |
| Float64 | 4 | ±1.8e308, ~15 digits |
So funktioniert es
Ein Modbus-Register enthält 16 Bit. Größere Werte werden in Bytes zerlegt und auf zwei oder vier Register verteilt, die Reihenfolge bestimmt das Gerät. Der Kodierer bildet die Bytes Ihres Werts und zeigt sie in allen vier Reihenfolgen. Wählen Sie die Zeile, die Ihr Gerät erwartet. Wenn Sie unsicher sind, lesen Sie zuerst einen bekannten Wert mit dem Register-Decoder und verwenden Sie zum Schreiben dieselbe Reihenfolge.
Ganzzahltypen mit Skalierung funktionieren so, wie Registerkarten sie beschreiben. Ein Sollwert von 230.5 V mit „÷10“ wird als 2305 gesendet. Gerechnet wird exakt im Dezimalsystem, 230.55 mit ÷10 wird also auf 2306 gerundet, und Sie erfahren davon.
Typische Fehler
- Einen halben Wert schreiben. Ein 32-Bit-Wert braucht beide Register in einer Anfrage (Funktion 16). Zwei getrennte Schreibvorgänge mit Funktion 06 hinterlassen dazwischen einen gemischten Wert, und viele Geräte lehnen sie ab.
- Skalierung vergessen. Wer 230 in ein Register schreibt, das Zehntel erwartet, stellt 23.0 ein.
- Negative Zahlen in vorzeichenlosen Registern. Aus -1 wird 65535 (FFFF). Prüfen Sie, ob das Register vorzeichenbehaftet ist, bevor Sie Werte unter null schreiben.
- Nur lesbare Register. Input-Register (3x) lassen sich gar nicht schreiben. Manche Holding-Register sind ebenfalls schreibgeschützt und antworten mit Ausnahme 02 oder 03.
Fragen aus der Praxis
Wie schreibe ich einen Float in ein Modbus-Register?
Wählen Sie Float32, geben Sie den Wert ein und wählen Sie die Byte-Reihenfolge Ihres Geräts. Schreiben Sie beide Register gemeinsam mit Funktion 16, beginnend beim ersten Register des Paars. Den kompletten Frame zeigt das Feld Schreibanfrage.
Warum wird aus 0.1 der Wert 0.100000001?
Float32 speichert Zahlen binär mit etwa 7 signifikanten Stellen, und 0.1 hat keine exakte binäre Form. Der nächste darstellbare Wert ist 0.100000001. Geräte zeigen ihn als 0.1 an, das ist also normal. Für exakte Dezimalwerte nehmen Sie Float64 oder eine skalierte Ganzzahl.
Wie werden negative Zahlen gespeichert?
Vorzeichenbehaftete Typen nutzen das Zweierkomplement. -1 ist in Int16 FFFF und in Int32 FFFF FFFF; -10 mit Skalierung ÷10 ist -100, also FF9C. Steht in der Registerkarte UInt16, nimmt das Gerät überhaupt keine negativen Werte an.
Funktion 06 oder 16?
Funktion 06 schreibt genau ein Register. Funktion 16 schreibt ein oder mehrere Register in einer Anfrage, was für 32- und 64-Bit-Werte nötig ist. Manche Geräte akzeptieren nur Funktion 16, auch für ein einzelnes Register; das Handbuch nennt das meist.
Was bedeutet die Skalierung ÷10 hier?
Es ist dieselbe Skalierung, die die Registerkarte zum Lesen angibt: Der Gerätewert ist das Register geteilt durch 10. Um 230.5 zu schreiben, sendet der Kodierer 2305. ÷100 und ÷1000 funktionieren genauso.
Verwandte Werkzeuge
- Register-DecoderFloat32, Int32, UInt16 und Bits in jeder Byte-Reihenfolge, dazu „Wert finden“.
- Adress-Umrechner40001 ↔ Offset 0, Schreibweise 4x/3x/0x/1x, 5- und 6-stellige Adressen.
- CRC-16-RechnerModbus-RTU-Prüfsumme in Übertragungsreihenfolge, dazu eine vollständige Frame-Prüfung.