In der Programmiersprache Kontaktplan KOP können mit 16 Bit Ganzzahlen bzw. 32 Bit Ganzzahlen folgende mathematischen Rechenoperationen ausgeführt werden:
Diese Operationen können immer nur mit zwei Ganzzahlen durchgeführt werden. Es können also nur zwei 16 Bit Ganzzahlen mathematisch miteinander verknüpft werden bzw eine 16 Bit Ganzzahl mit einer 32 Bit Ganzzahl, wobei die 16 Bit Ganzzahl in eine 32 Bit Ganzzahl umgewandelt werden muss.
Die mathematischen Festpunkt-Funktionen beeinflussen im Statuswort die Bits OV, OS, A0 und A1. Über diese Bits können die Rechenoperationen ausgewertet werden. Durch die Länge von 16 bzw. 32 Bit der Ganzzahlen ergeben sich für die jeweilige Länge gültige und ungültige Bereiche. Bereichsüberschreitungen können über die vorgenannten Bits des Statuswortes ausgewertet werden, dabei haben die Bits folgende Signalzustände:
Ungültiger Bereich | A1 | A0 | OV | OS |
|---|---|---|---|---|
Unterschreitung bei Addition | 0 | 0 | 1 | 1 |
Unterschreitung bei Multiplikation | 0 | 1 | 1 | 1 |
Überlauf bei Addition, Subtraktion | 0 | 1 | 1 | 1 |
Überlauf bei Multiplikation, Division | 1 | 0 | 1 | 1 |
Unterschreitung bei Addition, Subtraktion | 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) | 0 | 1 | 0 | * |
16 Bit: 32 767 >= Ergebnis > 0 (positive Zahl) | 1 | 0 | 0 | * |
* Das Ergebnis der Operation hat keinen Einfluß 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 |

ADD_I: Addition von 16 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format INT (16 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format INT (16 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen addieren (16 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen addieren (16 Bit) durchgeführt. Am Ausgang OUT kann das Ergebnis abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 16 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
SUB_I: Subtraktion von 16 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format INT (16 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format INT (16 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen subtrahieren (16 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen subtrahieren (16 Bit) durchgeführt. IN2 wird von IN1 subtrahiert (IN1 - IN2 = OUT). Am Ausgang OUT kann das Ergebnis abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 16 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
MUL_I: Multiplikation von 16 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format INT (16 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format INT (16 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen multiplizieren (16 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen multiplizieren (16 Bit) durchgeführt. IN1 wird mit IN2 multipliziert (IN1 x IN2 = OUT). Am Ausgang OUT kann das Ergebnis abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 16 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
DIV_I: Division von 16 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format INT (16 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format INT (16 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen dividieren (16 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen dividieren (16 Bit) durchgeführt. IN1 wird durch IN2 dividiert (IN1 ÷ IN2 = OUT). Am Ausgang OUT kann das Ergebnis als ganzzahliger Quotient (ganzzahliger Anteil der Division) abgefragt werden. Der Divisionsrest kann nicht abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 16 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
ADD_DI: Addition von 32 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format DINT (32 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format DINT (32 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen addieren (32 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen addieren (16 Bit) durchgeführt. Am Ausgang OUT kann das Ergebnis abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 32 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
SUB_DI: Subtraktion von 32 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format DINT (32 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format DINT (32 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen subtrahieren (32 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen subtrahieren (32 Bit) durchgeführt. IN2 wird von IN1 subtrahiert (IN1 - IN2 = OUT). Am Ausgang OUT kann das Ergebnis abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 32 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
MUL_DI: Multiplikation von 32 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format DINT (32 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format DINT (32 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen multiplizieren (32 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen multiplizieren (32 Bit) durchgeführt. IN1 wird mit IN2 multipliziert (IN1 x IN2 = OUT). Am Ausgang OUT kann das Ergebnis abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 32 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
DIV_DI: Division von 32 Bit Ganzzahlen
Am Eingang IN1 wird die erste Zahl vom Format DINT (32 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format DINT (32 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen dividieren (32 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Ganze Zahlen dividieren (32 Bit) durchgeführt. IN1 wird durch IN2 dividiert (IN1 ÷ IN2 = OUT). Am Ausgang OUT kann das Ergebnis als ganzzahliger Quotient (ganzzahliger Anteil der Division) abgefragt werden. Der Divisionsrest kann nicht abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 32 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".
MOD_DI: gewinnen des Divisionsrestes
Am Eingang IN1 wird die erste Zahl vom Format DINT (32 Bit Ganzzahl) und am Eingang IN2 die zweite Zahl vom Format DINT (32 Bit Ganzzahl) eingelesen. Die Rechenoperation Ganze Zahlen dividieren (32 Bit) wird nicht ausgeführt, wenn der Eingang EN den Wert"0" führt oder sich das Ergebnis außerhalb des zulässigen Bereiches befindet. In diesem Fall führt auch der Ausgang ENO den Wert "0".
Erhält der Freigabeeingang EN den Signalzustand "1", dann wird die Rechenoperation Divisionsrest gewinnen (32 Bit) durchgeführt. IN1 wird durch IN2 dividiert (IN1 ÷ IN2 = OUT). Am Ausgang OUT kann der Divisionsrest abgefragt werden. Berechnet die Operation ein Ergebnis außerhalb des gültigen Bereiches von 32 Bit, dann führen das OV-Bit und das OS-Bit den Wert "1" und der Freigabeausgang ENO den Wert"0".