Umwandlungsfunktionen in Kontaktplan KOP

Umwandlungsfunktionen

In einem SPS-Programm muss man hin und wieder eine Zahl, dass entweder als, BCD-, INT-, DINT- oder REAL-Zahl vorliegt, in ein anderes Format umwandeln. Beispielsweise kann man Zahlen, die in unterschiedlichen Formaten vorliegen, über die Vergleichsfunktionen nicht vergleichen. Unter dem Knoten Umwandler sind in Step7 viele Funktionen vorhanden, mit denen man Zahlen umwandeln kann.

Ganzzahlen und BCD-Zahlen können mit diesen Umwandlungsfunktionen in andere Zahlenarten umgewandelt werden:

  • BCD_I - wandelt eine BCD-Zahl in eine 16 Bit Ganzzahl
  • I_BCD - wandelt eine 16 Bit Ganzzahl in eine BCD-Zahl
  • BCD_DI - wandelt eine BCD-Zahl in eine 32 Bit Ganzzahl
  • I_DI - wandelt eine 16 Bit Ganzzahl in eine 32 Bit Ganzzahl
  • DI_BCD - wandelt eine 32 Bit Ganzzahl in eine BCD-Zahl um
  • DI_R - wandelt eine 32 Bit Ganzzahl in eine Gleitpunktzahl um

Die Bildung von Komplementen von Ganzzahlen sowie der Vorzeichenwechsel bei Gleitpunktzahlen wird mit diesen Operationen gemacht:

  • INV_I - erzeugen des Einer-Komplements einer 16 Bit Ganzzahl
  • INV_DI - erzeugen des Einer-Komplements einer 32 Bit Ganzzahl
  • NEG_I - erzeugen des Zweier-Komplements einer 16 Bit Ganzzahl
  • NEG_DI - erzeugen des Zweier-Komplements einer 32 Bit Ganzzahl
  • NEG_R - wechseln des Vorzeichens einer Gleitpunktzahl

Durch die Verwendung der folgenden Operationen können Gleitpunktzahlen im Format 32 Bit/IEEE-floating point in 32 Bit Ganzzahlen umgewandelt werden. Die Unterschiede zwischen den einzelnen Operationen liegen in der Art des Rundens:

  • ROUND - eine Zahl runden
  • TRUNC - erzeugen einer ganzen Zahl
  • CEIL - erzeugen der nächsthöheren Ganzzahl aus einer Gleitpunktzahl
  • FLOOR - erzeugen der nächstniederen Ganzzahl aus einer Gleitpunktzahl

Übersicht der Umwandlungsfunktionen im Kontaktplan KOP

Umwandlungsfunktionen für INT, DINT und REAL

BCD_I - umwandeln einer dreistelligen BCD-Zahl in eine 16 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als dreistellige BCD-Zahl (±999) gelesen, in einen ganzzahligen Wert (16 Bit) umgewandelt und kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN. Liegt eine Stelle einer BCD-Zahl im Bereich der Pseudotetraden, also zwischen 10 und 15, dann tritt ein Fehler auf bei der Umwandlung und der Ausgang OUT sowie der Freigabeausgang ENO haben den Signalzustand "0". Ist ein OB121 programmiert, so wird er im Fall eines solchen Umwandlungsfehlers aufgerufen. Ansonsten geht die CPU in den STOP-Zustand und im Diagnosespeicher wird ein BCD-Umwandlungsfehler mit der Ereignisnummer 2521 eingetragen.

I_BCD - umwandeln einer 16 Bit Ganzzahl in eine dreistellige BCD-Zahl

Der Inhalt des Eingangsparameters IN wird als 16 Bit Ganzzahl gelesen, in eine dreistellige BCD-Zahl (±999) umgewandelt und kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. Im Fall eines Überlaufs (Umwandlungsversuch in BCD-Zahl 10 bis 15) führt der Ausgang ENO den Wert "0".

BCD_DI - umwandeln einer BCD-Zahl in eine 32 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als siebenstellige BCD-Zahl (±9 999 999) gelesen, in einen ganzzahligen Wert (32 Bit) umgewandelt und kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN. Liegt eine Stelle einer BCD-Zahl im Bereich der Pseudotetraden, also zwischen 10 und 15, dann tritt ein Fehler auf bei der Umwandlung und der Ausgang OUT sowie der Freigabeausgang ENO haben den Signalzustand "0". Ist ein OB121 programmiert, so wird er im Fall eines solchen Umwandlungsfehlers aufgerufen. Ansonsten geht die CPU in den STOP-Zustand und im Diagnosespeicher wird ein BCD-Umwandlungsfehler mit der Ereignisnummer 2521 eingetragen.

I_DI - umwandeln einer 16 Bit Ganzzahl in eine 32 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als 16 Bit Ganzzahl gelesen, in eine 32 Bit Ganzzahl umgewandelt und kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN.

DI_BCD - umwandeln einer 32 Bit Ganzzahl in eine BCD-Zahl um

Der Inhalt des Eingangsparameters IN wird als 32 Bit Ganzzahl gelesen, in eine siebenstellige BCD-Zahl (±9 999 999) umgewandelt und kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. Im Fall eines Überlaufs (Umwandlungsversuch in BCD-Zahl 10 bis 15) führt der Ausgang ENO den Wert "0".

