Deklaration von internen Variablen

Syntax
VAR (* optional_begin *) CONSTANT RETAIN NON_RETAIN PUBLIC|PROTECTED|PRIVATE|INTERNAL { instanceParam } { noCodeGeneration } (* optional_end *)
  name_1, name_2, ..., name_n  : data-type (* optional_begin *) := initial-value { @RELATES_TO := name_A;} (* optional_end *);
  name_3, name_4, ..., name_n  : STRING[length] (* optional_begin *) := 'initial-value' { @RELATES_TO := name_B;} (* optional_end *);
  name_5, name_6, ..., name_n  : ARRAY [x..y] OF data-type (* optional_begin *) := [initial-value_1, initial-value_2, .., initial-value_n] { @RELATES_TO := name_C;} (* optional_end *);
  name_7, name_8, ..., name_n  : ARRAY [x1..y1, x2..y2, x3..y3] OF data-type;  (* Here, initial values and '@RELATES_TO' are possible as well. *)
  name_9, name_10, ..., name_n : REF_TO type := REF(name_A);
 
(* Additional pieces of data, such as partial addresses, are also possible for the variables. *)
(* Note: If a function block type is used as type for the variable, it is actually a function block instance. *)

(* Note: If a class is used as type for the variable, it is actually a class instance. *)

END_VAR
Bedeutung  

Deklaration einer bzw. mehrerer interner →Variablen (auch "lokale Variablen" genannt), wobei name_1 usw. →IEC-Bezeichner sein müssen. 
Die Deklaration mehrerer solcher Abschnitte ist zulässig. Die Deklaration ist innerhalb der Deklaration eines →Programms, eines →Funktionsbausteins, einer →Klasse, einer →Funktion oder einer →Methode möglich.

Das optionale Schlüsselwort CONSTANT markiert alle Variablen dieses Abschnitts als →konstant (das Überschreiben solcher Werte ist dann während der Ausführung des Programms nicht mehr möglich).
Das optionale Schlüsselwort RETAIN oder NON_RETAIN markiert alle Elemente dieses Abschnitts als →gepuffert oder nicht-gepuffert. RETAIN oder NON_RETAIN sind innerhalb der Deklaration eines Programms und der Deklaration eines Funktionsbausteins zulässig. Falls Variablen basierend auf einem strukturierten Datentyp im Abschnitt mit RETAIN oder NON_RETAIN deklariert sind, werden dessen Strukturelemente (inkl. Verschachtelungen) ebenfalls entsprechend als gepuffert oder nicht-gepuffert behandelt.

Mit dem optionalen Schlüsselwörter für die Sichtbarkeit definieren Sie die Sichtbarkeit aller Elemente dieses Abschnitts. Diese Schlüsselwörter sind nur innerhalb der Deklaration eines Funktionsbausteins oder der Deklaration einer Klasse zulässig.

Schlüsselwort

Bedeutung

PUBLIC

Öffentliche Verwendung: Die Variable kann überall dort verwendet werden, wo auch der Funktionsbaustein oder die Klasse verwendet werden kann.

PROTECTED (oder keiner)

Geschützte Verwendung (Standard): Die Variable kann nur innerhalb des Funktionsbausteins (oder der Klasse) verwendet werden, in der sie definiert ist. Zusätzlich kann sie in abgeleiteten Funktionsbausteinen (oder Klassen) verwendet werden.

Falls keine abgeleitete Funktionsbausteine oder Klasse vorhanden sind, hat PROTECTED die gleiche Bedeutung wie PRIVATE.

PRIVATE

Private Verwendung: Die Variable kann nur innerhalb des Funktionsbaustein oder der Klasse verwendet werden, in der sie definiert ist.

INTERNAL

Interne Verwendung: Die Variable kann nur innerhalb des gleichen →Namespaces verwendet werden.

 

Abweichungen von IEC-Norm

