IEEE-754-Gleitkommazahlen umrechnen

Rechnen Sie Dezimalzahlen in IEEE-754-Hexwerte mit 32 oder 64 Bit um oder zurück. Sehen Sie Modbus-Registerwörter in vier dargestellten Anordnungen.

Sie möchten eine Zahl übertragen? Wandeln Sie sie hier um. Um Registerwerte eines Geräts zu dekodieren, verwenden Sie den Modbus-Registerdekodierer.

Modbus und serielle Verbindungen Aktualisiert Kostenlos, ohne Anmeldung

32-Bit-Gleitkommazahl

230.5dezimal
4366 8000gespeichert als 32-Bit-Einfachpräzision
01000011

A 43

01100110

B 66

10000000

C 80

00000000

D 00

  • Vorzeichen, 1 Bit
  • Exponent, 8 Bit
  • Mantissenfeld, 23 Bit

+1.f =1,80078125×27=230,5

Vorzeichen
0, positiv
Exponent
134 − 127 = 7
Mantisse
0x668000

Exakt gespeichert.

Der Abstand zur nächsten 32-Bit-Gleitkommazahl beträgt hier 1,526 × 10⁻⁵.

Beispielwerte
Was möchten Sie umrechnen?
Umrechnung
Genauigkeit
Wert

Zum Beispiel 230,5, −12 oder 1,5e-3

Acht Stellen bei 32 Bit, sechzehn bei 64 Bit; Leerzeichen sind erlaubt

32-Bit-Einfachpräzision als Hexadezimalwert

0x43668000

32-Bit-Einfachpräzision.

Tatsächlich gespeicherter Wert
230,5
Vorzeichenbit
0 (positiv)
Exponent
134 − 127 = 7
Mantissenfeld, 23 Bit
0x668000
Werteklasse
Normale Zahl
Modbus-Register, ABCD (Big Endian)
4366 8000
Modbus-Register, CDAB (Worttausch)
8000 4366
Modbus-Register, BADC (Bytetausch)
6643 0080
Modbus-Register, DCBA (Little Endian)
0080 6643
So wird es berechnet
  1. x = (−1)^s × 1.f × 2^(e − 127)=(−1)⁰ × 1,80078125 × 2⁷=230,5

230,5 wird als IEEE-754-Gleitkommazahl mit 32-Bit-Einfachpräzision als 0x43668000 gespeichert.

Tipp: Ein plausibler Wert in einer Wortfolge ist ein Hinweis, kein Beweis. Bestätigen Sie Byte- und Wortfolge anhand der Registertabelle des Geräts oder mit einer kontrollierten Prüfung eines bekannten Werts. Die Register 4120 0000 ergeben 10 in ABCD-Folge und 2,3e-41 in CDAB-Folge.

Gleitkommazahlen in Hex umrechnen und zurück

Eine IEEE-754-Gleitkommazahl mit einfacher Genauigkeit speichert eine Zahl in 32 Bit: einem Vorzeichenbit, acht Exponentenbits und 23 Bits für den Bruchteil. 230,5 wird als 0x43668000 gespeichert. Energiezähler, Netzanalysatoren und SPS verwenden dieses Format für Werte wie Spannung, Leistung und Frequenz und übertragen es über Modbus in zwei 16-Bit-Registern.

Die von einem Gerät gelieferten Registerwerte sind Rohbits. Als ganze Zahlen gelesen ergeben sie keinen sinnvollen Messwert. Daher müssen die Bits in der richtigen Wortfolge als Gleitkommazahl dekodiert werden.

Wert einer gespeicherten Gleitkommazahl

x = (−1)s × 1.f × 2e − 127

s ist das Vorzeichenbit, e das 8-Bit-Exponentenfeld und f sind die 23 Bruchteilsbits als binärer Bruch. Die führende 1 ist implizit und wird nicht gespeichert. Bei 64-Bit-Gleitkommazahlen hat der Exponent 11 Bits und einen Bias von 1023; der Bruchteil hat 52 Bits.

Dezimal in Hex

Für normale Werte: s, e und f so wählen, dass (−1)s × 1.f × 2e − 127 möglichst nahe bei x liegt

Die meisten Dezimalzahlen sind binär nicht exakt darstellbar. Die Gleitkommazahl speichert den nächsten darstellbaren Wert. Aus 0,1 wird 0,100000001490116, gespeichert als 0x3DCCCCCD. Der Rechner zeigt den tatsächlich gespeicherten Wert und den Rundungsfehler.

Sonderwerte

e = 0: null oder subnormal; e = 255: Unendlich oder NaN

Ein Exponentenfeld aus lauter Nullen kennzeichnet null und subnormale Zahlen unter 1,18 × 10−38. Lauter Einsen kennzeichnen Unendlich (Bruchteil null) oder NaN, also „keine Zahl“. Viele Zähler senden NaN, häufig 0x7FC00000, wenn sie einen Wert nicht erfassen können.

Modbus definiert nur 16-Bit-Register, die mit dem höchstwertigen Byte zuerst übertragen werden. Eine 32-Bit-Gleitkommazahl belegt daher zwei Register. Der Standard legt nicht fest, welches Register zuerst kommt. Viele Geräte senden das höchstwertige Wort zuerst (ABCD), andere das niederwertigste zuerst (CDAB); manche vertauschen zusätzlich die Bytes innerhalb jedes Registers (BADC, DCBA). Bestätigen Sie die Folge anhand der Registertabelle des Geräts oder mit einer kontrollierten Prüfung eines bekannten Werts. Ein bloß plausibel wirkender Messwert belegt die Folge nicht.

Beispiele für IEEE-754-Gleitkommazahlen

