Variablentypen

Überblick

Dieses Kapitel enthält weitere Informationen über folgende Variablentypen:

Lokale Variablen - 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

Eingangsvariablen - 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

Ausgangsvariablen - 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);

Eingangs- und Ausgangsvariablen - 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.

HINWEIS: Mit Variablen des Typs 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.
HINWEIS: Weisen Sie keine Symbole des Typs Bit (wie %MXaa.b- oder BOOL-Variablen, die sich an einer Adresse eines Typs Bit befinden) zu BOOL-Parametern eines Funktionsbausteins mit dem VAR_IN_OUT-Typ zu. Wenn eine solche Zuweisung erkannt wird, wird sie als Generieren-Fehler in der Ansicht MeldungenSoMMenu/index.htm angezeigt.

Beispiel

VAR_IN_OUT
 iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR

Übertragungsvariable - 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.

HINWEIS: Wenn die Option Konstanten ersetzen im Dialogfeld Projekteinstellungen > Compile-OptionenSoMMenu/index.htm aktiviert ist, gibt der Compiler eine Fehlermeldung aus, sobald die Parameter einer Konstanten mit Basis-Datentyp oder einer Konstantenvariablen mit Basis-Datentyp weitergegeben werden.

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.

Globale Variablen - 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 Objekt hinzufügen ausführen, der sich standardmäßig im Menü Projekt 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 Objekt hinzufügen ausführen, der sich standardmäßig im Menü Projekt befindet.

HINWEIS: Eine Variable, die in einem POU lokal mit demselben Namen wie eine globale Variable definiert ist, hat im POU Vorrang.
HINWEIS: Globale Variablen werden vor den lokalen Variablen von POUs initialisiert.

Temporäre Variablen - 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.

HINWEIS: Sie können 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).

Statische Variablen - 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.

Externe Variablen - 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.

HINWEIS: Eine Definition als externe Variable ist nicht erforderlich. Diese Schlüsselwörter werden bereitgestellt, um die Einhaltung der Norm IEC 61131-3 zu gewährleisten.

Beispiel

FUNCTION_BLOCK FB_DoSomething 
VAR_EXTERNAL
 iVarExt1:INT; (* 1st external variable *)
END_VAR

Instanzvariablen - 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;