Alle Elemente vom gleichen Datentyp (BOOL, WORD, INT, DWORD, DINT, REAL und STRING mit derselben Zeichenfolgenlänge) werden jeweils zusammengefasst und beginnend bei einer gemeinsamen Anfangsadresse der Reihe nach zugewiesen. Arrays werden ebenfalls von dieser gemeinsamen Anfangsadresse aus zugeordnet.
Für diese Anfangsadresse gilt Folgendes: Wenn ein SDT aus Elementen vom Typ BOOL oder ARRAY OF BOOL besteht, wird er in einen Bitspeicherbereich gelegt, ansonsten wird er in einem für 16-Bit-Worte reservierten Speicher gelegt.
Um Zweideutigkeiten bei der Initialisierung zu vermeiden, dürfen diese SDTs nicht initialisiert werden. Folgende Default-Initialisierungen werden verarbeitet:
Datentyp |
Initialisierungswert |
---|---|
BOOL |
FALSE |
WORD, INT, UINT, DWORD, DINT, UDINT |
0 |
REAL |
0.0 |
STRING |
'' (leere Zeichenfolge) |
Die Adresse, die von der größtmöglichen Zeichenfolge verwendet wird, wird initialisiert mit der größtmöglichen Länge derjenigen Zeichenfolge, die größer oder gleich null ist. Der Rest der Zeichenfolge wird mit Nullen initialisiert.
Alle Elementvariablen vom Typ STRING müssen am Ende der Deklaration stehen.
Generell muss die jeweilige Speicherbelegung der verwendeten Datentypen genauestens beachtet werden.
Insbesondere bei Verwendung von STRING-Elementen ist deren spezielle Speicherbelegung zu berücksichtigen, da sie mit Hilfe der anderen Elemente beliebig überschrieben werden können.
Außerdem müssen alle Elementvariablen vom Typ String am Ende der Deklaration stehen.
Ein SDT kann nicht als Variable eines SDT mit überlappenden Elementen verwendet werden.
SDT ohne Elemente vom Typ BOOL (DUTwithoutBOOLs):
Speicherbelegung von SDTs mit überlappenden Elementen :
16-bit word area |
||||||
---|---|---|---|---|---|---|
DT100 |
WORD1 |
DWORD1 |
INT1 |
DINT1 |
REAL1 |
STRING1 |
DT101 |
WORD2 |
INT2 |
||||
DT102 |
DWORD2 |
DINT2 |
||||
DT103 |
||||||
STRING2 |
Die Variablen STRING1 und STRING2 müssen die gleiche Länge besitzen und am Ende der Deklaration stehen.
SDT (DUTwithBOOLs) mit Elementen vom Typ BOOL (ohne benutzerdefinierte Adressen):
Speicherbelegung von SDTs mit überlappenden Elementen :
Bit area |
||||||||
---|---|---|---|---|---|---|---|---|
WR10 |
Bool14 |
Bools[04] |
WORD1 |
DWORD1 |
INT1 |
DINT1 |
REAL1 |
STRING1 |
WR11 |
WORD2 |
INT2 |
||||||
WR12 |
DWORD2 |
DINT2 |
||||||
WR13 |
Die Variable STRING1 muss am Ende der Deklaration stehen.
SDT mit Arrays:
Speicherbelegung von SDTs mit überlappenden Elementen :
16-bit word area |
||||
---|---|---|---|---|
DT100 |
String1_Max |
String_Parts[1,1] |
String1 |
StringS[1] |
DT101 |
String1_Act |
String_Parts[1,2] |
||
DT102 |
String1_Char12 |
String_Parts[1,3] |
||
DT103 |
String1_Char34 |
String_Parts[1,4] |
||
DT104 |
String2_Max |
String_Parts[2,1] |
String2 |
StringS[2] |
DT105 |
String2_Act |
String_Parts[2,2] |
||
DT106 |
String2_Char12 |
String_Parts[2,3] |
||
DT107 |
String2_Char34 |
String_Parts[2,4] |
Die Variablen String1, String2 und Strings müssen die gleiche Länge besitzen und am Ende der Deklaration stehen.
Allgemeine SDTs mit überlappenden Elementen sind in der FP tool library bereits vordefiniert.