Herunterladen Inhalt Inhalt Diese Seite drucken

Bosch Rexroth IndraMotion MLC 11VRS Funktionsbeschreibung Seite 216

Vorschau ausblenden Andere Handbücher für Rexroth IndraMotion MLC 11VRS:
Inhaltsverzeichnis

Werbung

214/557
Bosch Rexroth AG
SPS-Programmierung
Beispiel Pointerzugriff
Pointerzugriff auf Struktur
Beispiel (Natural Alignment)
Zulässige Adressierung
Unzulässige Adressierung
det werden. Bei Verwendung eines abweichenden Pointer-Typs, z. B. Byte-
Pointer auf Wort- oder Doppelwort-Variable muss die Byte Order beachtet
werden.
Programm:
Variable_01 : WORD;
Array_01 : ARRAY [0 to 10] of DWORD;
ptr_Var_01 : POINTER TO WORD;
ptr_arr_01 : POINTER TO DWORD;
ptr_Var_01 := ADR (Variable_01);
ptr_arr_01 := ADR (Array_01)
Wurde eine Struktur nach der Methode "Natural-Alignment" angelegt, ist eine
Ardessierung von Strukturelementen über Pointer, die zur Laufzeit über die
Basisadresse der Struktur und einen entsprechenden Offset berechnet wer‐
den, unzulässig.
Die Offset-Bildung zur Adressierung eines Strukturelements ist nicht sicher
möglich, da sich bei Änderungen der Applikation die Basisadresse der Struktur
und damit Anzahl der Füllbytes ändern kann.
Im Fall des "Natural-Alignment" sieht die kompatible Verwendung der Struktu‐
ren eine direkte Adressierung der Elemente über den Punkt-Operator vor:
Strukturname.Elementname := Elementwert;
Soll die Adresse einer Struktur über einen Zeiger an unterlagerte Funktionen
übergeben werden, ist die Adressierung der Elemente ebenfalls nur durch die
Offsetberechnung durch den Compiler zulässig: Strukturzeiger^.Elementna‐
me := Elementwert;
Programm:
TYPE OutStruct :
STRUCT
Out01 : BYTE;
Out02 : WORD;
Out03 : BYTE;
Out04 : DWORD;
END_STRUCT
END_TYPE
StructInst : OutStruct; (* Deklaration
Strukturinstanz *)
pt : POINTER TO StructInst; (* Deklaration Zeiger auf Strukturinstanz *)
pt2 : POINTER TO BYTE; (* Deklaration Zeiger auf BYTE *)
pt^.Out02 := 16#FF00; (* Zugriff auf Strukturelement per Zeiger *)
Programm:
StructInst.Out03 := 2#11110000; (*Zugriff auf Strukturelement *)
pt := ADR (StructInst); (* Zeiger-Initialisierung *)
pt^.Out02 := 16#FF00; (* Zugriff auf Strukturelement per Zeiger *)
Programm:
pt2 := ADR (StructInst.Out01); (* Zeiger-Initialisierung *)
pt2 := pt + 3; (*Offsetberechnung für 3. Stukturelement Out03*)
pt2^:= 2#11110000; (* Zugriff auf Strukturelement per Zeiger *)
Je nachdem auf welcher Adresse das erste Byte der Struktur liegt (wird beim
Compiliervorgang festgelegt), ergibt sich für die folgenden Elemente der Sruk‐
tur eine unterschiedliche Anzahl von Füllbytes. Daher ist eine Adressberech‐
nung zur Laufzeit über die Basisadresse der Struktur und einen entsprechen‐
den Offset nicht zuverlässig möglich.
Byte Alignment (packed):
Die Alignment-Methode "Byte-Aligned" (packed) kann bei der IndraMotion
MLC für ausgewählte Datenbereiche durch eine entsprechende Compiler-An‐
weisung (Pragma "pack") bei der Strukturdeklaration erzwungen werden.
DOK-IM*MLC-FUNC****V11-RE03-DE-P
Rexroth IndraMotion MLC 11VRS Funktionsbeschreibung

Quicklinks ausblenden:

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis