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