Mathematische Funktionen für Festpunktzahlen in der Programmiersprache Kontaktplan KOP

In der Programmiersprache Kontaktplan KOP können mit 16 Bit Ganzzahlen bzw. 32 Bit Ganzzahlen folgende mathematischen Rechenoperationen ausgeführt werden:

  • ADD_I Ganze Zahlen addieren (16 Bit Ganzzahlen)
  • SUB_I Ganze Zahlen subtrahieren (16 Bit Ganzzahlen)
  • MUL_I Ganze Zahlen multiplizieren (16 Bit Ganzzahlen)
  • DIV_I Ganze Zahlen dividieren (16 Bit Ganzzahlen)
  • ADD_DI Ganze Zahlen addieren (32 Bit Ganzzahlen)
  • SUB_DI Ganze Zahlen subtrahieren (32 Bit Ganzzahlen)
  • MUL_DI Ganze Zahlen multiplizieren (32 Bit Ganzzahlen)
  • DIV_DI Ganze Zahlen dividieren (32 Bit Ganzzahlen)
  • MOD_DI Divisionsrest gewinnen (32 Bit Ganzzahlen)

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
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

*

* 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

Übersicht über die Festpunktfunktionen in Kontaktplan KOP

Festpunkt-Funktionen in Step7® Kontaktplan KOP
Festpunkt-Funktionen in Step7® Kontaktplan KOP

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".