PLCBytes
Modbus-Werkzeuge

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

Beispiel
Skalierung

Wie in der Registerkarte: Der Gerätewert ist das Register geteilt durch diese Zahl. Nur für Ganzzahltypen.

Register

ReihenfolgeHexDezimalBytes

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

TypRegisterBereich
UInt1610 … 65535
Int161−32768 … 32767
UInt3220 … 4294967295
Int322−2147483648 … 2147483647
Float322±3.4e38, ~7 digits
UInt6440 … 18446744073709551615
Int644−9223372036854775808 … 9223372036854775807
Float644±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

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