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.
logi.CAD 3 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
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.
( * 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;
...
(* Zusätzliche Daten, wie partielle Adressen, sind ebenfalls für die Variablen möglich. *)
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. 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:
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, noch nicht festgelegte Speicherorte bei der Deklaration anzugeben. Siehe "Deklaration eines Sprachelements mit partieller Adresse in ST" für Details.
logi.CAD 3 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.
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.
{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.
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:
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);
...
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 ...
...