Wie wird das Schlüsselwort "RETAIN" für Funktionsbaustein-Instanzen berücksichtigt?

Die →Variablen von →Funktionsbaustein-Instanz werden bzgl. RETAIN und NON_RETAIN so wie jener Abschnitt VAR behandelt, in dem die Funktionsbaustein-Instanz deklariert ist. Das bedeutet:

  • Falls das Schlüsselwort RETAIN im Abschnitt VAR definiert ist, werden die Variablen der Funktionsbaustein-Instanz so behandelt, als wären sie mit RETAIN deklariert.
  • Falls das Schlüsselwort NON_RETAIN im Abschnitt VAR definiert ist, werden die Variablen der Funktionsbaustein-Instanz so behandelt, als wären sie mit NON_RETAIN deklariert.

Ausgenommen davon sind die folgenden Fälle:

  • Eine oder mehrere Variablen wurden ausdrücklich als NON_RETAIN oder RETAIN in der Deklaration des zugehörigen Funktionsbausteins deklariert.
  • Sind in der Deklaration des zugehörigen Funktionsbausteins erneut Funktionsbaustein-Instanzen deklariert, gilt für deren Variablen nicht die Deklaration von RETAIN oder NON_RETAIN des Abschnitts VAR der ersten Funktionsbaustein-Instanz (sondern jene im zugehörigen Funktionsbaustein).

Hier ein Beispiel zu den oben genannten Regeln:

Basierender ST-Code für die folgende Tabelle
PROGRAM Test
  VAR RETAIN
    myFB1 : FB1;
    var1  : INT; 
  END_VAR
END_PROGRAM
 
FUNCTION_BLOCK FB1
  VAR 
    var2  : INT; 
    myFB2 : FB2;
    myFB3 : FB3;
  END_VAR
  VAR NON_RETAIN
    var3    : INT; 
    myFB3_2 : FB3;
  END_VAR
  VAR RETAIN
    var7    : INT; 
    myFB3_3 : FB3;
  END_VAR
END_FUNCTION_BLOCK
 
FUNCTION_BLOCK FB2
  VAR 
    var4  : INT; 
  END_VAR
  VAR NON_RETAIN
    var5  : INT;
    myFB3 : FB3; 
  END_VAR
END_FUNCTION_BLOCK
 
FUNCTION_BLOCK FB3
  VAR 
    var6  : INT; 
  END_VAR
END_FUNCTION_BLOCK


Die Variable...wird als ... behandelt.Grund
Test.var1RETAINSchlüsselwort RETAIN in Zeile 2
Test.myFB1.var2 RETAINSchlüsselwort RETAIN in Zeile 2 (da kein Schlüsselwort in Zeile 9)
Test.myFB1.var3 NON_RETAINSchlüsselwort NON_RETAIN in Zeile 14
Test.myFB1.var7 RETAINSchlüsselwort RETAIN in Zeile 18
Test.myFB1.myFB2.var4NON_RETAIN

keine Schlüsselwörter in Zeilen 9 und 25
(Das Schlüsselwort RETAIN in Zeile 2 wird für diese Variable nicht angewendet, da FB2 in FB1 deklariert ist.)

Test.myFB1.myFB2.var5NON_RETAINSchlüsselwort NON_RETAIN in Zeile 28
Test.myFB1.myFB3.var6NON_RETAINkeine Schlüsselwörter in Zeilen 9 und 35
(Das Schlüsselwort RETAIN in Zeile 2 wird für diese Variable nicht angewendet, da FB3 in FB1 deklariert ist.)
Test.myFB1.myFB3_2.var6NON_RETAINSchlüsselwort NON_RETAIN in Zeile 14 (da kein Schlüsselwort in Zeile 35)
Test.myFB1.myFB3_3.var6RETAINSchlüsselwort RETAIN in Zeile 18 (da kein Schlüsselwort in Zeile 35)
Test.myFB1.myFB2.myFB3.var6NON_RETAINSchlüsselwort NON_RETAIN in Zeile 28 (da kein Schlüsselwort in Zeile 35)

Hat Ihnen dieser Artikel weitergeholfen? Fanden Sie die benötigte Information in der Benutzerdokumentation?
Falls nicht, kontaktieren Sie das Support-Team von logi.cals. Geben Sie Ihre Fragen oder Ihre Vorschläge zur Verbesserung/Erweiterung der Benutzerdokumentation so detailliert wie möglich an.