In Erweiterung der IEC-Operatoren gibt es mehrere Möglichkeiten, den Zugriff auf Variablen oder Module eindeutig zu gestalten, wenn die Variablen oder der Modulname im Rahmen eines Projekts mehrmals verwendet werden.
Folgende Bereichsoperatoren können verwendet werden:
Globaler Bereichsoperator
Name der globalen Variablenliste
Enumerationsname
Namensraum der Bibliothek
Globaler Knotenoperator
Ein Instanzpfad, der mit einem Punkt (.) beginnt, öffnet einen globalen Gültigkeitsbereich (Namensraum). Wenn es also eine lokale Variable mit demselben Namen <varname> wie die globale Variable gibt, dann bezieht sich .<varname> auf die globale Variable.
Der Name einer globalen Variablenliste (GVL) kann als Namensraum-Bezeichner für die in der Liste definierten Variablen verwendet werden. Dadurch ist es möglich, Variablen mit identischen Namen in verschiedenen globalen Variablenlisten zu deklarieren und auf die jeweils gewünschte Variable zuzugreifen, indem dem Variablennamen <global variable list name>. vorangestellt wird.
Syntax
<Name der globalen Variablenliste>.<Variable>
Beispiel
Die globalen Variablenlisten globlist1 und globlist2 enthalten jeweils eine Variable mit dem Namen varx. In der folgenden Zeile wird varx von globlist2 in varx in globlist1 kopiert:
globlist1.varx := globlist2.varx;
Wenn eine Variable, die in mehreren globalen Variablenlisten deklariert ist, ohne den Namen der globalen Variablenliste als vorangestellten Operator referenziert wird, wird eine Fehlermeldung ausgegeben.
Sie können den Namensraum der Bibliothek als punktgetrenntes Präfix zu einer POU hinzufügen, um einen eindeutigen Zugriff auf die POU zu definieren. Standardmäßig ist der Namensraum (namespace) einer Bibliothek identisch mit dem Bibliotheksnamen.
Beispiel: LIB_A.FB_A
Syntax
<Namensraum der Bibliothek>.<Bibliotheks-POU>
Beispiel
Wenn eine in einem Projekt enthaltene Bibliothek die POU FB_A enthält und es auch eine lokal im Projekt definierte POU FB_A gibt, dann können Sie dem Funktionsbaustein der Bibliothek den Namen LIB_A.FB_A zuweisen, um eine Unterscheidung von der POU zu erzielen.
var1 := FB_A(in := 12); // Call of the project function block FB_A
var2 := LIB_A.FB_A(in := 22); // Call of the library function block FB_A
Sie können einen anderen Namen für den Namensraum in den
festlegen, wenn Sie ein Bibliotheksprojekt in den erstellen (standardmäßig im Menü ) oder später im Dialogfeld einer enthaltenen Bibliothek im .#
) für Direktzugriff
Lokale Komponenten eines Funktionsbausteins können Bibliotheks-POUs mit demselben Namen überschreiben, was zu einer Mehrdeutigkeit führt und den Zugriff mit der üblichen Namensraum-Konvention verhindert. In diesem Fall können Sie den #
-Operator verwenden, um den direkten Zugriff zu erzwingen.
Syntax
<namespace> # <library POU path>
Beispiel
TYPE Struct1 :
STRUCT
Standard : Struct2;
END_STRUCT
END_TYPE
TYPE Struct2 :
STRUCT
Concat : DINT;
END_STRUCT
END_TYPE
VAR_GLOBAL
Standard : Struct2;
END_VAR
PROGRAM PLC_PRG
str := Standard.CONCAT('test1', '3444'); // using the "." will generate an error, as there's a conflict btw. "Standard" variable an library namespace.
str := Standard#CONCAT('test1', '3444'); // using '#" will solve the ambiguity by referencing "CONCAT" function of "Standard" library
Eine Enumeration kann für einen eindeutigen Zugriff auf eine Enumerationskonstante verwendet werden. Somit ist es möglich, die gleiche Konstante in verschiedenen Enumerationen zu verwenden.
Der Enumerationsname wird dem Konstantennamen, getrennt durch einen Punkt (.), vorangestellt.
Syntax
<Enumerationsname>.<Konstantenname>
Beispiel
Die Konstante Blue ist eine Komponente der Enumeration Colors sowie der Enumeration Feelings.
color := Colors.Blue; // Access to enum value Blue in type Colors
feeling := Feelings.Blue; // Access to enum value Blue in type Feelings