Frequenz von 50 Hz

50 ist 1,5625 × 25. Das Vorzeichenbit ist 0, das Exponentenfeld 5 + 127 = 132 und der Bruchteil 0,5625. Das Ergebnis ist 0x42480000 und wird über Modbus in ABCD-Folge als die Register 4248 0000 übertragen.

32-Bit-Einfachpräzision als Hexadezimalwert 0x42480000 Im Rechner öffnen

Dieselben Register in falscher Folge

Sendet ein Zähler das niederwertige Wort zuerst und liest die Software es als höchstwertiges, kommt 50 Hz als 0000 4248 an. Als ABCD gelesen ergibt das 2,3777e‑41, eine subnormale Zahl nahe null. Ein winziger, riesiger oder NaN-Wert anstelle eines normalen Werts ist ein häufiger Hinweis auf eine falsche Wortfolge.

Dezimalwert 2,3777e-41 Im Rechner öffnen

Warum 0,1 nicht genau 0,1 ist

Binär wiederholt sich 0,1 endlos, ähnlich wie 1/3 im Dezimalsystem. Die nächste 32-Bit-Gleitkommazahl ist 0,100000001490116, gespeichert als 0x3DCCCCCD. Der Fehler beträgt etwa 1,5 × 10−9, weit unter der Genauigkeit eines Zählers. Deshalb kann ein exakter Gleichheitsvergleich einer Gleitkommazahl mit 0,1 fehlschlagen.

32-Bit-Einfachpräzision als Hexadezimalwert 0x3DCCCCCD Im Rechner öffnen

Gleitkommazahlen und Hexwerte für übliche Werte

IEEE-754-Bitmuster von Werten, die in Zählerregistern vorkommen, in ABCD-Folge.

Dezimal32 Bit64 Bit
00x000000000x0000000000000000
10x3F8000000x3FF0000000000000
−10xBF8000000xBFF0000000000000
0.50x3F0000000x3FE0000000000000
0.10x3DCCCCCD0x3FB999999999999A
20x400000000x4000000000000000
100x412000000x4024000000000000
500x424800000x4049000000000000
600x427000000x404E000000000000
1000x42C800000x4059000000000000
2300x436600000x406CC00000000000
4000x43C800000x4079000000000000
10000x447A00000x408F400000000000
3.141590x40490FD00x400921F9F01B866E

Diese Tabelle als CSV herunterladen

Fragen zu IEEE-754-Gleitkommazahlen

Wie viele Stellen hat eine 32-Bit-Gleitkommazahl?

Etwa sieben signifikante Dezimalstellen. Oberhalb von 16.777.216 (224) kann nicht mehr jede ganze Zahl gespeichert werden. Das ist für Energiezähler wichtig: Ein kWh-Zählerstand als 32-Bit-Gleitkommazahl kann jenseits von etwa 16,8 Millionen nicht mehr in Einer-Schritten zählen. Für große Summen verwenden Zähler deshalb 64-Bit-Gleitkommazahlen oder Ganzzahlen.

Was bedeuten ABCD, CDAB, BADC und DCBA?

Das sind vier häufige Byteanordnungen für einen 32-Bit-Wert in zwei Registern. A ist das höchstwertige Byte. ABCD sendet das höchstwertige Register zuerst mit Big-Endian-Bytes, wie Modbus bei einzelnen Registern. CDAB vertauscht die beiden Register, BADC die Bytes in jedem Register und DCBA beides. Prüfen Sie die tatsächliche Anordnung anhand der Registertabelle des Geräts.

Ist der Hexwert identisch mit den vom Zähler gesendeten Bytes?

In ABCD-Folge ja: Der Hexwert zeigt die vier Bytes in ihrer Reihenfolge auf der Leitung. Für andere Folgen verwenden Sie die Registerwörter, die der Rechner für diese Folge angibt. Der Modbus-Registerdekoder beginnt mit den Registern und zeigt alle Folgen nebeneinander.

Warum meldet ein Zähler NaN?

NaN ist nach IEEE keine Zahl und nicht null. Ein Zähler kann NaN für einen nicht verfügbaren Messwert verwenden, nach einer ungültigen Berechnung ausgeben oder bei falsch dekodierter Registerfolge scheinbar liefern. Prüfen Sie die Registertabelle und den Gerätestatus, um die Ursache zu bestimmen. Erfassen Sie NaN nicht als null.

Grenzen dieses Ergebnisses

  • Modbus definiert nur 16-Bit-Register. Wie ein Gerät eine Gleitkommazahl auf mehrere Register verteilt, legt seine eigene Registertabelle fest, nicht das Protokoll. Die vier angezeigten Anordnungen decken nicht jede mögliche Gerätebelegung ab, insbesondere bei 64-Bit-Werten.
  • Für NaN gibt es viele Bitmuster. Dieses Werkzeug zeigt das eingegebene Muster oder das Standardmuster der Plattform.
  • Eine Dezimaleingabe wird zunächst als 64-Bit-Zahl gelesen. Ziffern jenseits von etwa 17 signifikanten Stellen werden daher ignoriert.

Kontinuierlich messen

Edge liest Modbus-Zähler über TCP und RTU und dekodiert jedes Register anhand von Datentyp und Wortfolge in der Gerätevorlage. Ein ZMB verbindet einen RS-485-Zähler drahtlos mit dem Gateway.

Verwandte Leitfäden

Quellen

  1. IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019) (öffnet in einem neuen Tab) IEEE, 2019-07-22
  2. MODBUS Application Protocol Specification (öffnet in einem neuen Tab) (PDF) Modbus Organization, V1.1b3, 2012-04-26