Zahlenformate: Ganzzahlen

Ganzzahlen sind ganze, mit Vorzeichen versehene Dualzahlen. Es wird unterschieden zwischen Ganzzahlen mit dem Datentyp INTEGER (INT) bei einer Bit-Kettenlänge von 16 Bits (1 Wort ), Bit 15 enthält das Vorzeichen VZ und Ganzzahlen mit dem Datentyp DOPPELINTEGER (DINT) bei einer Bit-Kettenlänge von 32 Bits ( 1 Doppelwort / 2 Worte ), Bit 31 enthält das Vorzeichen VZ. Siehe auch Bit und Byte.

Ganzzahlen INTEGER: Der Zahlenbereich ertsreckt sich von Bit 0 ( 20, LSB - Least Significant Bit - niedrigwertigstes Bit ) bis Bit 14 ( 214 ). Bit 15 ist das sogenannte MSB ( Most Significant Bit - höchstwertigstes Bit ) mit dem festgelegt wird ob die Dualzahl positiv oder negativ ist.

Der positive Zahlenbereich geht von 010 bis +3276710 bzw. von 20 bis + (215 - 1). Der negative Zahlenbereich geht von -110 bis -3276810 bzw. bis - (215).

Ganzzahlen DOPPELINTEGER: Der Zahlenbereich erstreckt sich von Bit 0 ( 20 ) bis Bit 30 ( 231 ). Bit 31 legt hier fest ob es sich um eine positive oder negative Dualzahl handelt.

Der positive Zahlenbereich geht von 010 bis +214748364710 bzw. von 20 bis + (231 - 1). Der negative Zahlenbereich geht von -110 bis -214748364810 bzw. bis - (231 ).

Vorzeichenregeln für INT und DINT:

VZ: "0" = positive Dualzahl
VZ: "1" = negative Dualzahl in Zweierkomplementdarstellung

Bezeichnungen an den Bitketten:

MSB = Most Significant Bit (höchstwertigstes Bit)
LSB = Least Significant Bit (niedrigwertigstes Bit)

Merkregeln für das "Lesen" von Ganzzahlen:

  • positive Ganzzahl - ist der höchste Stellenwert "0" bedeutet dies positive Zahl. Der Betrag der Zahl entspricht der Summe aller Stellenwerte welche den Signalzustand "1" haben.

Bitmuster einer Ganzzahl vom Datentyp INT: 0000 0000 0011 10002

Zahlenwert der Ganzzahl vom Datentyp INT: + ( 32 + 16 + 8) = +56

  • negative Ganzzahl - ist der höchste Stellenwert "1" bedeutet dies negative Zahl. Der Betrag der Zahl entspricht der Summe aller Stellenwerte welche den Signalzustand "0" vermehrt um +1 haben.

Bitmuster einer Ganzzahl vom Datentyp INT: 1111 1111 1100 10002

Zahlenwert der Ganzzahl vom Datentyp INT: - (( 32 + 16 + 4 + 2 + 1) + 1) = -56

Gleitpunktzahlen nach IEEE

IEEE - Institute of Electrical and Electronics Engineers

Als Gleitpunktzahlen bezeichnet man gebrochene, mit einem Vorzeichen versehene Zahlen. Mit der Gleitpunktdarstellung wird einerseits die Forderung erfüllt dass man ein möglichst großes Intervall der reellen Zahlen darstellen kann. Weiterhin können sehr kleine Zahlen sehr genau dargestellt werden. Für die Darstellung einer reellen Zahl als Gleitpunktzahl benötigt man nicht nur die Mantisse ( Ziffernfolge ), man muß auch die Kommaposition definieren. Das realisiert man mit dem Exponenten den man aus der technisch-wissenschaftlichen Notation kennt.

