Im Dialogfeld Eigenschaften können Sie zwischen zwei Möglichkeiten der Speicherbelegung durch den SDT wählen:
mit überlappenden Elementen
mit nicht-überlappenden Elementen
Alle Elemente vom Datentyp BOOL werden zu einem Block zusammengefasst und dem Bitspeicherbereich der Reihe nach zugewiesen:
Wenn Elemente vom Typ ARRAY OF BOOL verwendet werden, beginnt die Speicherzuweisung bei einer 16-Bit-Wortadresse.
Werden keine Elemente vom Typ ARRAY OF BOOL verwendet, hängt die Speicherzuweisung von der Anzahl der booleschen Elemente ab:
Anzahl boolesche Elemente |
Beginn der Speicherzuweisung |
Speicherzuweisung |
---|---|---|
1 |
bei beliebiger Bitadresse: R0, R1, R2, … |
![]() |
2 |
bei beliebiger gerader Bitadresse, z.B. R0, R2, R4, … |
![]() |
4 |
an der Nibble-Grenze, z.B. R0, R4, R8, … |
![]() |
8 |
an der Byte-Grenze, z.B. R0, R8, R10, … |
![]() |
9 oder mehr |
bei einer Wortadresse, z.B. R0, R10, R20, … |
![]() |
3 |
bei beliebiger Bitadresse: R0–R2 : benutzt R3, R7: nicht benutzt und aufgefüllt |
![]() SDTs mit aufgefüllten Elementen (O: aufgefülltes Bit, das nicht benutzt werden kann) |
5–7 |
bei beliebiger Bitadresse: R0–R4 : benutzt R5–R7: nicht benutzt und aufgefüllt |
![]() |
Wenn keine Benutzeradresse zugewiesen ist und 3 oder 5–7 boolesche Elemente in einem SDT verwendet werden, wird der belegte Speicher bis zum nächsten Byte oder bis zur Nibble-Grenze aufgefüllt.
Dieser aufgefüllte boolesche Speicherbereich kann nicht verwendet werden.
Alle Elemente vom Datentyp ARRAY OF BOOL werden zu einem Block zusammengefasst und dem Bitspeicherbereich beginnend bei einer 16-Bit-Wortadresse zugewiesen.
Bei Verwendung von einem oder mehr Elementen vom Typ ARRAY OF BOOL: Die Speicherzuweisung der einfachen booleschen Elemente und der Elemente vom Typ ARRAY OF BOOL erfolgt bei der Wortadresse.
Wortbereich:
Boolescher Bereich:
Die freien Bits werden vom SDT nicht belegt und werden für andere (einfache) boolesche Elemente verwendet, die in diese leeren Stellen passen.
Wenn ein boolesches Array verwendet werden soll, wird empfohlen, ein Vielfaches von 16 einfachen booleschen Elementen sowie boolesche Arrays mit einem Vielfachen von 16 booleschen Elementen zu verwenden.
Alle anderen Elemente werden zu einem Block zusammengefasst und einem für 16-Bit-Worte reservierten Speicherbereich der Reihe nach zugewiesen.
Aufgrund der Optimierung des Speicherlayouts entspricht die Reihenfolge der booleschen Adressen der SDT-Elemente nicht der in der SDT-Deklarationsliste definierten Reihenfolge.
Beim Zugriff auf einen SDT mit untergeordneten SDT-Elementen über Benutzeradressen sollte das Speicherlayout mit Hilfe eines CSV-Exports oder des Monitorfensters überprüft werden.
SDT (DUTwithoutBOOLs) ohne Elemente vom Typ BOOL:
Speicherbelegung von SDTs mit nicht-überlappenden Elementen:
16-bit word area |
|
---|---|
DT100 |
wWORD1 |
DT101 |
dwWORD1 |
DT102 |
|
DT103 |
iINT1 |
DT104 |
diDINT1 |
DT105 |
|
DT106 |
wWORD2 |
DT107 |
dwWORD2 |
DT108 |
|
DT109 |
iINT2 |
DT110 |
diDINT2 |
DT111 |
|
DT112 |
rREAL1 |
DT113 |
|
DT114 |
sSTRING1 |
DT115 |
|
DT116 |
|
DT117 |
|
DT118 |
sSTRING2 |
DT119 |
|
DT120 |
|
DT121 |
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 nicht-überlappenden Elementen:
Bit area |
16-bit word area |
|||
---|---|---|---|---|
R100 |
bBool1 |
DT100 |
wWORD1 |
|
R101 |
bBool2 |
DT101 |
dwWORD1 |
|
R102 |
bBool3 |
DT102 |
||
R103 |
bBool4 |
DT103 |
iINT1 |
|
DT104 |
diDINT1 |
|||
R110 |
Bools[0] |
DT105 |
||
R111 |
Bools[1] |
DT106 |
wWORD2 |
|
R112 |
Bools[2] |
DT107 |
dwWORD2 |
|
R113 |
Bools[3] |
DT108 |
||
R114 |
Bools[4] |
DT109 |
iINT2 |
|
DT110 |
diDINT2 |
|||
DT111 |
||||
DT112 |
rREAL1 |
|||
DT113 |
||||
DT114 |
sSTRING1 |
|||
DT115 |
||||
DT116 |
||||
DT117 |
Die Variable STRING1 muss am Ende der Deklaration stehen.
SDT mit Arrays:
Speicherbelegung von SDTs mit nicht-überlappenden Elementen:
16-bit word area |
|
---|---|
DT100 |
String1_Max |
DT101 |
String1_Act |
DT102 |
String1_Char12 |
DT103 |
String1_Char34 |
DT104 |
String2_Max |
DT105 |
String2_Act |
DT106 |
String2_Char12 |
DT107 |
String2_Char34 |
DT108 |
String_Parts[1,1] |
... |
... |
DT115 |
String_Parts[2,4] |
DT116 |
String1 |
DT117 |
|
DT118 |
|
DT119 |
|
DT120 |
String2 |
DT121 |
|
DT122 |
|
DT123 |
|
DT124 |
Strings[1] |
DT125 |
|
DT126 |
|
DT127 |
|
DT128 |
Strings[2] |
DT129 |
|
DT130 |
|
DT131 |
Die Variablen String1, String2 und Strings müssen die gleiche Länge besitzen und am Ende der Deklaration stehen.