Namespaces in ST: Verwendung
Auf Sprachelemente eines Namespace können Sie so außerhalb dieses Namespaces zugreifen:
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) |
vor einem Abschnitt VAR_GLOBAL ... END_VAR des Global-Objekts |
|
im SPS-Objekt |
vor einem Abschnitt VAR_GLOBAL ... END_VAR des SPS-Objekts 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: |
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).
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.
Die folgenden Beispiele basieren auf dem ST-Code des Beispiels 2 unter "Namespaces in ST: Deklaration".
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
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