Aufruf der Funktionsbaustein-Instanz in ST

Syntax
FB_instance_1();                                  (* Aufrufe von Funktionsbaustein-Instanzen ohne Parameterliste *)
FB_instance_2[n]();                               (* Diese Funktionsbaustein-Instanz ist mit Hilfe von 'ARRAY [x..y] OF' deklariert. *)
FB_instance_2[n, n]();                            (* Diese Funktionsbaustein-Instanz ist mit Hilfe von 'ARRAY [x1..y1, x2..y2] OF' deklariert. *)
FB_instance_3 
  (input_1:=x1,input_2:=x2,...,input_n:=xn,
  output_1=>y1,output_2=>y1,...,output_n=>yn);    (* Aufruf einer Funktionsbaustein-Instanz mit Parameterliste *)
Bedeutung

formaler →Aufruf der →Funktionsbaustein-Instanzen (= formaler Funktionsbaustein-Aufruf) ohne oder mit Parameterliste
Für den Aufruf einer Funktionsbaustein-Instanz, die mit Hilfe eines eindimensionalen ARRAYs deklariert ist, müssen Sie den →ARRAY-Index nach dem Namen spezifizieren und in [] einschließen. Für eine Funktionsbaustein-Instanz, die mit Hilfe von mehrdimensionalen ARRAYs deklariert ist, spezifizieren Sie den entsprechenden ARRAY-Index ebenfalls in [] nach dem Namen.

Die Parameterliste beim formalen →Aufruf kann aus folgenden Elementen bestehen:

  • →Zuweisungen auf →Eingangsvariablen (inkl. auf Eingang EN)
    Der Ausdruck auf der rechten Seite des Zuweisungsoperators ":=" in den Zuweisungen auf Eingangsvariablen darf eines jener Konstrukte sein, wie unter Zuweisung angeführt.
  • Zuweisungen auf →Ein-/Ausgangsvariablen
    Der Ausdruck auf der rechten Seite des Zuweisungsoperators ":=" in den Zuweisungen auf Ein-/Ausgangsvariablen darf nur eines jener Konstrukte sein, die auch auf der linken Seite des Zuweisungsoperators ":=" stehen könnten.
  • Zuweisungen von →Ausgangsvariablen (inkl. auf Ausgang ENO)
    Der Ausdruck auf der rechten Seite des Zuweisungsoperators "=>" in den Zuweisungen von Ausgangsvariablen darf eine deklarierte →Variable (z.B. result) des passenden →Datentyps sein.

