Dieses Kapitel enthält weitere Informationen über folgende Variablentypen:
VAR
Lokale Variablen
VAR_INPUT
Eingangsvariablen
VAR_OUTPUT
Ausgangsvariablen
VAR_IN_OUT
Eingangs- und Ausgangsvariablen
VAR_IN_OUT CONSTANT
Übertragungsvariable
VAR_GLOBAL
Globale Variablen
VAR_TEMP
Temporäre Variablen
VAR_STAT
Statische Variablen
VAR_EXTERNAL
Externe Variablen
VAR_INST
Instanzvariablen
VAR
Zwischen den Schlüsselwörtern VAR
und END_VAR
sind alle lokalen Variablen einer POU deklariert. Diese lokalen Variablen haben keine externe Verbindung; mit anderen Worten: ein schreibender Zugriff von außen ist nicht möglich.
Sie haben die Möglichkeit, ein Attribut zum Schlüsselwort VAR
hinzuzufügen.
Beispiel
VAR
iLoc1:INT; (* 1. Local Variable*)
END_VAR
VAR_INPUT
Zwischen den Schlüsselwörtern VAR_INPUT
und END_VAR
sind alle Variablen deklariert, die einer POU als Eingangsvariablen dienen. Das bedeutet, dass der Wert einer Variablen an einer Aufrufstelle zusammen mit einem Aufruf bereitgestellt werden kann.
Sie haben die Möglichkeit, ein Attribut hinzuzufügen.
Beispiel
VAR_INPUT
iIn1:INT (* 1. Inputvariable*)
END_VAR
VAR_OUTPUT
Zwischen den Schlüsselwörtern VAR_OUTPUT
und END_VAR
sind alle Variablen deklariert, die einer POU als Ausgangsvariablen dienen. Das bedeutet, dass diese Werte an die POU zurückgegeben werden, die den Aufruf macht.
Sie haben die Möglichkeit, ein Attribut zum Schlüsselwort VAR_OUTPUT
hinzuzufügen.
Beispiel
VAR_OUTPUT
iOut1:INT; (* 1. Outputvariable*)
END_VAR
Ausgangsvariablen in Funktionen und Methoden:
Gemäß der Norm IEC 61131-3 Ausgabe 2, können Funktionen (und Methoden) zusätzliche Ausgänge haben. Die Zuweisung erfolgt über den Aufruf einer Funktion, wie im nachstehenden Beispiel gezeigt.
Beispiel
fun(iIn1 := 1, iIn2 := 2, iOut1 => iLoc1, iOut2 => iLoc2);
VAR_IN_OUT
Zwischen den Schlüsselwörtern VAR_IN_OUT
und END_VAR
sind alle Variablen deklariert, die einer POU als Eingangs- und Ausgangsvariablen dienen.
IN_OUT
, wird der Wert der übertragenen Variablen geändert (Übertragung als Zeiger, Übergabe von Referenzen). Das bedeutet, dass der Eingangswert für diese Variablen nicht konstant sein kann. Aus diesem Grund können selbst die VAR_IN_OUT
-Variablen eines Funktionsbausteins nicht von außerhalb via <FBinstance>.<InOutVariable>
direkt gelesen oder geschrieben werden.
VAR_IN_OUT
-Typ zu. Wenn eine solche Zuweisung erkannt wird, wird sie als -Fehler in der Ansicht SoMMenu/index.htm angezeigt.
Beispiel
VAR_IN_OUT
iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR
VAR_IN_OUT CONSTANT
Eine VAR_IN_OUT CONSTANT
-Variable dient als konstanter Übergabe-nach-Referenz-Parameter. An diesen Parameter kann eine Variable oder Konstante (Literal) des Typs STRING oder WSTRING übergeben werden. Der Parameter ist schreibgeschützt. Die Übergabe von Eigenschaften ist nicht zulässig.
Syntax
VAR_IN_OUT CONSTANT
<variable name> : <data type>; // formal parameter
END_VAR
VAR_IN_OUT CONSTANT
-Variablen werden ohne Zuweisung eines Initialisierungswerts deklariert.
Verwendung
Beim Aufruf einer POU kann eine konstante Variable oder ein Literal vom Typ STRING oder WSTRING übergeben werden. Ein Schreibzugriff ist nicht zulässig.
Bei der Übergabe der Parameter einer STRING-Konstante ist die Länge der Zeichenfolge nicht begrenzt. Die Zeichenfolgenlänge ist nicht von der Zeichenfolgenlänge der VAR_IN_OUT CONSTANT
-Variablen abhängig.
Die Variable wird von EcoStruxure Machine Expert ab V2.0 unterstützt.
Beispiel: Weitergabe der Parameter von STRING-Konstanten und STRING-Variablen
FUNCTION funManipulate : BOOL
VAR_IN_OUT
sReadWrite : STRING(16); (* Can be read or written here in POU *)
dwVarReadWrite : DWORD; (* Can be read or written here in POU *)
END_VAR
VAR_IN_OUT CONSTANT
c_sReadOnly : STRING(16); (* Constant string variable can only be read here in POU *)
END_VAR
sReadWrite := 'String_from_POU';
dwVarReadWrite := STRING_TO_DWORD(c_sReadOnly);
PROGRAM PRG_A
VAR
sVarFits : STRING(16);
sValFits : STRING(16) :='1234567890123456';
dwVar: DWORD;
END_VAR
// The following line of code causes the compiler error C0417:
// C0417: VAR_IN_OUT parameter 'sReadWrite' needs a variable with write access as input.
funManipulate(sReadWrite:='1234567890123456', c_sReadOnly:='1234567890123456', dwVarReadWrite := dwVar);
// Correct code
funManipulate(sReadWrite := sValFits, c_sReadOnly := '23', dwVarReadWrite := dwVar);
funManipulate(sReadWrite := sVarFits, c_sReadOnly := sValFits, dwVarReadWrite :=dwVar);
In diesem Codebeispiel werden über verschiedene VAR_IN_OUT
-Variablen Zeichenfolgen an die funManipulate-Funktion übergeben:
Bei der Übergabe eines Zeichenfolgen-Literals an eine VAR_IN_OUT
-Variable wird ein Compiler-Fehler ausgegeben.
Bei der Übergabe einer Konstantenvariablen an eine VAR_IN_OUT CONSTANT
-Variable wird der richtige Code generiert. Dies gilt selbst für die Übergaben von Zeichenfolgenvariablen.
VAR_GLOBAL
Sie können normale, konstante, externe oder remanente Variablen deklarieren, die im gesamten Projekt als globale Variablen bekannt sind. Zum Deklarieren globaler Variablen verwenden Sie die globale Variablenliste (GVL). Sie können eine GVL hinzufügen, indem Sie den Befehl
ausführen, der sich standardmäßig im Menü befindet.
Deklarieren Sie die Variablen lokal zwischen den Schlüsselwörtern VAR_GLOBAL
und END_VAR
.
Sie haben die Möglichkeit, ein Attribut zum Schlüsselwort VAR_GLOBAL
hinzuzufügen.
Eine Variable wird durch einen vorausgehenden Punkt als globale Variable erkannt, zum Beispiel .iGlobVar1
.
Für detaillierte Informationen zur mehrfachen Verwendung von Variablennamen, dem globalen Umfangsoperator dot (.)
und Bereichsnamen siehe das Kapitel Globaler Umfangsoperator.
Globale Variablen können nur in Listen mit globalen Variablen (GVLs) deklariert werden. Diese Listen dienen zur Verwaltung globaler Variablen in einem Projekt. Sie können eine GVL hinzufügen, indem Sie den Befehl
ausführen, der sich standardmäßig im Menü befindet.VAR_TEMP
Diese Funktion ist eine Erweiterung der Norm IEC 61131-3.
Temporäre Variablen werden bei jedem Aufruf der POU neu initialisiert. VAR_TEMP
-Deklarationen sind nur innerhalb von Programmen und Funktionsbausteinen möglich. Der Zugriff auf diese Variablen ist also im Hauptteil des Programm-POUs oder Funktionsbausteins möglich.
Deklarieren Sie die Variablen lokal zwischen den Schlüsselwörtern VAR_TEMP
und END_VAR
.
VAR_TEMP
anstelle von VAR
verwenden, um den für eine POU erforderlichen Speicherplatz zu verringern (z. B. in einem Funktionsbaustein, wenn die Variable nur temporär verwendet wird).
VAR_STAT
Diese Funktion ist eine Erweiterung der Norm IEC 61131-3.
Statische Variablen können in Funktionsbausteinen, Methoden und Funktionen verwendet werden. Deklarieren Sie diese lokal zwischen den Schlüsselwörtern VAR_STAT
und END_VAR
. Die Initialisierung dieser Variablen erfolgt beim ersten Aufruf der entsprechenden POU.
Wie globale Variablen behalten auch statische Variablen ihren Wert, nachdem die POU, in der sie deklariert wurden, verlassen wurde. Statische Variablen werden von allen POUs verwendet, in denen sie deklariert sind (z. B. mehrere Funktionsbausteininstanzen, Funktionen oder Methoden teilen dieselben statischen Variablen). Sie können beispielsweise in einer Funktion als Zähler für die Anzahl der Funktionsaufrufe verwendet werden.
Sie haben die Möglichkeit, ein Attribut zum Schlüsselwort VAR_STAT
hinzuzufügen.
VAR_EXTERNAL
Es handelt sich hierbei um globale Variablen, die in den POU importiert wurden.
Deklarieren Sie diese lokal zwischen den Schlüsselwörtern VAR_EXTERNAL
und END_VAR
und in der globalen Variablenliste (GVL). Die Deklaration und die globale Deklaration müssen identisch sein. Wenn die globale Variable nicht existiert, erscheint eine Meldung.
Beispiel
FUNCTION_BLOCK FB_DoSomething
VAR_EXTERNAL
iVarExt1:INT; (* 1st external variable *)
END_VAR
VAR_INST
Wenn Sie eine Variable einer Methode durch die Verwendung des Attributs VAR_INST
als eine Instanzvariable deklarieren, dann wird diese Variable nicht auf dem Methodenstack gespeichert, sondern auf dem Stack der Funktionsbausteininstanz. Sie verhält sich deswegen wie andere Variablen der Funktionsbausteininstanz und wird nicht reinitialisiert, wenn die Methode aufgerufen wird.
VAR_INST
-Variablen sind nur in Methoden erlaubt. Sie können auf diese Variablen nur innerhalb der Methode zugreifen. Attribute wie CONST
, RETAIN
sind in der Deklaration nicht erlaubt. Die Werte der Variablen können nicht im Deklarationsteil der Methode überwacht werden.
Beispiel
METHOD meth_last : INT
VAR_INPUT
iVar : INT;
END_VAR
VAR_INST
iLast : INT := 0;
END_VAR
meth_last := iLast;
iLast := iVar;