Adressen

VORSICHT

Verschiebung der Inhalte von Adressen durch Online-Change

Wenn Sie Pointer auf Adressen verwenden, können sich bei einem Online-Change Inhalte von Adressen verschieben.

Adressen 1:

Automatische Adressierung

Es wird empfohlen, keine direkte Adressierung für allokierte Variablen zu verwenden, sondern stattdessen den Platzhalter * zu nutzen.
Mit dem Platzhalter * (%I*, %Q* bzw. %M*) wird eine flexible und optimierte Adressierung von TwinCAT automatisch durchgeführt.

Syntax:

<identifier> AT <address> : <data type>;

Bei der Angabe einer Adresse werden die Position im Speicher und die Größe mittels spezieller Zeichenfolgen ausgedrückt. Eine Adresse ist gekennzeichnet mit dem Prozentzeichen %, dann folgt der Speicherbereichspräfix, der optionale Größenpräfix und die Speicherposition.

%<memory area prefix> ( <size prefix> )? <memory position>
<memory area prefix> : I | Q | M
<size prefix>        : X | B | W | D
<memory position>    : * | <number> ( .<number> )*

Speicherbereichspräfix

I

Eingangsspeicherbereich für Eingänge ("Inputs")

Für physikalische Eingänge über Eingangstreiber ("Sensoren")

Q

Ausgangsspeicherbereich für Ausgänge ("Outputs")

Physikalische Ausgänge über Ausgangstreiber ("Aktoren")

M

Merkerspeicherbereich

Größenpräfix

X

Single Bit

B

Byte (8 Bits)

W

Word (16 Bits)

D

Double word (32 Bits)

Beispiele:

IbSensor1 AT%I*    : BOOL;
IbSensor2 AT%IX7.5 : BOOL;
Adressen 2:

Wenn Sie nicht explizit eine Einzelbitadresse angeben, werden boolesche Variablen byteweise alloziert. Beispiel: Eine Wertänderung von bVar AT %QB0 betrifft den Bereich von QX0.0 bis QX0.7.

Beispiele

Variablendeklarationen:

IbSensor AT%I* : BOOL;

Bei der Adressangabe ist statt der Speicherposition der Platzhalter * angegeben. Dadurch wird eine flexible und optimierte Adressierung von TwinCAT automatisch durchgeführt.

InInput AT%IW0 : WORD;

Variablendeklaration mit Adressangabe eines Eingangsworts

ObActuator AT%QB0 : BOOL;

Boolesche Variablendeklaration

Hinweis: Für boolesche Variable wird intern ein Byte alloziert, wenn keine Einzelbitadresse angegeben ist. Eine Wertänderung von ObActuator betrifft folglich den Bereich von QX0.0 bis QX0.7.

IbSensor AT%IX7.5 : BOOL;

Boolesche Variablendeklaration mit expliziter Angabe einer Einzelbitadresse. Beim Zugriff wird nur das Eingangsbit 7.5 gelesen.

Weitere Adressen:

%QX7.5

%Q7.5

Einzelbitadresse des Ausgangsbits 7.5

%IW215

Wortadresse des Eingangsworts 215

%QB7

Byteadresse des Ausgangsbytes 7

%MD48

Adresse eines Doppelworts an der Speicherstelle 48 im Merkerbereich

%IW2.5.7.1

Interpretation abhängig von der aktuellen Steuerungskonfiguration (siehe unten)

Mögliche Speicherbereichsüberlappungen bei direkten Adressen

Um in einem SPS-Projekt eine gültige Adresse zuzuweisen, muss Ihnen die gewünschte Position im Prozessabbild bekannt sein. Dafür müssen Sie zunächst den Speicherbereich sowie die erforderliche Größe festlegen. Bei der Wahl der Speicherposition muss die Zuordnung der verschiedenen Größen im Speicher, wie in der folgenden Tabelle dargestellt, beachtet werden, damit Sie Speicherbereichsüberlappungen ausschließen können.

DWord

Word

Byte

Bit

D0

W0

B0

X0.0

 

 

B1

X1.0

 

W1

B2

X2.0

 

 

B3

X3.0

D1

W2

B4

X4.0

 

 

B5

X5.0

 

W3

B6

X6.0

 

 

B7

X7.0

D2

W4

B8

X8.0

Beispiele: Speicherbereichsüberlappung

1. W0 enthält B0 und B1. Wenn Sie eine Word Variable auf W0 und eine boolesche Variable auf B1 legen, würden sich Ihre Speicherbereiche überlappen.

2. W3 enthält B6 und B7. Wenn Sie eine Word Variable auf W3 und eine boolesche Variable auf B6 legen, würden sich Ihre Speicherbereiche überlappen.

 

Siehe auch: