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.

Global-Objekt erstellen

Erstellen Sie ein Global-Objekt, indem Sie den Befehl Global-Objekt verwenden (z.B. im Kontextmenü für ein Projekt, unter Neu).

Siehe "Neue Objekte oder Ordner erstellen" für allgemeine Informationen über das Erstellen von Objekten.

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
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 := initial-value;
...
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 := 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 GLOBALS-Abschnitt können mehrere VAR_GLOBAL-Abschnitte erstellt werden, in denen wiederum mehrere globale Variablen deklariert werden können.

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. Unterschiede:

  • 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 und zur zukünftigen Weiterverarbeitung in der grafischen Schnittstelle von logi.CAD 3 vorgesehen. 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 GLOBALS-Abschnitt 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.

logi.CAD 3 bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar oder JSON-String für Variablen und 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} (* Diese Programm-globalen Variablen sind deklariert: 'Setting_1', 'Setting_2', 'Constant_1', 'Constant_2' *)
VAR_GLOBAL
portSetting : INT;
Setting_1 : INT; (* Fehler, da die Programm-globale Variable 'Setting_1' mehrmals deklariert ist *)
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} (* Diese Ressource-globalen Variablen sind deklariert: 'Setting_1', 'Setting_2', 'Constant_1', 'Constant_2' *)
VAR_GLOBAL
VALVE_POS AT %QW28 : INT;
Constant_1 : INT; (* Fehler, da die Ressource-globale Variable 'Constant_1' mehrmals deklariert ist *)
END_VAR
TASK DefaultTask(INTERVAL := TIME#500ms, PRIORITY := 38229);
... 
Beispiel für einen Verweis in einer Konfiguration
CONFIGURATION LocalConfiguration
{INCLUDE_GLOBALS MyGVs} (* Diese Konfigurations-globalen Variablen sind deklariert: 'Setting_1', 'Setting_2', 'Constant_1', 'Constant_2' *)
VAR_GLOBAL
VALVE_POS AT %QW28 : INT;
Constant_2 : INT; (* Fehler, da die Konfigurations-globale Variable 'Constant_2' mehrmals deklariert ist *)
END_VAR
RESOURCE ...
...