Falls Sie es bevorzugen, dass in Neuron Power Engineer eine andere Sichbarkeit für Elemente ohne Schlüsselwort gilt, definieren Sie die Neuron Power Engineer-Konfigurationsvariable lc3.var.access.default und den Wert PUBLIC, PRIVATE oder INTERNAL. Dieser Wert gilt dann als neuer Standard. Beim Wert PROTECTED für die Konfigurationsvariable ist weiterhin der Standard PROTECTED gültig, wie dies laut der →IEC-Norm vorgegeben ist.
Für PUBLIC als Standard können Sie als Alternative auch die Neuron Power Engineer-Konfigurationsvariable lc3.var.access.default.public und Wert TRUE definieren. Die Konfigurationsvariable lc3.var.access.default.public hat den Vorrang vor lc3.var.access.default. Details zu den Konfigurationsvariablen finden Sie in der englischen Dokumentation "Administrator's Manual".
Konsequenz: →Lokale Variablen (= VAR) von →Funktionsbausteinen (oder Klassen), bei denen kein Schlüsselwort für die Sichtbarkeit definiert ist, können laut der Norm nur innerhalb des Funktionsbausteins und in abgeleiteten Funktionsbausteinen (oder den entsprechenden Klassen) verwendet werden. Allerdings ist es möglich, die Konfiguration zu ändern, um diese Variablen überall dort zu verwenden, wo auch der Funktionsbaustein (oder die Klasse) verwendet werden kann.

Die optionalen →Pragmas { instanceParam }, { noCodeGeneration } und { @RELATES_TO := ...;} sind für Systemintegratoren vorgesehen, die Daten in der Instanzstruktur hinterlegen wollen. Durch diese Pragmas werden die Variablen im Abschnitt zu sogenannten Instanzparametern.

Ein →Datentyp ist als Typ für eine Variable möglich.

Informieren Sie sich unter "Unterstützte Datentypen", welche Datentypen Sie für die Deklaration von Variablen angeben können. Mit dem optionalen →Initialisierungswert [:= initial-value] weisen Sie der Variable einen Wert zu (Details: siehe "Initialisierung von Variablen in ST").
Außerdem ist es möglich,

Lokale Variablen, die innerhalb eines Funktionsbausteins oder einer Klasse deklariert werden, sind →statische Variablen. Lokale Variablen, die innerhalb einer Funktion oder einer Methode deklariert werden, sind →temporäre Variablen.

Gut zu wissen

(Graue Glühbirne) Neuron Power Engineer bietet außerdem die Möglichkeit, noch nicht festgelegte Speicherorte bei der Deklaration anzugeben. Siehe "Deklaration eines Sprachelements mit partieller Adresse in ST" für Details.

(Graue Glühbirne) Neuron Power Engineer bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar, JSON-String oder Typ für Variablen oder Datentypen angeben" für Details.

(Graue Glühbirne) In einem Abschnitt VAR...END_VAR ist auch die Deklaration von Funktionsbaustein-Instanzen oder Klassen-Instanzen und die Deklaration von Variablen basierend auf einem Interface zulässig.

Beispiel 1: Unterschiedliche Abschnitte "VAR ... END_VAR"
VAR RETAIN
  var1: BOOL;
  var2, var3 : INT; 
END_VAR
 
VAR
  var4 : STRING[10];
  var5: ARRAY [1..2] of BOOL;
  var6 : INT;
  myRef1: REF_TO INT;
  var1 : INT;
END_VAR
Beispiel 2: Funktionsbaustein mit unterschiedlich sichtbaren Variablen
FUNCTION_BLOCK ExampleVisibleVars
  VAR PRIVATE     // The variables "Var1" and "Var2" may only be used from inside this function block "ExampleVisibleVars".
    Var1, Var2 : INT;
  END_VAR
  VAR             // In case of default configuration: The variables "Var3" and "Var4"  may only be used from inside this function block as well.
    Var3, Var4 : BOOL;
  END_VAR
  VAR PUBLIC      // The variable "Var5" may be used from any location where the function block can be used as well.
    Var5 : TIME;
  END_VAR     
END_FUNCTION_BLOCK