Namespaces in ST: Deklaration

Syntax
NAMESPACE name
 
( * optional_begin *) USING Namespace_2;
USING Namespace_3; (* optional_end *)
 
(* anwenderdefinierte Deklaration von POE und/oder Datentypen *)
 
END_NAMESPACE

Bedeutung

Deklaration eines →Namespaces, wobei name ein →IEC-Bezeichner (siehe unten Beispiel 1) oder ein voll qualifizierter Name sein muss
Ein voll qualifizierter Name besteht aus einer Reihe von Namespace-Bezeichnern, die durch . voneinander getrennt sind. Damit können Sie Namespaces verschachteln, ohne die Schlüsselwörter NAMESPACE ... END_NAMESPACE für jeden Namespace wiederholen zu müssen (siehe unten Beispiel 3).

Ein Namespace kann die folgenden Sprachelemente enthalten:

Zusätzlich ist es möglich, Namespaces (und darin die obigen Sprachelemente) in der ST-Schnittstelle eines C-/C++-Bausteins zu deklarieren.

Einschränkungen

  • Andere Sprachelemente, die laut der →IEC-Norm in einem Namespace ebenfalls erlaubt sind, werden nicht unterstützt.

  • Zugriffsspezifikationen für Namespaces (z.B. INTERNAL) werden nicht unterstützt.

Falls Sie Sprachelemente in einem Namespace deklarieren, können Sie diese natürlich auch außerhalb dieses Namespaces verwenden.
images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Die USING-Namespace-Anweisung nach dem Namen des Namespaces ist optional und dient dazu, auf die Sprachelemente des angegebenen Namespaces zuzugreifen (siehe "Namespaces in ST: Verwendung" für Details für diese Anweisung).
Beachten Sie: Falls Sie einen Namespace im Global-Objekt angeben, hat dieser Namespace keine Auswirkung auf den Zugriff dieser globalen Variablen über die zugehörige →externe Variable. Der Zugriff erfolgt nämlich über den Namen der Variable selbst. Also ist kein voll qualifizierter Name bzw. zusätzliche USING-Namespace-Anweisung bei einer externen Variablen erforderlich, falls auf eine globale Variable in einem Global-Objekt mit einem Namespace zugegriffen wird.

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Ein Namespace kann auch beim Erstellen von bestimmten ST-Sprachelementen oder im Applikationsnavigator vorgegeben werden (siehe "Anwendung in ST erstellen" oder "Aktionen mit Ordner/Objekten in Zusammenhang mit Namespaces" für Details).

Beispiel 1: Deklaration eines Namespaces
NAMESPACE N1 (* Start der Deklaration des Namespaces 'N1' *)
 
FUNCTION F1
// ... Deklaration
END_FUNCTION
 
TYPE
T1: STRUCT
Elem1 : BOOL;
// ... und weitere Deklaration
END_STRUCT;
END_TYPE
 
FUNCTION_BLOCK FB1
// ... Deklaration
END_FUNCTION_BLOCK
 
END_NAMESPACE (* Ende der Deklaration des Namespaces 'N1' *)
Beispiel 2: Deklaration von verschachtelten Namespaces (mit wiederholten Schlüsselwörtern)
NAMESPACE Standard (* Start der Deklaration des Namespaces 'Standard' *)
 
NAMESPACE Timers (* Start der Deklaration des verschachtelten Namespaces 'Standard.Timers' *)
 
NAMESPACE HighResolution (* Start der Deklaration des verschachtelten Namespaces 'Standard.Timers.HighResolution' *)
 
FUNCTION TimeTick: DWORD (* 'TimeTick' ist im Namespace 'Standard.Timers.HighResolution' enthalten; vergleiche Beispiele 3 und 4. *)
// ... Deklaration
END_FUNCTION
 
END_NAMESPACE (* Ende der Deklaration des verschachtelten Namespaces 'Standard.Timers.HighResolution' *)
 
TYPE
LOCAL_TIME: STRUCT
Elem1 : BOOL;
// ... und weitere Deklaration
END_STRUCT;
END_TYPE
 
FUNCTION_BLOCK TON
VAR_INPUT
In : BOOL;
PT : TIME;
END_VAR
// ... and more declaration
END_FUNCTION_BLOCK
 
END_NAMESPACE (* Ende der Deklaration des verschachtelten Namespaces 'Standard.Timers' *)
 
NAMESPACE Counters (* Start der Deklaration des verschachtelten Namespaces 'Standard.Counters' *)
FUNCTION_BLOCK CUP
// ... Deklaration
END_FUNCTION_BLOCK
 
FUNCTION_BLOCK CDOWN
// ... Deklaration
END_FUNCTION_BLOCK
 
END_NAMESPACE (* Ende der Deklaration des verschachtelten Namespaces 'Standard.Counters' *)
 
END_NAMESPACE (* Ende der Deklaration des Namespaces 'Standard' *)
Beispiel 3: Deklaration eines verschachtelten Namespaces (mit einem voll qualifizierten Namen)
NAMESPACE Standard.Timers.HighResolution
 
FUNCTION TimeResolution: DWORD (* 'TimeResolution' ist im Namespace 'Standard.Timers.HighResolution' enthalten; vergleiche Beispiele 2 und 4. *)
// ... Deklaration
END_FUNCTION
 
END_NAMESPACE
Beispiel 4: Deklaration von verschachtelten Namespaces (Kombination aus Beispiel 2 und 3)
NAMESPACE Standard.Timers
 
NAMESPACE HighResolution
 
FUNCTION TimeLimit: DWORD (* 'TimeLimit' ist im Namespace 'Standard.Timers.HighResolution' enthalten; vergleiche Beispiele 2 und 3. *)
// ... Deklaration
END_FUNCTION
 
END_NAMESPACE
 
END_NAMESPACE