Deklaration von internen Variablen und Funktionsbaustein-Instanzen in ST

Syntax
VAR (* optional_begin *) CONSTANT RETAIN NON_RETAIN { 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 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;   (* Initialisierungswerte und '@RELATES_TO' sind hier ebenfalls möglich. *)
  name_9, name_10, ..., name_n : REF_TO type := REF(name_A);
  FB_instance_1, FB_instance_2, ..., FB_instance_n : FB-type := ( input_1 := initial-value, input_2 := initial-value, ..., output_n := initial-value);
  FB_instance_A, FB_instance_B, ..., FB_instance_n: ARRAY [x..y] OF FB-type := [(input_1 := initial-value, input_2 := initial-value, ...), (input_1 := initial-value, input_2 := initial-value, ...), ...];
  FB_instance_C, FB_instance_D, ..., FB_instance_n: ARRAY [x1..y1, x2..y2, x3..y3] OF FB-type;  (* Initialisierungswerte sind hier ebenfalls möglich. *)
END_VAR
Bedeutung

Deklaration einer bzw. mehrerer interner →Variablen (auch "lokale Variablen" genannt) und/oder Deklaration einer oder mehrerer →Funktionsbaustein-Instanzen, wobei name_1 bzw. FB_instance_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 oder einer →Funktion 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 Variablen dieses Abschnitts als →gepuffert oder nicht-gepuffertRETAIN 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. Falls Funktionsbaustein-Instanzen im aktuellen Abschnitt mit RETAIN oder NON_RETAIN deklariert sind, informieren Sie sich über das Verhalten deren Variablen bgzl. RETAIN und NON_RETAIN im FAQ-Artikel "Wie wird das Schlüsselwort "RETAIN" für Funktionsbaustein-Instanzen berücksichtigt?".

Die optionalen →Pragmas { instanceParam }, { noCodeGeneration } und { @RELATES_TO := name_A;} 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, ein vorhandener →Funktionsbaustein (in →ST oder →FBS erstellt) als Typ für eine Funktionsbaustein-Instanz.

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,

Bei der Deklaration der Funktionsbaustein-Instanz können Sie die →Eingangsvariablen und →Ausgangsvariablen des Funktionsbausteins initialisieren. Der Initialisierungswert muss mit dem Datentyp der deklarierten Variable übereinstimmen oder ein Datentyp sein, der aufgrund der impliziten Konvertierung in diesen umgewandelt werden kann.
Sie können Funktionsbaustein-Instanzen auch mit Hilfe von ein- oder mehrdimensionalen ARRAYs deklarieren (auch dies ist analog zur "Deklaration eines ARRAY-Datentyps in ST") oder mit Hilfe von Strukturelementen deklarieren (siehe "Deklaration eines strukturierten Datentyps in ST").


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

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.

Beispiele
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;
  Inst1, Inst2 : TOF; 
    (* Deklaration von zwei Instanzen des Funktionsbausteins 'TOF' *)
  Inst3 : Control := (IN1 := 10, IN2 := 20, T1 := T#3ms);
    (* Deklaration einer Instanz des Funktionsbausteins 'Control' mit Initialisierung der Eingänge 'IN1', 'IN2' und 'T1' *)
  TONArr2 : ARRAY [0..2] OF TON := [(PT:=T#100ms), (PT:=T#50ms)];
    (* Deklaration von 3 Instanzen des TON-Bausteins, bei den ersten 2 Instanzen wird der Eingang 'PT' initialisiert *)
END_VAR
Beispiel für die Deklaration einer Funktionsbaustein-Instanz inkl. Initialisierung, wobei ein Eingang der Funktionbaustein-Instanz mit Hilfe eines strukturierten Datentyps deklariert ist
PROGRAM Test
  VAR
    myFB : FB := (in1 := 1, c := (re := 1, im := 2));
  END_VAR
END_PROGRAM

FUNCTION_BLOCK FB
  VAR_INPUT
    in1 : int;
    c : complex;
  END_VAR
END_FUNCTION_BLOCK

TYPE
  complex : STRUCT
    re : REAL;
    im : REAL;
  END_STRUCT;
END_TYPE