Deklaration eines Funktionsbausteins in ST
FUNCTION_BLOCK (* optional_begin *) FINAL|ABSTRACT (* optional_end *) FB_name_2
(* optional_begin *) USING Namespace_1;
USING Namespace_2; (* optional_end *)
(* optional_begin *) EXTENDS FB_name_1 (* optional_end *)
(* optional_begin *) IMPLEMENTS interface_1, interface_2, ... interface_n (* optional_end *)
(* optional: declaration of variables/instances *)
(* optional: declaration of methods *)
(* optional: body of function block *)
END_FUNCTION_BLOCK
Bedeutung |
Deklaration eines →Funktionsbausteins, wobei FB_name_2 ein →IEC-Bezeichner sein muss logi.CAD 3 unterstützt die folgenden Varianten an Funktionsbausteinen:
Die Schlüsselwörter FINAL und ABSTRACT (Features der →objektorientierte Programmierung) sind optional. Siehe "Deklaration einer Methode" für ein Beispiel mit einem abstrakten/finalen Funktionsbaustein.
Die USING-Namespace-Anweisung nach dem Namen des Funktionsbaustein ist ebenfalls optional. Siehe "Namespaces in ST: Verwendung" für Details für diese Anweisung.
Das Schlüsselwort EXTENDS (ein Feature der →objektorientierte Programmierung) ist ebenfalls optional. Geben Sie EXTENDS an, falls der
Funktionsbaustein von einem anderen Funktionsbaustein (dem Basis-Funktionsbaustein) abgeleitet werden soll. Den Namen des Basis-Funktionsbausteins FB_name_1 geben Sie hinter EXTENDS an.
Das Schlüsselwort IMPLEMENTS
(ein Feature der →objektorientierte Programmierung)
ist ebenfalls optional. Geben Sie IMPLEMENTS an, falls der
Funktionsbaustein ein oder mehrere →Interfaces implementieren soll. Die Namen der Interfaces geben Sie hinter IMPLEMENTS an (durch einen Beistrich voneinander getrennt).
|
FUNCTION_BLOCK Control
END_FUNCTION_BLOCK
INTERFACE ISwitch (* Deklaration des
1
. Interfaces *)
METHOD SwitchState
VAR_INPUT
STATE : BOOL;
END_VAR
END_METHOD
END_INTERFACE
INTERFACE IValve (* Deklaration des
2
. Interfaces *)
METHOD Open
END_METHOD
END_INTERFACE
FUNCTION_BLOCK MySwitch IMPLEMENTS ISwitch, IValve
VAR
switchState : BOOL;
valveOpen : BOOL;
END_VAR
METHOD PUBLIC SwitchState
VAR_INPUT
STATE : BOOL;
END_VAR
switchState := STATE;
END_METHOD
METHOD PUBLIC Open
valveOpen := TRUE;
END_METHOD
END_FUNCTION_BLOCK
FUNCTION_BLOCK LightRoom (* der Basis-Funktionsbaustein
"LightRoom"
*)
VAR
Light : BOOL;
END_VAR
VAR_INPUT
Daytime : BOOL;
END_VAR
METHOD PUBLIC M1 : INT
m1:=
2
;
END_METHOD
Light := NOT(Daytime);
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB_A
METHOD PUBLIC m1 : INT
m1 :=
1
;
END_METHOD
END_FUNCTION_BLOCK
FUNCTION_BLOCK Light2Room
EXTENDS LightRoom (* der abgeleitete Funktionsbaustein
"Light2Room"
*)
VAR
Light2 : BOOL;
// 2. Licht
Inst1 : FB_A;
v1, v2, v3 : INT;
END_VAR
METHOD PUBLIC OVERRIDE M1 : INT
m1 :=
3
;
END_METHOD
METHOD PUBLIC M2
END_METHOD
SUPER();
// Der Body des Basis-Funktionsbaustein "LightRoom" wird hier aufgerufen.
Light2:= NOT(Daytime);
v1 := SUPER.M1();
// Die Methode "M1" des Basis-Funktionsbausteins "LightRoom" wird hier aufgerufen.
v2 := THIS.M1();
// Die Methode "M1" des aktuellen Funktionsbausteins "Light2Room " wird hier aufgerufen.
v3 := Inst1.M1();
// Die Methode "M1" der Funktionsbaustein-Instanz 'Inst1' (= Funktionsbaustein 'FB_A') wird hier aufgerufen.
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB1 (* der Basis-Funktionsbaustein
"FB1"
*)
VAR
Var1 : INT;
END_VAR
METHOD PUBLIC InitFB1
Var1 :=
5
;
END_METHOD
InitFB1(); (* Aufruf der Methode
"InitFB1"
*)
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB2 EXTENDS FB1 (* der abgeleitete Funktionsbaustein
"FB2"
*)
VAR
Var2 : INT;
END_VAR
METHOD PUBLIC InitFB2
Var2 :=
5
;
InitFB1(); (* Aufruf der Methode
"InitFB1"
des Basis-Funktionsbaustein
"FB1"
- identisch zum Aufruf der Methode im Basis-Funktionsbaustein selbst *)
END_METHOD
InitFB2(); (* Aufruf der Methode
"InitFB2"
des abgeleiteten Funktionsbaustein
"FB2"
*)
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB3
VAR
iFB2 : FB2;
END_VAR
iFB2(); (* Aufruf des Instanz für den abgeleiteten Funktionsbaustein-Typ
"FB2"
*)
END_FUNCTION_BLOCK
In einem Funktionsbaustein dürfen Sie die folgenden Sprachelemente für ST verwenden:
Page:AS-Elemente in ST
Page:CASE-Anweisung in ST
Page:Deklaration von Variablen, die auf einem Interface basieren
Page:EXIT-Anweisung in ST
Page:FOR-Anweisung in ST
Page:IF-Anweisung in ST
Page:Kommentare in ST
Page:Leer-Anweisung in ST
Page:Zuweisungen in ST
Die Verwendung dieser Sprachelemente ermöglicht wiederum eine Verwendung von weiteren Elementen (z.B. Deklaration von STRING-Variablen im Abschnitt VAR ... END_VAR ). Dieses Elemente sind in der obigen Liste nicht angeführt.