EcoStruxure Machine Expert unterstützt alle in der Norm IEC61131-3 beschriebenen Datentypen.
In diesem Kapitel werden die folgenden Datentypen beschrieben:
Beachten Sie, dass es auch einige, die Norm erweiternde Datentypen gibt, und dass Sie auch Ihre eigenen benutzerdefinierten Datentypen definieren können.
Variablen vom Typ BOOL können die Werte TRUE (1) und FALSE (0) annehmen. Es werden 8 Speicherbits reserviert.
Weitere Information finden Sie im Kapitel BOOL-Konstanten.
In der nachstehenden Tabelle sind die verfügbaren ganzzahligen Datentypen (Integer) aufgeführt. Jeder der verschiedenen Zahlentypen deckt einen anderen Wertebereich ab. Dabei gelten die folgenden Bereichsgrenzen.
Datentyp |
Unterer Grenzwert |
Oberer Grenzwert |
Speicherplatz |
---|---|---|---|
BYTE |
0 |
255 |
8 Bit |
WORD |
0 |
65.535 |
16 Bit |
DWORD |
0 |
4.294.967.295 |
32 Bit |
LWORD |
0 |
264-1 |
64 Bit |
SINT |
-128 |
127 |
8 Bit |
USINT |
0 |
255 |
8 Bit |
INT |
-32.768 |
32.767 |
16 Bit |
UINT |
0 |
65.535 |
16 Bit |
DINT |
-2.147.483.648 |
2.147.483.647 |
32 Bit |
UDINT |
0 |
4.294.967.295 |
32 Bit |
LINT |
–263 |
263-1 |
64 Bit |
ULINT |
0 |
264-1 |
64 Bit |
Weitere Informationen finden Sie in der Beschreibung der Zahlenkonstanten.
Die Datentypen REAL und LREAL sind sogenannte Gleitkommatypen. Sie stellen rationale Zahlen dar.
Eigenschaften der Datentypen REAL und LREAL:
Datentyp |
Unterer Grenzwert |
Oberer Grenzwert |
Speicherplatz |
---|---|---|---|
REAL |
-3,402823e+38 |
3,402823e+38 |
32 Bit |
LREAL |
-1,7976931348623158e+308 |
1,7976931348623158e+308 |
64 Bit |
Beispiel:
PROGRAM PLC_PRG
VAR
rMax: REAL := 3.402823E+38; // Largest number
rPosMin : REAL := 1.0E-44; // Smallest positive number
rNegMax: REAL := -1.0E-44; // Largest negative number
rMin: REAL := -3.402823E+38; // Smallest number
lrMax: LREAL := 1.7976931348623158E+308; // Largest number
lrPosMin : LREAL := 4.94065645841247E-324; // Smallest positve number
lNegMax: LREAL := -4.94065645841247E-324; // Largest negative number
lrMin: LREAL := -1.7976931348623158E+308; // Smallest number
END_VAR
Bei der Zuweisung von i1 := r1;
wird ein Fehler erkannt. Aus diesem Grund gilt der vorherige Hinweis, wenn Sie einen der folgenden Konvertierungsoperatoren verwenden:
i1 := REAL_TO_INT(r1);
Weitere Informationen finden Sie unter REAL/LREAL-Konstanten (Operanden).
Eine Variable vom Datentyp STRING kann eine beliebige Zeichenfolge aufnehmen. Die Größenangabe in der Deklaration bestimmt den Speicherplatz, der für die Variable reserviert wird. Sie verweist auf die Anzahl der Zeichen in der Zeichenfolge (String) und kann in runde oder eckige Klammern gesetzt werden. Wird keine Größe angegeben, so werden standardmäßig 80 Zeichen verwendet.
Die String-Länge ist im Allgemeinen nicht begrenzt. Allerdings können die String-Funktionen nur Längen von 1...255 Zeichen verarbeiten. Wenn eine Variable mit einem String initialisiert wird, der zu lang für den Datentyp der Variablen ist, wird der String von rechts nach links entsprechend abgeschnitten.
"STRING[80]"
81 Byte erforderlich sind.
Beispiel einer Zeichenfolgendeklaration mit 35 Zeichen:
str:STRING(35):='This is a String';
Weitere Informationen finden Sie unter WSTRING und STRING-Konstanten (Operanden).
Der Datentyp WSTRING unterscheidet sich vom Typ STRING (ASCII) durch die Auslegung im Unicode-Format und benötigt zwei Bytes für jedes Zeichen und zwei Bytes zusätzlichen Speicherplatz (jeweils nur ein Byte im Falle eines STRING).
Die Bibliothek standard64.lib stellt Funktionen für WSTRING-Zeichenfolgen bereit.
Die Anzahl der Zeichen für den WSTRING ist von den enthaltenen Zeichen abhängig. Eine Größe von 10 für WSTRING bedeutet, dass WSTRING eine maximale Länge von 10 Wörtern (WORDS) annehmen kann. Für manche Zeichen in Unicode sind mehrere WORDS zur Codierung eines Zeichens erforderlich, sodass die Anzahl an Zeichen nicht unbedingt mit der Länge von WSTRING (10 in diesem Fall) übereinstimmt. Der Datentyp erfordert ein WORD zusätzlichen Speicher, da er mit einer 0
beendet wird.
Wenn keine Größe definiert wird, dann werden 80 WORDS plus 1 für das Endzeichen 0
zugewiesen.
Beispiele:
wstr:WSTRING:="This is a WString";
wstr10 : WSTRING(10) := "1234567890";
Weitere Informationen finden Sie in den nachfolgenden Beschreibungen:
STRING Konstanten (Operanden)
Die Datentypen TIME, TIME_OF_DAY (abgekürzt TOD), DATE und DATE_AND_TIME (abgekürzt DT) werden intern wie DWORD verwaltet. Die Datentypen LDATE, LDATE_AND_TIME (LDT) und LTIME_OF_DAY (LTOD) werden intern wie LWORD gehandhabt. Die Uhrzeit wird in TIME und TOD in Millisekunden angegeben. In TOD beginnt die Zeit bei 00:00 Uhr. I DATE und DT wird die Zeit in Sekunden angegeben, wobei ab dem 1. Januar 1970 ab 00:00 Uhr gerechnet wird.
LTIME wird als Zeitbasis für hochauflösende Timer unterstützt. LTIME hat die Größe von 64 Bit und eine Auflösung bis zum Nanosekunden-Bereich.
Syntax von LTIME:
LTIME#<Zeitdeklaration>
Die Zeitdeklaration kann die Zeiteinheiten enthalten, die für die TIME-Konstante gelten, und zusätzlich:
us: Mikrosekunden
ns: Nanosekunden
Beispiel für LTIME:
LTIME1 := LTIME#1000d15h23m12s34ms2us44ns
Weitere Informationen finden Sie in den nachfolgenden Beschreibungen:
Wenn Sie eine Funktion implementieren und einer der Funktionseingänge (VAR_INPUT) über einen generischen IEC-Datentyp (ANY oder ANY_<type>)) verfügt, dann ist der Aufrufparameter nicht eindeutig definiert. Variablen unterschiedlicher Datentypen können an diese Funktion übergeben werden. Der übergebene Wert kann zusammen mit dem Datentypen über eine vordefinierte Struktur innerhalb der Funktion abgefragt werden.
Generische IEC-Datentypen, die die Verwendung elementarer Datentypen für Funktionseingänge ermöglichen:
Hierarchie generischer Datentypen |
Elementare Datentypen |
||
---|---|---|---|
ANY |
ANY_BIT |
– |
BYTE, WORD, DWORD, LWORD |
ANY_DATE |
– |
DATE_AND_TIME, DATE, TIME_OF_DAY, LDATE_AND_TIME, LDATE, LTIME_OF_DAY, |
|
ANY_NUM |
ANY_REAL |
REAL, LREAL |
|
ANY_INT |
USINT, UINT, UDINT, ULINT SINT, INT, DINT, LINT |
||
ANY_STRING |
– |
STRING, WSTRING |
Beispiel:
FUNCTION ANYBIT_TO_BCD : DWORD
VAR_INPUT
value : ANY_BIT;
END_VAR
Wenn die Funktion ANYBIT_TO_BCD aufgerufen wird, kann eine Variable des Datentyps BYTE, WORD, DWORD oder LWORD als Parameter an die Funktion übergeben werden.
Vordefinierte Struktur:
Beim Kompilieren des Codes wird ein ANY-Datentyp intern durch die folgende Struktur ersetzt:
TYPE AnyType :
STRUCT
// the type of the actual parameter
typeclass : __SYSTEM.TYPE_CLASS ;
// the pointer to the actual parameter
pvalue : POINTER TO BYTE;
// the size of the data, to which the pointer points
diSize : DINT;
END_STRUCT
END_TYPE
Der aktuelle Aufrufparameter weist die Strukturelemente während der Laufzeit zu.
Beispiel:
Dieses Codebeispiel vergleicht, ob die beiden übergebenen Variablen den gleichen Typ und den gleichen Wert aufweisen.
FUNCTION Generic_Compare : BOOL
VAR_INPUT
any1 : ANY;
any2 : ANY;
END_VAR
VAR
icount: DINT;
END_VAR
Generic_Compare := FALSE;
IF any1.typeclass <> any2.typeclass THEN
RETURN;
END_IF
IF any1.diSize <> any2.diSize THEN
RETURN;
END_IF
// Byte comparison
FOR icount := 0 TO any1.diSize-1 DO
IF any1.pvalue[iCount] <> any2.pvalue[iCount] THEN
RETURN;
END_IF
END_FOR
Generic_Compare := TRUE;
RETURN;
// END_FUNCTION
Lesen Sie außerdem die Beschreibung des __VARINFO Operatoren.