Als Alternativen können Sie auch die folgenden Varianten beim Aufruf verwenden:

  • nicht-formaler Aufruf 
    Die Parameterliste muss genau dieselbe Anzahl an Eingangsvariablen haben – in genau derselben Reihenfolge und mit passenden Datentypen, wie in der Deklaration
    angegeben, ausgenommen der Parameter zur Ausführungssteuerung EN und ENO.
     
    Beispiel: Inst2 (10,20,T#3ms); – Dieser nicht-formale Aufruf ist gleichbedeutend mit diesem formalen Aufruf: Inst2 (EN := TRUE,IN1:=10,IN2 := 20,T1 := T#3ms, OUT => result);  

  • unvollständige Parameterliste beim formalen Aufruf
    Sie können Eingangsvariablen und Ausgangsvariablen in der Parameterliste weglassen. 
    Weggelassene Eingangsvariablen behalten die Werte aus einem ggf. vorigen Aufruf oder Zuweisung (siehe Beispiele unten). Falls vorige Aufrufe und vorige Zuweisungen nicht vorhanden sind, wird der →Initialisierungswert der Eingangvariablen verwendet. 
  • Zugriffe vom formalen Aufruf getrennt (EN jedoch ausgenommen)
    Sie können Zugriffe auf Eingangsvariablen und/oder Ausgangsvariablen vor/nach dem Aufruf eingeben (z.B. in Zuweisungen). In diesem Fall wird eine Eingangsvariable oder Ausgangsvariable durch den Namen der Funktionsbaustein-Instanz, das Zeichen .  und den Namen der Eingangsvariable oder der Ausgangsvariable selbst definiert (z.B. Inst1.IN1). Die Werte aus den Zuweisungen werden beim nächsten Aufruf verarbeitet (sofern sie nicht anderweitig überschrieben werden).
    (info) Zuweisungen auf den Eingang EN sind nur beim formalen Aufruf des Bausteins erlaubt.

Erweiterung zur IEC-Norm

Als Erweiterung zur →IEC-Norm können:

  • Teil-Elemente von Ein- und Ausgangsvariablen verwendet werden. Solche Teil-Elemente sind z.B. der Zugriff auf ein ARRAY-Element oder ein Strukturelement; siehe nachfolgendes Beispiel für Inst4.
  • Zuweisungen vom Ausgang ENO getrennt vom Aufruf des Bausteins verwendet werden.

Im FAQ-Artikel "Wann soll ich einen formalen Aufruf verwenden? Wann einen nicht-formalen Aufruf?" finden Sie Informationen darüber, wann der formale Aufruf im Vergleich zum nicht-formalen Aufruf zu verwenden ist.

(info) Falls Sie den Body des Basis-Funktionsbausteins in einem abgeleiteten Funktionsbaustein aufrufen wollen, verwenden Sie SUPER();. Siehe unter "Deklaration eines Funktionsbausteins in ST" für ein Beispiel.

Beispiel
Inst1();
Inst2a[5]();           (* Aufruf einer Funktionsbaustein-Instanz, die mit Hilfe eines eindimensionalen ARRAYs deklariert ist *) 
Inst2b[1, 3] ();       (* Aufruf einer Funktionsbaustein-Instanz, die mit Hilfe eines zweidimensionalen ARRAYs deklariert ist *) 
Inst2c[2, 4, 1] ();    (* Aufruf einer Funktionsbaustein-Instanz, die mit Hilfe eines dreidimensionalen ARRAYs deklariert ist.  
                          Der Aufruf einer Funktionsbaustein-Instanz, die mit Hilfe eines vierdimensionalen ARRAYs deklariert ist, ist analog dazu. *) 
Inst3 (IN1 := 10, IN2 := 20, T1 := T#3ms, OUT => result);
 
(* Aufruf der Funktionsbaustein-Instanz 'Inst4' mit Zuweisungen auf 2 Array-Elemente und Zuweisung eines Strukturelements *)
(* Annahmen: Eingangsvariable 'arrVar' ist als Array-Variable mit Array-Unterbereich [1..2] deklariert. *) 
(*           Ausgangsvariable 'out' ist basierend auf einem strukturierten Datentyp mit Strukturelement 'Elem1' deklariert. *) 
Inst4(arrVar[1] := 16#01, arrVar[2] := 16#02, out.Elem1 => result1);  

Beispiele für unvollständige Parameterliste beim formalen Aufruf für eine Funktionsbaustein-Instanz und Zugriffe vom Aufruf getrennt:

SyntaxBedeutung
Inst1.IN1 := 10;Der Wert 10 wird dem Eingang IN1 der Funktionsbaustein-Instanz Inst1 zugewiesen.
Inst2a[5].IN1
:= 10;
Der Wert 10 wird dem Eingang IN1 der Funktionsbaustein-Instanz Inst2a zugewiesen, die mit Hilfe von ARRAY [1..5] OF deklariert ist.
Inst1(IN2 := 20);Die Funktionsbaustein-Instanz Inst1 wird aufgerufen. Dabei wird der Wert 20 dem Eingang IN2 zugewiesen, der Eingang IN1 behält den Wert 10.
result := Inst1.OUT;Wegen des gelesenen Ausgangs OUT von Inst1 wird der Wert 30 (unter der Annahme, dass Inst1 die Werte addiert) der lokalen Variable result zugewiesen.
Inst1(IN2 := fun2(EN := FALSE));Die Funktionsbaustein-Instanz Inst1 wird aufgerufen.
Da EN := FALSE, wird fun2 nicht aufgerufen und dem
Eingang IN2 nicht zugewiesen. Daher behält der Eingang IN2 den Wert 20 vom letzten Aufruf.
Detaillierte Informationen über das Verhalten von Aufrufen mit einer Zuweisung auf den Eingang EN finden Sie unter "Zuweisungen in ST".