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:

  • DATE_AND_TIME, DT
  • STRING
  • ARRAY (Feld)
  • STRUCT (Struktur)
  • UDT (User Defined Data Typ, Anwenderdefinierte Datentypen)
  • FB (Funktionsbaustein)
  • SFB (Systemfunktionsbaustein)
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.