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:

ElementFügen Sie die USING-Anweisung an dieser Position ein:
im ST-Objektam Anfang des ST-Objekts (als erste Zeile im ST-Editor)
im Global-Objektvor 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 v
on Ressource- oder Konfigurations-globalen Variablen)

(warning) 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 Namespacehinter 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:

ElementFügen Sie die USING-Anweisung an dieser Position ein:
in der ST-Schnittstelle eines C-/C++-Bausteinsnach {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).

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.


(info) 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