Namespaces in ST: Verwendung

Auf Sprachelemente eines Namespace können Sie so außerhalb dieses Namespaces zugreifen:

Angabe des voll qualifizierten Namens

Definieren Sie das Sprachelement mit seinem voll qualifizierten Name. Der voll qualifizierte Name des Sprachelements besteht aus dem Namespace-Bezeichner und dem Bezeichner des Sprachelements, die durch . voneinander getrennt sind.

Beispiel
FUNCTION_BLOCK Uses_Timer1
VAR
Ton1: Standard.Timers.TON; (* verwendet den 'TON'-Baustein, der im verschachtelten Namespace 'Standard.Timers' deklariert ist *)
Ton2: TON; (* verwendet den Standard-'TON'-Baustein aus dem globalen Namespace *)
bTest: BOOL;
END_VAR
Ton1(In:= bTest, PT:= t#5s);
END_FUNCTION_BLOCK

Einschränkung

→Aufrufe von Funktionen können nicht mit dem voll qualifizierten Namen definiert werden. Für solche Fälle definieren Sie die USING-Namespace-Anweisung aus dem folgenden Abschnitt.

Verwendung der USING-Namespace-Anweisung

Definieren Sie eine USING-Namespace-Anweisung. Die USING-Anweisung erlaubt den Zugriff auf jene Sprachelemente, die im angegebenen Namespace enthalten sind, in den folgenden Elementen:

Element

Fügen Sie die USING-Anweisung an dieser Position ein:

im ST-Objekt

am Anfang des ST-Objekts (als erste Zeile im ST-Editor)

im Global-Objekt

vor einem Abschnitt VAR_GLOBAL ... END_VAR des Global-Objekts

im SPS-Objekt

vor einem Abschnitt VAR_GLOBAL ... END_VAR des SPS-Objekts
(= vor der Deklaration von Ressource- oder Konfigurations-globalen Variablen)

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg Definieren Sie am besten nur eine USING-Anweisung pro Konfiguration im SPS-Objekt – entweder vor der Deklaration von Konfigurations-globalen Variablen oder vor der Deklaration von Ressource-globalen Variablen.

in einem Namespace

hinter dem Namen des Namespaces

in einem →Funktionsbaustein

hinter dem Namen des Funktionsbausteine

in einer →Funktion

hinter dem Namen der Funktion bzw. Datentyp des Ergebniswerts für die Funktion

Ein weiteres Element, in dem die USING-Anweisung eingefügt werden kann:

Element

Fügen Sie die USING-Anweisung an dieser Position ein:

in der ST-Schnittstelle eines C-/C++-Bausteins

nach {extern_c} oder {extern_cxx}

Eine USING-Anweisung beginnt mit dem Schlüsselwort USING, danach folgt der voll qualifizierte Name des Namespaces und ; (siehe unten Beispiel 1). Die USING-Anweisung ermöglicht nur den Zugriff auf den angegebenen Namespace, nicht auf andere verschachtelte Namespaces (siehe unten Beispiel 2).
images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Eine USING-Anweisung kann auch im Applikationsnavigator vorgegeben werden (siehe unter "Aktionen mit Ordner/Objekten in Zusammenhang mit Namespaces" für Details). In diesem Fall wird k eine USING -Namespace-Anweisung für diesen Namespace im ST-Editor benötigt.

Einschränkungen

  • Angaben in der Form USING Namespace1, Namespace 2; werden nicht unterstützt. Falls Sie auf Sprachelemente aus verschiedenen Namespaces zugreifen wollen, müssen Sie mehrere USING-Anweisungen definieren.

  • Derzeit ist die Verwendung von Sprachelementen mit einem gleichen Namen aus dem globalen Namespace nicht möglich. Diese Einschränkung gilt für alle Sprachelemente, die im globalen Namespace deklariert sind, aber besonders für die Systembausteine. logi.CAD 3 ändert den Aufruf des Sprachelements aus dem globalen Namespace automatisch auf den Aufruf des Sprachelements aus dem gleichen Namespace. Siehe Beispiel 1.


images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Die folgenden Beispiele basieren auf dem ST-Code des Beispiels 2 unter "Namespaces in ST: Deklaration".

Beispiel 1: Korrekter Zugriff
FUNCTION_BLOCK Uses_Timer2
USING Standard.Timers;
VAR
Ton1 : TON; (* verwendet den 'TON'-Baustein, der im verschachtelten Namespace 'Standard.Timers' deklariert ist *)
(* Hinweis: Der Standard-'TON'-Baustein aus dem globalen Namespace kann in diesem Beispiel nicht verwendet werden. *)
(* Falls dies erforderlich ist, definieren Sie alle Sprachelemente mit den voll qualifizierten Namen; siehe oben. *)
bTest : BOOL;
END_VAR
Ton1(In:= bTest, PT:= t#5s);
END_FUNCTION_BLOCK

Beispiel 2: Fehlerhafter Zugriff
NAMESPACE Infeed
USING Standard;
USING Standard.Counters;
 
FUNCTION_BLOCK Uses_Timer3
VAR
Ton1 : Timers.TON;
(* Fehler, da kein Zugriff auf den verschachtelten Namespace 'Standard.Timer' möglich *)
(* Lösungen: *)
(* entweder Anweisung 'USING Standard.Timers' oberhalb einfügen und Zeile auf 'Ton1 : TON;' korrigieren *)
(* oder den voll qualifizierte Namen verwenden, also: Zeile auf 'Ton1 : Standard.Timer.TON;' korrigieren *)
bTest : BOOL;
END_VAR
Ton1(In:= bTest, PT:= t#5s);
END_FUNCTION_BLOCK
END_NAMESPACE