DI_R - wandelt eine 32 Bit Ganzzahl in eine Gleitpunktzahl um

Der Inhalt des Eingangsparameters IN wird als 32 Bit Ganzzahl gelesen, in eine Gleitpunktzahl umgewandelt und kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN.

INV_I - erzeugen des Einer-Komplements einer 16 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als 16 Bit Ganzzahl gelesen. Dann wird die boolesche Wortverknüpfungsoperation 16Bit Exklusiv-ODER verknüpfen mit der Hexadezimalschablone FFFF16 ausgeführt. Dadurch wird der Wert jedes Bits umgekehrt. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN.

INV_DI - erzeugen des Einer-Komplements einer 32 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als 32 Bit Ganzzahl gelesen. Dann wird die boolesche Wortverknüpfungsoperation 32Bit Exklusiv-ODER verknüpfen mit der Hexadezimalschablone FFFF FFFF16 ausgeführt. Dadurch wird der Wert jedes Bits umgekehrt. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN.

NEG_I - erzeugen des Zweier-Komplements einer 16 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als 16 Bit Ganzzahl gelesen. Dann wird das Vorzeichen umgekehrt. Das Ergebnis kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN mit einer Ausnahme: bei EN = "1" und Überlauf führen ENO und OUT den Signalzustand "0".

NEG_DI - erzeugen des Zweier-Komplements einer 32 Bit Ganzzahl

Der Inhalt des Eingangsparameters IN wird als 32 Bit Ganzzahl gelesen. Dann wird das Vorzeichen umgekehrt. Das Ergebnis kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN mit einer Ausnahme: bei EN = "1" und Überlauf führen ENO und OUT den Signalzustand "0".

NEG_R - wechseln des Vorzeichens einer Gleitpunktzahl

Der Inhalt des Eingangsparameters IN wird als 32 Bit Gleitpunktzahl gelesen. Dann wird das Vorzeichen umgekehrt wobei die Bits von Exponent und Mantisse gleich bleiben. Es wird nur das MSB umgekehrt. Das Ergebnis kann am Ausgang OUT abgefragt werden. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. ENO führt immer den gleichen Signalzustand wie EN mit einer Ausnahme: bei EN = "1" und Überlauf führen ENO und OUT den Signalzustand "0".

ROUND - eine Zahl runden

Der Inhalt des Eingangsparameters IN wird als 32 Bit Gleitpunktzahl gelesen und in eine 32 Bit Ganzzahl umgewandelt durch aufrunden und abrunden (3.4 -> 3 oder 3.51 -> 4). Als Ergebnis wird die am nächsten liegende Ganzzahl am Ausgang OUT ausgegeben. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. Beträgt der gebrochene Anteil ,5 wird die gerade Zahl ausgegeben (zum Beispiel 3,5 -> 4 bzw. 4,5 -> 4). Im Fall eines Überlaufs ist der Signalzustand an ENO = "0". Ist der Inhalt des Eingangs IN keine Gleitpunktzahl, haben das OS-Bit und das OV-Bit des Statuswortes den Wert "1" und der Ausgang ENO den Wert "0".

TRUNC - erzeugen einer ganzen Zahl

Der Inhalt des Eingangsparameters IN wird als 32 Bit Gleitpunktzahl gelesen und in eine 32 Bit Ganzzahl umgewandelt. Als Ergebnis wird der ganzzahlige Anteil der anliegenden Gleitpunktzahl am Ausgang OUT ausgegeben (z.B. 2.7 -> 2 oder 3.2 -> 3). Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. Im Fall eines Überlaufs ist der Signalzustand an ENO = "0". Ist der Inhalt des Eingangs IN keine Gleitpunktzahl, haben das OS-Bit und das OV-Bit des Statuswortes den Wert "1" und der Ausgang ENO den Wert "0".

CEIL - erzeugen der nächsthöheren Ganzzahl aus einer Gleitpunktzahl

Der Inhalt des Eingangsparameters IN wird als 32 Bit Gleitpunktzahl gelesen und in eine 32 Bit Ganzzahl umgewandelt. Als Ergebnis wird die kleinste Ganzzahl, die größer gleich der am Eingang IN anliegenden Gleitpunktzahl ist, am Ausgang OUT ausgegeben. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. Im Fall eines Überlaufs ist der Signalzustand an ENO = "0". Ist der Inhalt des Eingangs IN keine Gleitpunktzahl, haben das OS-Bit und das OV-Bit des Statuswortes den Wert "1" und der Ausgang ENO den Wert "0".

FLOOR - erzeugen der nächstniederen Ganzzahl aus einer Gleitpunktzahl

Der Inhalt des Eingangsparameters IN wird als 32 Bit Gleitpunktzahl gelesen und in eine 32 Bit Ganzzahl umgewandelt. Als Ergebnis wird die größte Ganzzahl, die kleiner gleich der am Eingang IN anliegenden Gleitpunktzahl ist, am Ausgang OUT ausgegeben. Die Umwandlung wird ausgeführt wenn der Eingang EN den Signalzustand "1" erhält. Im Fall eines Überlaufs ist der Signalzustand an ENO = "0". Ist der Inhalt des Eingangs IN keine Gleitpunktzahl, haben das OS-Bit und das OV-Bit des Statuswortes den Wert "1" und der Ausgang ENO den Wert "0".