AT-Deklaration
Um eine Projektvariable an eine flexible (*) oder direkte Adresse zu binden, können Sie die Adresse bei der Deklaration der Variablen angeben. Durch Verwendung einer entsprechenden Variablenbezeichnung können Sie der Adresse einen aussagekräftigen Namen geben.
![]() | 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. |
Wenn Sie eine Variable einer Adresse zuweisen, müssen Sie Folgendes beachten:
- Auf Variablen, die auf einen Eingang mit direkter Adressierung gelegt sind, können Sie im Implementierungseditor nicht schreibend zugreifen. Dies führt zu einem Compiler-Fehler.
- Wenn Sie AT-Deklarationen mit direkter Adressierung bei Struktur- oder Funktionsbaustein-Komponenten anwenden, verwenden alle Instanzen denselben Speicher. Dies entspricht der Verwendung von statischen Variablen, wie sie z. B. auch aus klassischen Programmiersprachen wie "C" bekannt sind.
- Das Speicher-Layout von Strukturen ist ebenfalls abhängig vom Zielsystem.
![]() | Gültige Adressen Dem Schlüsselwort AT muss eine gültige Adresse folgen. Weitere Informationen hierzu finden Sie im Abschnitt Referenz Programmierung > Operanden > Adressen. Beachten Sie mögliche Überlappungen im Fall vom Byte-Adressierungsmodus. |
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) |
Siehe auch:
- Referenz Programmierung > Operanden > Adressen