Zahlentheorie zu INT32, REAL32
Einige Geräte bieten die Möglichkeit, den Datenwert als Gleitkommazahl („Float“/ REAL) zu übertragen.
Vorteile:
- bei der Inbetriebnahme ist der Datenwert direkt ablesbar
- keine Skalierung auf 0x7FFF o.ä. in der PLC nötig
- Werte (insbesondere kleiner 1) sind kommabehaftet darstellbar z.B. bei Wiege-Anwendungen
Nachteile:
- Praktisch: bei 16-Bit-Analogwerten größere Datenbreite, Prozessabbild und damit EtherCAT Auslastung vergrößert sich um den Faktor 2 (INT16 → REAL32)
Bei 24-Bit-Analogwerten keine Auswirkung (INT32 → REAL32) - Theoretisch: es treten Abbildungsfehler auf
Zum Thema „Abbildungsfehler“ einige Betrachtungen:
- Der Aufbau des 32 Bit-Datentyps REAL nach IEC 61131 3 / IEC 559 / IEEE754 ist 1 Bit Vorzeichen, 8 Bit Exponent zur Basis 2 mit Vorzeichen (-126...+127), 23 Bit Mantisse (0...8.388.607). Der theoretische Wertebereich ist somit dezimal ca. ±3,402823… ⋅ 10+38.
- Es gibt zwei besondere Effekte bei der Konvertierung Integer → Float, die zu berücksichtigen sind, gleichgültig ob die Konvertierung im Analoggerät oder in der PLC steuerungsseitig erfolgt:
- Der Abstand zweier aufeinanderfolgender als REAL32 darstellbaren Zahlen variiert: sobald die Schritte an einer Dezimalstelle größer 1 werden, sind diese Dezimalstellen für eine lineare (vollständige) Abbildung eines Zahlenraumes nicht mehr tauglich.
- es kommt zu Informationsverlust durch den erzwungenen Übergang vom dezimalen in den binären Zahlenraum (und zurück). Entspricht eine Dezimalzahl ab einer Dezimalstelle nicht mehr der Float-Repräsentation, sind diese Dezimalstellen ab hier und abwärts ebenfalls nicht mehr verwendbar.
Im Folgenden sind einige Zahlenbeispiele aufgeführt (inkl. Tausendertrennzeichen, analogtechnisch verwendbare Teil hervorgehoben): - Hersteller/Produktspezifisch ist zu beachten, mit welcher Schrittweite Datenwerte überhaupt dargestellt werden müssen: wird ein Auswahlbereich von 10 V auf 23 Bit + Vorzeichen aufgelöst, ist die Schrittweite 10 V / 8.388.608 = 1,192... µV, im Beckhoff extendedRange 10 V / 7.812.500 = 1,28 µV. Es reicht also im Folgenden, die Betrachtungen mit dieser Feinheit durchzuführen.
- Zur beispielhaften Orientierung sei hier die Differenz simuliert zwischen einer REAL32 (als informationsverlustbehaftet angenommen) und einer REAL64 (als ideal richtig angenommen) im gängigen Auswahlbereich 10 V einer Beckhoff ELM3xxx, wenn beide aus dem 24 Bit ADC‑Integer-Wert (0...7.812.500, also 1 Digit = 1,28 µV) berechnet werden:
- Bemerkenswert ist, dass der Abbildungsfehler (Verfälschung des Datenwerts bei REAL64 → REAL32) mit dem Datenwert größer wird. Schauen wir uns z.B. den Datenwert 9,0 V (INT32 vom ADC: 7.031.250) an. Die Simulation weist hier einen Abbildungsfehler von ca. 5,2 ⋅ 10-7 V = 0,52 µV = 0,052 ppmMBE=10V aus. Diesen Wert müssen wir prüfen gegen
- die digitale Auflösung: 7.812.500 = 10V,
1 Digit = 1,28 µV → der Abbildungsfehler ist 2x kleiner und nicht relevant - eine übliche ELM3xxx-Grundgenauigkeit von 100 ppmMBE=10V = 1000 µV → der Abbildungsfehler ist absolut vernachlässigbar
- Interessant ist der mikroskopische Blick in den Fehlerverlauf, z.B. um den Punkt 6,0 V herum, geplottet in der Schrittweite 1,28 µV (24 Bit ADC‑Auflösung):
6,0 V lassen sich fehlerfrei in REAL32 darstellen; in der Umgebung des Wertes sind überlagerte Schwingungen zu erkennen. - Da der Abbildungsfehler mit dem Auswahlbereich wächst, empfiehlt sich ein Blick auf einen MBE = 1000 V:
Mit 3,2 ⋅ 10-5 V = 35 µV wird er zwar recht groß, bleibt aber bei 0,035 ppmMBE=1000V und ist somit kein Hinderungsgrund für REAL32-Transport. - Zusammenfassung: Praktisch kann eine REAL32 Zahl also auf ca. 7...8 Dezimalstellen („worst case“ also 10-7 = 0,1 ppm) genau einen gegebenen Zahlenwert sinnvoll abbilden. Mit „Dezimalstelle“ ist hier eine werthaltige Ziffer (Vor- und Nachkomma) ohne führende Null gemeint.
Zum Größenvergleich: ppm = 10-6 (u.a. verwendet in der Messunsicherheitsangabe z.B. 100 ppm) oder 1/7.812.500 = 128 ⋅ 10-9 = 0,128 ppm (verwendet als Bitauflösung im Beckhoff 24 Bit-extendedRange).
Das bedeutet, dass REAL32 Zahlen für den Transport von 16-Bit-aufgelösten Zahlen bedenkenlos verwendet werden können, beim Transport von 24-Bit Analogwerten nähern sie sich der Auflösungsgrenze, können aber noch verwendet werden. Für höchste Ansprüche wird empfohlen, Integer-PDO über EtherCAT zu übertragen und in der Steuerung zu konvertieren. - Dem Wunsch nach breiter Verwendung von REAL64 (LREAL, Double Precision) in „einfachen“ Analoggeräten muss derzeit (2024) noch eine Absage erteilt werden; die Gleitkommaberechnungen erfordern µC-seitig entsprechende Fähigkeiten, diese sind für REAL32 teilweise gegeben, für REAL64 aber noch weitgehend nicht. REAL64-Rechnungen sind vorzugsweise in der PLC durchzuführen.
- Für weitere Überlegungen dazu sei das Studium der IEEE-754 und die praktische Erprobung mit Online-Rechnern (z.B. „IEEE-754 Floating Point Converter“) oder eigene Simulationen empfohlen.
Auswirkungen bei der Verwendung von Fließkomma-Arithmetik in der PLC Die oben beschriebenen zwangsläufigen Phänomene von Rundungs- und Abbildungsfehlern können erhebliche und überraschende ergebnisverfälschende Auswirkungen bei umfassenden Fließkomma-Rechnungen in der Steuerung haben, insbesondere wenn sehr große (z.B. > 106) und sehr kleine Zahlen (z.B. < 10-6) aufeinandertreffen. Zur Minimierung (aber nicht Eliminierung!) dieser, sollten steuerungsseitig vorzugsweise LREAL-Berechnungen durchgeführt werden. |