Deklaration von globalen Variablen in Global-Objekt und deren Verwendung in ST

Die Deklaration von →globalen Variablen in einem Global-Objekt ermöglicht es Ihnen, die Deklaration von globalen Variablen in einem oder mehreren zentralen Objekten für das Projekt zu sammeln. Im →Programm, in der →Ressource oder →Konfiguration – also dort, wo Sie die Deklaration benötigen – fügen Sie anschließend nur mehr einen Verweis ein.

Erweiterung zur IEC-Norm

Diese Möglichkeit ist eine Erweiterung zur →IEC-Norm.

(Info) Neuron Power Engineer bietet als Alternative den Globalen-Variablen-Editor, um globale Variablen im Global-Objekt anzuzeigen und zu bearbeiten. Zusätzlich haben Sie im Applikationsnavigator eine Möglichkeit, den Verweis automatisch zu erstellen (Details: siehe "Global-Objekt erstellen und verwenden"). In beiden Fällen müssen Sie die folgende Syntax nicht kennen.

Global-Objekt erstellen

Siehe "Global-Objekt erstellen und verwenden".

GLOBALS-Abschnitt in Global-Objekt zur zentralen Deklaration von globalen Variablen

Deklarieren Sie die globalen Variablen innerhalb des GLOBALS-Abschnitts in einem Global-Objekt, und zwar analog zur Deklaration von globalen Variablen in ST. Pro Global-Objekt ist ein GLOBALS-Abschnitt möglich.

Syntax
( * optional_begin *) { Readonly ('your comment')} (* optional_end *)
GLOBALS name
 
( * optional_begin *) USING  Namespace_1;
USING  Namespace_2; (* optional_end *)
 
  VAR_GLOBAL (* optional_begin *) {SECTION_NAME:= 'string'; DMA := 'string'} CONSTANT RETAIN (* optional_end *)
    name_1, name_2, ..., name_n (* optional_begin *) {'key'} AT %address (* optional_end *) : data-type|FB-type := initial-value;
    ...
  (* Additional pieces of data, such as partial addresses, are also possible for the variables. *)
  END_VAR
 
  VAR_GLOBAL (* optional_begin *) {SECTION_NAME:= 'string'; DMA := 'string'} CONSTANT RETAIN (* optional_end *)
    name_1, name_2, ..., name_n (* optional_begin *) {'key'} AT %address (* optional_end *) : data-type|FB-type := initial-value;
    ...
  END_VAR
 
  ...
END_GLOBALS

Bedeutung

Deklaration des GLOBALS-Abschnitts, wobei name ein →IEC-Bezeichner sein muss. Die Deklaration erfolgt entweder im globalen →Namespace oder in einem deklarierten Namespace.
Im VAR_GLOBAL-Abschnitt können mehrere GLOBALS-Abschnitte erstellt werden. In jedem VAR_GLOBAL-Abschnitt können wiederum mehrere globale Variablen deklariert werden.

Wie bereits erwähnt, ist die Syntax für VAR_GLOBAL ... END_VAR und deren Möglichkeiten analog zur Deklaration von globalen Variablen in ST oder Deklaration von Funktionsbaustein-Instanzen in ST (informieren Sie sich dort über die Möglichkeiten für die Deklaration von globalen Variablen/Funktionsbaustein-Instanzen). Unterschiede:

  • Die Anweisung für den Schreibschutz { Readonly ('your comment') wird vor dem GLOBALS-Abschnitt unterstützt.

  • Die USING-Namespace-Anweisung wird im GLOBALS-Abschnitt unterstützt.

  • Das optionale Attribut SECTION_NAME wird nur in einem Abschnitt VAR_GLOBAL ... END_VAR eines Global-Objekts unterstützt.
    Dieser Name des Abschnitt ist eine zusätzliche Information im →textuellen Editor. Er wird im →grafischen Editor verwendet/ausgewertet. Der Name des Abschnitts kann auch ohne dem Attribut DMA angegeben werden, dann in der Form: {SECTION_NAME:= 'string} 

  • Das Schlüsselwort NON_RETAIN wird im Global-Objekt nicht unterstützt.

Beachten Sie zusätzlich: 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.

Gut zu wissen

(Graue Glühbirne) Neuron Power Engineer bietet außerdem die Möglichkeit, noch nicht festgelegte Speicherorte bei der Deklaration anzugeben. Siehe "Deklaration eines Sprachelements mit partieller Adresse in ST" für Details.

(Graue Glühbirne) Neuron Power Engineer bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar, JSON-String oder Typ für Variablen oder Datentypen angeben" für Details.

Beispiel
GLOBALS MyGVs
  VAR_GLOBAL
    Setting_1 : INT;
    Setting_2 : BOOL;
  END_VAR
 
  VAR_GLOBAL CONSTANT
    Constant_1 : INT;
    Constant_2 : BOOL;
  END_VAR
END_GLOBALS

Verweis auf den GLOBALS-Abschnitt in einem Programm, einer Ressource und/oder Konfiguration

Im Programm, in der Ressource oder in der Konfiguration fügen Sie INCLUDE_GLOBALS-Anweisungen ein, damit die globalen Variablen aus dem entsprechenden GLOBALS-Abschnitt als Programm-globale, Ressource-globale oder Konfigurations-globale Variablen deklariert werden.

Falls der GLOBALS-Abschnitt in einem Namespace deklariert ist, geben Sie den voll qualifizierten Name ein. Ein voll qualifizierter Name besteht aus einer Reihe von Namespace-Bezeichnern, die durch . voneinander getrennt sind.

Syntax
{INCLUDE_GLOBALS name_1}
{INCLUDE_GLOBALS name_2}
... 

Fügen Sie die INCLUDE_GLOBALS-Anweisungen immer vor den evtl. vorhandenen Abschnitten VAR_GLOBAL ... END_VAR ein.

Beispiel für einen Verweis in einem Programm
PROGRAM Motor
  {INCLUDE_GLOBALS MyGVs}   (* These program-global variables are declared: 'Setting_1', 'Setting_2', 'Constant_1', 'Constant_2' *)
  VAR_GLOBAL
    portSetting : INT;
    Setting_1 : INT;        (* error because the program-global variable 'Setting_1' has been declared repeatedly *)
  END_VAR
  ...
END_PROGRAM

Für den Verweis in einer Ressource ist es erforderlich, dass Sie die INCLUDE_GLOBALS-Anweisungen vor der Deklaration der Tasks einfügen:

Beispiel für einen Verweis in einer Ressource
RESOURCE local ON BuiltInPlc { ON_CHANNEL := LocalChannel }
  {INCLUDE_GLOBALS MyGVs}   (* These resource-global variables are declared: 'Setting_1', 'Setting_2', 'Constant_1', 'Constant_2' *)
  VAR_GLOBAL
    VALVE_POS AT %QW28 : INT;
    Constant_1 : INT;        (* error because the resource-global variable 'Constant_1' has been declared repeatedly *)
  END_VAR
  TASK DefaultTask(INTERVAL := TIME#500ms, PRIORITY := 38229);
...

Beispiel für einen Verweis in einer Konfiguration

CONFIGURATION LocalConfiguration
  {INCLUDE_GLOBALS MyGVs}    (* These configuration-global variables are declared: 'Setting_1', 'Setting_2', 'Constant_1', 'Constant_2' *)
  VAR_GLOBAL
    VALVE_POS AT %QW28 : INT;
    Constant_2 : INT;        (* error because the configuration-global variable 'Constant_2' has been declared repeatedly *)
  END_VAR
RESOURCE ...
...