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