Datentypen bei Programmierung von Steuerungsaufgaben
Bei der Erstellung von SPS-Programmen hat man es mit verschiedenen Datentypen zu tun. Mit den verschiedenen Datentypen werden unterschiedliche Speicherinhalte voneinander abgegrenzt, für die unterschiedliche Speicherbereiche reserviert werden.
- Beispiel für das Signal 1: Datentyp Bool
- Benötigter Speicherplatz: 1 Bit
- Menge der darstellbaren Ziffern: 2 (0 und 1)
Die Angabe eines Datentyps wird insbesondere bei der Variablendeklaration von Funktionen oder Funktionsbausteinen benötigt. Bei der Deklaration einer Variable "weiß" das Programm z.B. nicht, ob es sich um einen booleschen Wert (1 Bit groß) handelt, ob es sich um eine Byteadresse (8 Bits) handelt usw. Durch die Angabe des Datentypen legt man im Grunde fest, in welcher Form die Daten bei einer Abfrage erwartet werden oder wie die Daten bei einer Ausgabe abgelegt werden sollen. Innerhalb eines SPS-Programms werden die Daten auch häufig mit einem bestimmten Datentypen erwartet. Wenn die SPS z.B. für die Durchführung eines Befehls für den Wert eine Bitlänge von 16 Bits erwartet, kann man nicht eine Bitlänge von 8 Bits übergeben. Durch den Datentypen werden außerdem viele Wertebereiche begrenzt. Beispiel:
- Datentyp für den Zeitwert in S7: S5TIME
- Datenlänge: 16 Bits, wovon die letzten 2 Bits ignoriert werden
- Darstellbare Wertebereiche: 10 Millisekunden bis 9990 Sekunden
In der Programmiernorm 61131-3 wurden für Steuerungsaufgeben verschiedene Datentypen festgelegt. Dabei wurden auch sogenannte Schlüsselwörter für Datentypen festgelegt, die nicht anderweitig verwendet werden dürfen.
Die Datentypen werden in 2 Kategorien eingeteilt. Diese sind:
- Elementare Datentypen: Diese haben eine maximale Länge von 32 Bits. Damit werden, wie der Name schon andeutet, elementare Daten beschrieben, z.B. eine Ganzzahl mit einer Länge von 16 Bits.
- Zusammengesetzte Datentypen: Diese Datentypen können aus mehreren elementaren Datentypen bestehen. Wenn man z.B. einen Datentypen mit einer Ganzzahl und einer Zeichenkette benutzt, so hat man es hier mit einem zusammengesetzten Datentypen zu tun. Daher können diese auch größer als 32 Bits sein. Diese sind auch vordefiniert. Das bedeutet, der Programmierer hat nicht die Auswahl festzulegen, um welchen Datentypen es sich dabei handelt, wenn er in der Variablendeklaration zusammengesetzte Datentypen benutzt.
Elementare Datentypen in Step7
Name | Datentyp | Größe | Wertebereich |
---|---|---|---|
BOOL | Boolescher Wert | 1Bit | False (logisch 0), True (logisch 1) |
BYTE | Dual- und Hexadezimalzahlen mit 8 Bits | 8 Bits | Dualzahlen 00000000 - 11111111 Hexadezimal B#16#0 - B#16#FF |
WORD | Dual- und Hexadezimalzahlen mit 16 Bits | 16 Bits | Dualzahlen von 0 bis 1111 1111 1111 1111 Hexadezimal W#16#0 - W#16#FFFF BCD-Zahlen von 0 bis 999 Dezimal ohne Vorz. B#(0,0) bis B#(255,255) |
DWORD | Dual- und Hexadezimalzahlen mit 32 Bits | 32 Bits | Dualzahlen von 0 bis 1111 1111 1111 1111 1111 1111 1111 1111 Hexadezimal von DW#16#0000 0000 bis DW#16#FFFF FFFF Dezimal ohne Vorz. von B#(0,0,0,0) bis B#(255,255,255,255) |
CHAR | ASCII-Zeichen | 8 Bit | Buchstaben, z.B. A, B, C, D usw. |
INT | Ganze Zahlen mit Vorzeichen (Festpunktzahlen) | 16 Bit | -32768 bis +32767 |
DINT | Ganze Zahlen mit Vorzeichen (Festpunktzahlen) | 32 Bit | -2147483648 bis +2147483647 |
REAL | Reelle Zahlen (IEEE Gleitpunktzahlen) |
32 Bit | Dezimalzahl mit Punkt (156,235) Exponentialdarstellung (1.568 E+04) |
S5TIME | Zeitdauer im S5T#-Format Step7 Zeit in Schritten von 10ms |
16 Bit | S5T#0H_0M_0S_10MS bis S5T#2H_46M_30S_0MS und S5T#0H_0M_0S_0MS |
TIME | Zeitdauer im IEC-Format IEC-Zeit in Schritten von 1ms, Ganzzahl mit Vorzeichen |
32 Bit | -T#24D_20H_31M_23S_648MS bis T#24D_20H_31M_23S_647MS |
TIME_OF_DAY | Uhrzeit (Tageszeit) in Schritten von 1ms |
32 Bit | TOD#0:0:0.0 bis TOD#23:59:59.999 z.B. TIME_OF_DAY#23:59:59,9 |
DATE | IEC-Datum in Schritten von 1 Tag |
16 Bit | D#1990-1-1 bis D#2168-12-31 z.B. DATE#2006-05-10 |
Für BCD-Zahlen gibt es keinen besonderen Datentypen in der Norm, auch nicht in Step7. BCD-Zahlen werden als Hexadezimalzahlen eingegeben wobei man die Datentypen BYTE, WORD und DWORD und die Ziffern 0 bis 9 verwendet. Am Beispiel des Datentyps WORD würde die Eingabe zur Erzeugung der vierstelligen BCD-Zahlen "1234" so aussehen: (W#)16#1234. Davon unberührt existiert nach wie vor auch noch das BCD-Zahlenformat. Dafür gibt es entsprechende Codeumsetzer, z.B. ITB (INTEGER nach BCD).
Zusammengesetzte Datentypen in Step7
In Step7 benutzt man neben den elementaren Datentypen auch noch die zusammengesetzten Datentypen. Damit werden Datengruppen definiert, die größer als 32 Bit sind. In Step7 kann man folgende zusammengesetzte Datentypen definieren:
Schlüsselwort | Datentyp | Beschreibung |
---|---|---|
DATE_AND_ TIME |
DATE_AND_TIME definiert einen Bereich mit 64 Bits (8 Bytes) und wird in einem binärcodierten Dezimalformat gespeichert. |
DT#1990-1-1-0:0:0.0 bis DT#2089-12-31-23:59:59.999 (erlaubter Bereich für die Eingabe von Datum und Zeit) |
ARRAY | Mit diesem Datentyp definiert man ein Feld bzw. eine Gruppierung von Komponenten gleichen Datentyps (entweder elementar oder zusammengesetzt). Man kann maximal 6 Dimensionen in einem Feld definieren. |
Messwerte: ARRAY[1...3] OF INT; Jede Feldkomponente wird über den Feldindex angesprochen: L Messwerte [Index] T Messwerte [Index] Der Index kann ein beliebiger ganzzahliger Wert von -32768 bis +32767 sein und kann zur Laufzeit des Programms nicht verändert werden. Über SFC20 können ARRAY-Variablen kopiert werden. |
STRUCT | Mit dem Datentyp STRUCT kann man eine Gruppierung von beliebig kombinierten Datentypen bzw. Komponenten definieren, z. B. ein Feld aus Strukturen oder eine Struktur aus Strukturen und Feldern. | Messwerte:STRUCT Temperatur: INT; Geschwindigkeit: REAL; END_STRUCT; In AWL sind die Komponenten einzeln ansprechbar, z.B: T Messwerte. Geschwindigkeit Über SFC20 können STRUCT-Variablen kopiert werden. |
FB, SFB | Mit FB oder SFB wird die Struktur des zugeordneten Instanzdatenbausteins bestimmt. |
Die Bestimmung der Struktur ermöglicht die Übergabe von Instanzdaten für mehrere FB-Aufrufe innerhalb eines Instanzdatenbausteins. |
UDT | User Defined Data Typ: Durch die Verwendung von UDTs ist es möglich große Datenmengen zu strukturieren. Dies vereinfacht das Eingeben von Datentypen bei der Erzeugung von Datenbausteinen und bei der Deklaration von Variablen. In Step7 können elementare und zusammengesetzte Datentypen verknüpft werden. Dadurch entstehen UDTs, die einen eigenen Namen haben und dadurch mehrfach verwendbar sind. |
Ein UDT ist in allen Bausteinen global gültig. Ist vom Aufbau her wie ein STRUCT. |