Deklaration von Referenz-Variablen (inkl. Zuweisungen darauf)
VAR | VAR_INPUT | VAR_OUTPUT | VAR_TEMP name_1, name_2, ..., name_n : REF_TO type := REF(name_A); name_3, name_4, ..., name_n : REF_TO ARRAY [x..y] OF type := REF(name_B); (* Bis zu 3 Dimensionen sind möglich. *) ... END_VAR
Bedeutung |
---|
Deklaration einer oder mehrerer →Referenz-Variablen, wobei Informieren Sie sich unter "Unterstützte Datentypen", welche Datentypen ( Einschränkungen
|
Die Deklaration von Referenz-Variablen ist innerhalb dieser Abschnitte möglich:
Abschnitt | Die Deklaration der Referenz erfolgt als: |
---|---|
VAR ... END_VAR | interne Variable (siehe "Deklaration von internen Variablen und Funktionsbaustein-Instanzen in ST") |
VAR_INPUT ... END_VAR | Eingangsvariable (siehe "Deklaration von Eingangsvariablen in ST") |
VAR_OUTPUT ... END_VAR | Ausgangsvariable (siehe "Deklaration von Ausgangsvariablen in ST") |
VAR_TEMP ... END_VAR | temporäre Variable (siehe "Deklaration von temporären Variablen in ST") |
logi.CAD 3 bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar oder JSON-String für Variablen und Datentypen angeben" für Details.
VAR myInt: INT; myArray: ARRAY [1..10] OF INT; myRef: REF_TO INT := REF(myInt); myRefArr: REF_TO ARRAY [1..10] OF INT := REF(myArray); myRef2: REF_TO INT := REF(myArray[1]); END_VAR
Zuweisungen auf Referenz-Variablen
→Zuweisungen auf Referenz-Variablen sind prinzipiell innerhalb der Deklaration eines →Programms, eines →Funktionsbausteins und einer →Funktion möglich. Die Verwendung von REF(...)
ist jedoch nur eingeschränkt möglich (siehe Einschränkungen oben).
reference_variable_1 := REF(name) | NULL; reference_variable_1 := reference_variable_2;
Der Ausdruck auf der rechten Seite des Zuweisungsoperators ":=
" darf eines der folgenden Konstrukte sein:
REF(name)
, wobeiname
eine Variable vom gleichen Datentyp wie die Referenz-Variable sein muss, auf die die Zuweisung erfolgt – Beachten Sie die Einschränkungen bei der Verwendung vonREF()
, die oben angeführt sind.NULL
- eine andere deklarierte Referenz-Variable, wobei diese vom gleichen Datentyp wie die Referenz-Variable sein muss, auf die die Zuweisung erfolgt
Bei Zuweisung auf eineARRAY
-Referenz-Variable muss die Variable vom gleichen Datentyp und mit dem gleichen Index-Unterbereich sein.
VAR Int1R : REF_TO INT; Int2R : REF_TO INT; DIntR : REF_TO DINT; Int1 : INT; DInt2 : DINT; ArrIntR1 : REF_TO ARRAY [1..10] OF INT; ArrInt1 : ARRAY [1..10] OF INT; ArrInt2 : ARRAY [2..11] OF INT; END_VAR Int1R := NULL; (* OK, da 'NULL' für Zuweisung auf Referenz-Variable zulässig ist *) Int1R := REF(Int1); (* OK, da 'Int1' vom gleichen Datentyp wie 'Int1R' ist *) Int1R := Int2R; (* OK, da 'Int2R' vom gleichen Datentyp wie 'Int1R' ist *) ArrIntR1 := REF(ArrInt1); (* OK, da 'ArrInt1' vom gleichen Datentyp und mit dem gleichen Index-Unterbereich wie 'ArrIntR1' ist *) Int1R := 0; (* Fehler, da '0' für Zuweisung auf Referenz-Variable nicht zulässig ist *) Int1R := REF(DInt2); (* Fehler, da 'DInt2' nicht vom gleichen Datentyp wie 'Int1R' ist *) Int1R := DIntR; (* Fehler, da 'DIntR' nicht vom gleichen Datentyp wie 'Int1R' ist *) Int1R := Int1; (* Fehler, da 'Int1' keine Referenz-Variable ist *) ArrIntR1 := REF(ArrInt2); (* Fehler, da 'ArrInt2' nicht mit dem gleichen Index-Unterbereich wie 'ArrIntR1' deklariert ist, obwohl sie vom gleichen Datentyp ist *) ArrIntR1 := ArrInt2; (* Fehler, da 'ArrInt2' keine Referenz-Variable ist *)
Dereferenzierung: Zugriff auf den Inhalt von Referenz-Variablen
Der Zugriff auf den Inhalt von Referenz-Variablen ist als Dereferenzieren bekannt und erfolgt mit dem Zeichen ^, das dem Namen der Referenz-Variable folgt.
Int1 := Int1R^; (* Der Inhalt der Variable, auf welche die Referenz-Variable 'Int1R' verweist, wird der Variable 'Int1' zugewiesen. *) Int2R^ := ArrIntR1^[2]; (* Die Variable, auf die 'Int2R' referenziert, enthält nun den gleichen Inhalt wie das 2. Element der Array-Variable, auf welche die Referenz-Variable 'ArrIntR1' verweist. *) ArrIntR1^ := ArrInt1; (* Die Variable 'ArrInt1' wird auf den Inhalt der Variable zugewiesen, auf welche die Referenz-Variable 'ArrIntR1' verweist. *)
Ein Zugriff auf Referenz-Variablen mit dem Inhalt NULL
wird nicht bei der Eingabe im ST-Editor geprüft, sondern erst beim Ausführen der Anwendung. In diesem Fall wird der Ausgang ENO
der umfassenden →POE auf den Wert FALSE
(bzw. einer Entsprechung) gesetzt. Zusätzlich wird die Zuweisung nicht ausgeführt, falls der Zugriff auf der rechten Seite des Zuweisungsoperators ":=
" erfolgt (siehe Int1 := Int1R^
; im obigen Beispiel).
logi.cals
empfiehlt Ihnen, Code in Ihrer Anwendung (z.B. IF
-Anweisungen) einzufügen, um den Zugriff auf Referenz-Variablen mit dem Inhalt NULL
zu erkennen.