IndraLogic L40 03VRS
4.13 Kompatible IEC-Programmierung zwischen
unterschiedlichen Steuerungen
Übersicht
Verwendung von Zeigern innerhalb von Strukturen
DOK-CONTRL-IC*L40*****-AW02-DE-P
Für eine kompatible Programmierung zwischen den Systemen gelten
einige Besonderheiten, die im Folgenden beschrieben werden. Es wird
gezeigt, welche Programmiermethoden eingesetzt werden können, damit
keine Inkompatibilitäten entstehen:
• Verwendung von Zeigern innerhalb von Strukturen
• Packen von Strukturen bei IndraLogic L20
• Alignment (Speicherausrichtung) bei E/A-Adressen
• Zuweisen von Strukturen auf E/A-Adressen
Werden im IEC-Programm Strukturen angelegt, so bildet der Compiler
diese Strukturen beim Übersetzungsvorgang im Datenspeicher der
Steuerung ab. Der Compiler kennt die möglichen Einschränkungen der
zugrunde liegenden Prozessorplattform genau und legt die Elemente der
Struktur so im Speicher ab, dass er nur Adressen verwendet, die der
Prozessor für die zugehörigen Datentypen auch verwenden kann.
Werden Strukturen angelegt, die Elemente mit unterschiedlichen
Datentypen beinhalten, so fügt z. B. der Compiler bei der IndraLogic L20
Füllbytes ein, die für den Anwender nicht sichtbar sind.
Strukturunterschiede zwischen den Steuerungen
Beispiel
TYPE OutStruct :
STRUCT
Out01 : BYTE;
Out02 : WORD;
Out03 : BYTE;
Out04 : DWORD;
END_STRUCT
END_TYPE
Abb. 4-74: Beispiel einer Strukturdeklaration im IEC-Programm
Diese Struktur bildet sich je nach Plattform wie folgt im Speicher ab; hier
im Vergleich zwischen den Steuerungen IndraLogic L40 und L20:
IndraLogic L40
ADR0
Out01
ADR1
Out02
ADR3
Out03
ADR4
Out04
ADR8
Abb. 4-75: Resultierendes, steuerungsabhängiges Speicherabbild
Die Abbildung der Strukturelemente unterscheidet sich, so dass beim
Zugriff auf die Strukturelemente eine kompatible Programmiermethode
angewendet werden muss, die unabhängig von der Abbildung in der
Steuerung ist.
Projektieren und Programmieren
IndraLogic L20
: BYTE;
ADR0
: WORD;
ADR1
: BYTE;
ADR2
: DWORD;
ADR4
:
ADR5
ADR6
ADR7
ADR8
ADR12
4-61
Out01
: BYTE;
(Füllbyte)
Out02
: WORD;
Out03
: BYTE;
(Füllbyte)
(Füllbyte)
(Füllbyte)
Out04
: DWORD;
: