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. |
Automatische Adressierung Es wird empfohlen, keine direkte Adressierung für allokierte Variablen zu verwenden, sondern stattdessen den Platzhalter * zu nutzen. |
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;
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:
- SPS-Projekt programmieren > Variablen deklarieren > AT-Deklaration