Gleitpunktzahlen haben den Datentyp REAL. Diese Zahlen bestehen intern aus drei Komponenten: einer 32-Bit Mantisse, aus dem 8-Bit-Exponenten Exp zur Basis 2 mit einem Abzugsfaktor von 127 (BIAS) und dem Vorzeichen VZ. Beim Exponenten gilt folgendes: 1 <= Exponent <= 254 und durch die Verwendung des BIAS +127 entfällt ein extra Vorzeichen. Den gebrochenen Anteil der Zahl stellt die 32-Bit Mantisse dar. Der ganzzahlige Anteil der Mantisse ist bei normalisierten Gleitpunktzahlen immer 1 und wird nicht gespeichert. Die Codierung umfasst daher 32 Bits bzw 1 Doppelwort.

Die Berufsvereinigung IEEE hat zwei Normen verabschiedet die in binären Systemen ( PC's, andere Rechner wie z.B. SPS CPU ) benutzt werden. Das sind der Datentyp SHORT REAL ( Länge 32 Bit, Zahlenbereich von 1,5 x 10-45 bis 3,4 x 1038 ) mit einem Bit als Vorzeichen, 8 Bit für den Exponenten und 23 Bit für die Mantisse sowie der Datentyp LONG REAL ( Länge 64 Bit, Zahlenbereich von 5,0 x 10-324 bis 1,7 x 10308 ) mit einem Bit für das Vorzeichen, 11 Bit für den Exponenten und 52 Bit für die Mantisse. Bit 0 befindet sich dabei ganz rechts und Bit 32 ( SHORT REAL ) bzw. Bit 64 ( LONG REAL ) befinden sich ganz links. Bei einer speicherprogrammierten Steuerung werden wir hauptsächlich den Datentyp SHORT REAL vorfinden unter der Bezeichnung REAL.

Die drei Komponenten einer Gleitpunktzahl werden einzeln ausgewertet. Von Bit 0 ( 2-23) bis Bit 22 ( 2-1 ) werden die Stellen vom Komma rechts hinterlegt. Die Länge der Mantisse ( 23 Bit oder 52 Bit ) bestimmt die Genauigkeit der Gleitpunktzahl GPZ. Diese Stellen bezeichnet man als Mantisse. Der Mantisse wird eine nicht dargestellte 1 vorangestellt. Die in der Mantisse dargestellten Bit's entsprechen den Nachkommastellen, sodass sich hier eine dezimale Gleitpunktzahl ergibt die zwischen der Zahl 110 und der Zahl 210 liegt. In Bit 23 (20) bis Bit 30 (27) (Zeichenlänge 1 Byte) wird der Exponent hinterlegt der angibt mit welcher Potenz der Basis man die Zahl multiplizieren muß, in diesem Fall die Basis 2 ( binär ). In einer SPS wird der Exponent als vorzeichenlose 8 Bit Dualzahl dargestellt und ergibt sich aus der Subtraktion der Zahl 12710. Bit 31 ist das MSB in dem das Vorzeichen hinterlegt ist ( positive oder negative Gleitpunktzahl).

Normalerweise gibt es kein Unterschied zwischen den Zahlen 5 und 5.0. Bei den Zahlenformaten in Step7 jedoch muß man darauf exakt achten da hier die Zahlen 5 und 5.0 vollkommen unterschiedliche Zahlenformate darstellen. Die Zahl 5 ist eine Ganzzahl mit Datentyp INTEGER, die Zahl 5.0 ist eine Gleitpunktzahl mit dem Datentyp REAL. Ganzzahlen und Gleitpunktzahlen können nicht addiert werden, addieren kann man nur Zahlen mit gleichem Datentyp.

Man kann dezimale Gleitpunktzahlen und binäre Gleitpunktzahlen ineinander umrechnen. Schreibt man eine bestimmte Anzahl von Ziffern für die Mantisse vor, geht der Umrechenvorgang in beide Richtungen nicht immer auf. Die dezimale Zahl 0,1 z.B. lässt sich nicht genau durch eine reale Gleitpunktzahl in einer SPS darstellen. Das liegt daran das beim Umrechnen von dezimalen Gleitpunktzahlen in binäre Gleitpunktzahlen Rundungsfehler auftreten. Nach den Festlegungen in IEEE-754 wird das errechnete Ergebnis an die nächste darstellbare Zahl angepasst. Am Beispiel der vorher genannten dezimalen Gleitpunktzahl 0,1 sieht das folgendermaßen aus:

Die binäre GPZ 0  0111 1011  100110011001100110011012 entspricht 0.0999999940395355210.

Die binäre GPZ 0  0111 1011  100110011001100110011012 entspricht 0.1000000014901161210.

Auch beim Rechnen mit Gleitpunktzahlen entstehen Ungenauigkeiten durch Rundungsfehler. Das kann man mit einem Taschenrechner sehr leicht nachvollziehen indem man mit dezimalen Gleitpunktzahlen rechnerisch ein bisschen herumspielt.

In Step7 sind die Gleitpunktzahlen auf 6 Dezimalstellen genau. Das bedeutet das man bei der Angabe von Gleitpunktkonstanten nur 6 Nachkommastellen angeben kann.

Gleitpunktzahl
Gleitpunktzahl

Umrechnung einer dualen Gleitpunktzahl in eine dezimale Gleitpunktzahl. Folgende Bitmuster-darstellung ist gegeben:

 

Die Umrechnung in eine Dezimalzahl wird folgendermaßen vorgenommen:

  • Das MSB ( VZ ) ist "0" und bedeutet das die Zahl positiv ist, also Vorzeichen +.
  • Der Exponent ist "0111 10002" und bedeutet Exp = 12010.
  • Die Mantisse: Bit 22 ist "1", dieser Stellenwert ist 2-1 also 0,5. Die anderen Stellenwerte zählen nicht da sie Null sind.

Folgende Vorgehensweise wird angewandt:

Zahl10 = ( VZ ) x ( 1, Mantisse ) x ( 2(Exp-127) )

Zahl10 =  ( + ) x ( 1,5 ) x ( 2(120-127) ) = + 1,5 x 0,0078125

Zahl10 = + 0,01171875



Die Umrechnung einer dezimalen Gleitpunktzahl ( z.B. 3,210 ) in eine duale Gleitpunktzahl GPZ2 wird folgendermaßen vorgenommen:

Als erstes berechnet man die Mantisse der GPZ2. Mit einer Formel ausgedrückt sieht das dann so aus: ( Mantisse M ) = ( GPZ10 ) x ( 2n ) sodass sich im Ergebnis diese Form ergibt:

(1) ‹ = (Mantisse) ‹ (2)

Den Exponenten n bei ( 2n) muß man demnach so wählen dass die Mantisse einen Wert zwischen 1 und 2 erhält. Errechnet man für den Exponenten Zahlen die kleiner als -12610 oder größer als 12710 sind, kann die Zahl im Bereich von SHORT REAL nicht dargestellt werden. Das Ergebnis wird dann als "0" oder "unendlich" interpretiert und als "NaN" bezeichnet. NaN ist die Abkürzung für Not a Number. Der Exponent wird mit dem sogenannten BIAS-Wert verrechnet um negative Werte zu vermeiden. Im Bereich des Zahlentypes SHORT REAL ist der Bias-Wert 127. Somit werden die Exponentenwerte -126...+127 als so genannte "Charakteristik" zwischen 1...254 gespeichert. Die Werte 0 und 255 als Charakteristik sind reserviert für die speziellen Zahlenwerte "Null", "Unendlich" und "NaN" ( Not a Number, keine Zahl ).

Dann werden die Nachkommastellen der Mantisse dual dargestellt. Hier gibt es zwei Möglichkeiten, man erhält die Nachkommastellen als exakten Wert durch Addition der Potenzen von 2-1 bis 2-23, oder man muß eine Näherungsrechnung bei der Addition der Potenzen rechts vom Komma der dualen Gleitpunktzahl durchführen um einen Näherungswert zu erhalten. Die bei dieser Addition verwendeten 2-n Potenzen erhalten in der Mantisse eine "1", die nicht verwendeten erhalten eine "0".

Als zweites wird der Exponent der GPZ2 berechnet. Dabei wendet man folgende Formel an:
( Exponent E ) = (y) + ( EBias)

EBias ist hier die Zahl 127 die bereits weiter oben im Beispiel benutzt wurde. EBias legt die Größe des Zahlenbereichs fest, bei 32 Bit GPZ2 eben durch 12710 und bei 64 Bit GPZ2 ist es die 102310.

Beispiel:

( Mantisse M der GPZ10 ) = ( GPZ10 ) x ( 2-n ) für Dezimalzahlen >= 1

( Mantisse M der GPZ10 ) = ( GPZ10 ) x ( 2n ) für Dezimalzahlen < 1

Mantisse von 3,210

= 3,210 x 2-1 = 1,6   -> berechnen der Mantisse, ( 2-1 ) weil die Basis 2 eimal mit Exponent -n in die (3,2) passt, das Ergebniss liegt zwischen "1" und "2", die Mantisse ist 1,6

Nun wird von der Zahl 1,6 die Nachkommastelle ,6 durch Näherungsrechnung ermittelt. Die nächste darstellbare Nachkommastelle wäre die ,5 also 2-1. Nun muß man die weitern Potenzen von 2-2 bis 2-23 so wählen dass man der ,6 am nächsten ist. Die Berechnung der Nachkommastelle sieht dann folgendermaßen aus:

  • Mantisse = 1 + (genauer Wert der Nachkommastelle bestehend aus der Summe der Potenzen von 2-1 bis 2-23)

oder

  • Mantisse = 1 + (nächste reell darstellbare Zahl für den Nachkommawert bestehend aus der Summe der Potenzen von 2-1 bis 2-23)

 

Mantisse = 1 + 1x2-1 + 0x2-2 + 0x2-3 + 1x2-4 + 1x2-5 +0x2-6 + 0x2-7 + 1x2-8 + 1x2-9 + 0x2-10 + 0x2-11 + 1x2-12 + 1x2-13 + 0x2-14 + 0x2-15 + 1x2-16 + 1x2-17 + 0x2-18 + 0x2-19 + 1x2-20 + 1x2-21 + 0x2-22 + 1x2-23

Mantisse = 1 + 0,60000002384185791075625 = 1,60000002384185791075625

Diese Zahl ist die Zahl die der Nachkommastelle ,6 unter den gegebenen Bedingungen am nächsten kommt. Würde man die letzte Potenz 2-23 weglassen erhielte man folgende Zahl: 1,599999904632568359375. Die Differenz zu 1,6 wäre dann 0,000000095367431640625. Bei dem errechneten Näherungswert von 1,60000002384185791075625 beträgt die Differenz zu 1,6 nur 0,00000002384185791075625.

Daraus ergibt sich dann schon folgendes Aussehen der Mantisse der GPZ2:

X   XXXX XXXX   100 1100 1100 1100 1100 11012

Nun der Exponent für:

( Exponent E ) = (y) + ( EBias) für Dezimalzahlen >= 1

( Exponent E ) = ( - y) + ( EBias) für Dezimalzahlen < 1

( Exponent E ) = 110 + 12710 = 12810

Bei Gleitpunktzahlen >= 1 setzt man für die Variable (y) den positiven Wert des Exponenten ein der bei der Berechnung der Mantisse für ( -n ) ermittelt wurde. Bei Gleitpunktzahlen < 1 muß man den negativen Wert des Exponenten einsetzen. Das Ergebnis wird von 12810 nach dual umgewandelt. Man erhält 1000 00002

Die Zahl 3,210 ist positiv, der Exponent und die Mantisse wurden ermittelt. Man erhält folgendes Ergebnis:

0   1000 0000   100 1100 1100 1100 1100 1101

Hierzu später mehr unter Übungen.