Namespaces in ST: Deklaration

Syntax
NAMESPACE name
  (* 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.

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