Mathematische Funktionen in FUP für Ganzzahlen
In Steuerungsprogrammen müssen häufig zwei Zahlen miteinander gerechnet werden. Mit den mathematischen Funktionen ist eine Addition, Subtraktion etc. möglich. Dabei unterscheidet man zwischen Berechnungen für Ganzzahlen (Festpunktzahlen) und Gleitpunktzahlen mit Komma. Für Ganzzahlen gibt es entweder den Datentyp INT mit einer Länge von 16 Bits oder DINT mit einer Länge von 32 Bits. In der Programmiersoftware Step7 befinden sich die mathematischen Funktionen für Ganzzahlen unter dem Knoten Festpunkt-Funktionen. Die darunter befindlichen Bausteine können wie folgt genutzt werden:
- ADD_I Addition INT-Zahlen (16 Bit Ganzzahlen)
- SUB_I Subtraktion von INT-Zahlen (16 Bit Ganzzahlen)
- MUL_I Multiplikation von INT-Zahlen (16 Bit Ganzzahlen)
- DIV_I Division von INT-Zahlen (16 Bit Ganzzahlen)
- ADD_DI Addition von DINT-Zahlen (32 Bit Ganzzahlen)
- SUB_DI Subtraktion von DINT-Zahlen (32 Bit Ganzzahlen)
- MUL_DI Multiplikation von DINT-Zahlen (32 Bit Ganzzahlen)
- DIV_DI Division von DINT-Zahlen (32 Bit Ganzzahlen)
- MOD_DI Divisionsrest gewinnen (32 Bit Ganzzahlen)
Die Erläuterung der Funktionen für mathematische Funktionen für Ganzzahlen.
Man kann immer nur zwei Zahlen miteinander rechnen. Diese müssen außerdem das gleiche Format haben. Eine Mischung aus INT- und DINT-Zahlen ist nicht möglich. Möchte man unterschiedliche Zahlenformate rechnen, muss man eine Zahl in das andere Format umwandeln. Hierfür gibt es die Umwandlungsfunktionen.
Die mathematischen Funktionen beeinflussen die Bits OV, OS, A0 und A1 des Statusworts. So ist es möglich, die mathematischen Funktionen auszuwerten. Bei Zahlen mit einer Länge von 16 oder 32 Bits ergibt sich automatisch eine Beschränkung des Zahlenraums. Dadurch gibt es gültige und ungültige Zahlen. Die Bits im Statuswort geben Auskunft über solche Überschreitungen des Zahlenraums und haben folgende Signalzustände:
Ungültige Bereiche | A1 | A0 | OV | OS |
---|---|---|---|---|
Unterschreitung bei Addition 16 Bit: Ergebnis = -65536 32 Bit: Ergebnis = -4 294 967 296 |
0 | 0 | 1 | 1 |
Unterschreitung bei Multiplikation 16 Bit: Ergebnis < -32 768 (negative Zahl) 32 Bit: Ergebnis < -2 147 483 648 (negative Zahl) |
0 | 1 | 1 | 1 |
Überlauf bei Addition, Subtraktion 16 Bit: Ergebnis > 32 767 (positive Zahl) 32 Bit: Ergebnis > 2 147 483 647 (positive Zahl) |
0 | 1 | 1 | 1 |
Überlauf bei Multiplikation, Division 16 Bit: Ergebnis > 32 767 (positive Zahl) 32 Bit: Ergebnis > 2 147 483 647 (positive Zahl) |
1 | 0 | 1 | 1 |
Unterschreitung bei Addition, Subtraktion 16 Bit: Ergebnis < -32 768 (negative Zahl) 32 Bit: Ergebnis < -2 147 483 648 (negative Zahl) |
1 | 0 | 1 | 1 |
Division durch 0 | 1 | 1 | 1 | 1 |
Gültiger Bereich | A1 | A0 | OV | OS |
0 (Null) | 0 | 0 | 0 | * |
16 Bit: -32 768 <= Ergebnis < 0 (negative Zahl) 32 Bit: -2 147 483 648 <= Ergebnis < 0 (negative Zahl) |
0 | 1 | 0 | * |
16 Bit: 32 767 >= Ergebnis > 0 (positive Zahl) 32 Bit: 2 147 483 647 >= Ergebnis > 0 (positive Zahl) |
1 | 0 | 0 | * |
* Ohne Einfluss auf das Bit OS.
Operation | A1 | A0 | OV | OS |
---|---|---|---|---|
ADD_DI: Ergebnis = -4 294 967 296 | 0 | 0 | 1 | 1 |
DIV_DI oder MOD_DI: Division durch 0 | 1 | 1 | 1 | 1 |