VAR_CONFIG-Abschnitte im SPS-Objekt deklarieren
Für instanzspezifische Zuweisungen des Speicherorts bei symbolisch dargestellten Variablen benötigen Sie einen VAR_CONFIG-Abschnitt. Dieser Abschnitt ist sowohl in einer →Konfiguration als auch in einer →Ressource möglich.
Dieser Artikel beschreibt die Syntax des VAR_CONFIG-Abschnitts und dessen Einträge im SPS-Objekt.
VAR_CONFIG
name_1 AT %address (* optional_begin *) {SIZE := value} (* optional_end *);
name_2 AT %address (* optional_begin *) {SIZE := value} (* optional_end *);
name_3 AT %address (* optional_begin *) {SIZE := value} (* optional_end *);
...
END_VAR
Bedeutung |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
eine bzw. mehrere instanzspezifische Zuweisungen des Speicherorts bei symbolisch dargestellten Variablen Die folgenden Elemente sind in der entsprechenden Hierarchie für name_1, name_2 usw. möglich (= Symbol
) bzw. nicht möglich (= Symbol
):
Die Elemente müssen voneinander durch . voneinander getrennt werden.
Mit dem optionalen Schlüsselwort AT können Sie der symbolischen Variable eine physikalische Adresse in der →SPS zuweisen. Beispiele für physikalischen Adressen:
Geben Sie eine physikalische Adresse laut diesem Aufbau ein:
Das Attribut SIZE wird als Angabe der Bitgröße nur bei nicht-elementaren Datentypen benötigt, um diese verarbeiten zu können. Das Attribut kann aber auch bei elementaren Datentypen angegeben werden, um z.B. nur ein Byte aus dem IO-Segment in eine WORD-Variable zu kopieren. Ohne SIZE gilt die Bitgröße des zugehörigen Datentyps (sofern ein elementarer Datentyp zugrunde liegt). Erweiterungen zur IEC-Norm Der VAR_CONFIG-Abschnitt in einer Ressource und das Attribut SIZE sind Erweiterungen zur →IEC-Norm. Zusätzlich ist es möglich, einen VAR_CONFIG-Abschnitt in einem VarCfg-Objekt zu deklarieren und hier nur einen Verweis einzufügen. Einschränkungen
|
Die Deklarationen der entsprechenden Variablen bzw. Datentypen werden vorausgesetzt, damit die folgenden Beispiele soweit wie möglich fehlerfrei sind (siehe "Addendum für Beispiele 1 bis 3" für einen möglichen ST-Code).
CONFIGURATION LocalConfiguration
RESOURCE local ON BuiltInPlc { ON_CHANNEL := LocalChannel }
VAR_GLOBAL
valvePos : INT;
END_VAR
TASK DefaultTask(INTERVAL := TIME#500ms, PRIORITY := 38229);
PROGRAM iCounter WITH DefaultTask :
Counter;
VAR_CONFIG
(* instanzspezifische Zuweisungen des Speicherorts für die Variablen *)
iCounter.globVar1.Elem1 AT %IW1.2.3; (* Zuweisung des Speicherorts '%IW1.2.3', ohne Größen-Angabe *)
iCounter.globVar2 AT %IB1.4.6 {SIZE:=2}; (* Zuweisung des Speicherorts '%IB1.4.6', mit Größen-Angabe *)
(* instanzspezifische Zuweisungen des Speicherorts für Ressource-globale Variable *)
valvePos AT %QW28;
END_VAR
END_RESOURCE
END_CONFIGURATION
CONFIGURATION LocalConfiguration
RESOURCE local ON BuiltInPlc { ON_CHANNEL := LocalChannel }
VAR_GLOBAL
valvePos : INT;
END_VAR
TASK DefaultTask(INTERVAL := TIME#500ms, PRIORITY := 38229);
PROGRAM iCounter WITH DefaultTask :
Counter;
END_RESOURCE
VAR_CONFIG
(* instanzspezifische Zuweisungen des Speicherorts für die Variablen *)
local.iCounter.globVar1.Elem1 AT %IW1.2.3; (* Zuweisung des Speicherorts '%IW1.2.3', ohne Größen-Angabe *)
local.iCounter.globVar2 AT %IB1.4.6 {SIZE:=2}; (* Zuweisung des Speicherorts '%IB1.4.6', mit Größen-Angabe *)
(* instanzspezifische Zuweisungen des Speicherorts für Ressource-globale Variable *)
local.valvePos AT %QW28;
END_VAR
END_CONFIGURATION
CONFIGURATION LocalConfiguration
RESOURCE local ON BuiltInPlc { ON_CHANNEL := LocalChannel }
VAR_GLOBAL
valvePos : DT1;
END_VAR
TASK DefaultTask ( INTERVAL := TIME#500ms , PRIORITY := 38229 );
PROGRAM valvePos WITH DefaultTask :
Counter;
VAR_CONFIG
(* FEHLER: Die folgende symbolisch dargestellte Variable ist nicht eindeutig, da sowohl eine globale Variable als auch die Programminstanz mit dem Namen 'valvePos' vorhanden sind. *)
valvePos.Elem1 AT %I1.2.3;
(* Am besten benennen Sie die globale Variable und die Programminstanz um, so dass diese mit eindeutigen IEC-Bezeichnern als Namen deklariert sind. *)
(* Andernfalls geben Sie den Präfix 'VAR_GLOBAL#' an, falls die globale Variable 'valvePos' verwendet werden soll. *)
VAR_GLOBAL#valvePos.Elem1 AT %I1.2.3;
(* Oder geben Sie den Präfix 'PROGRAM#', falls die Programminstanz 'valvePos' verwendet werden soll. *)
PROGRAM#valvePos.globVar1.Elem1 AT %I1.2.3;
END_VAR
END_RESOURCE
END_CONFIGURATION
PROGRAM Counter
VAR_GLOBAL (* Deklaration der entsprechenden Variablen; hier: der globalen Variablen *)
globVar1 : DT1;
globVar2 : INT;
END_VAR
END_PROGRAM
TYPE
DT1 : STRUCT (* Deklaration des entsprechenden Datentyps *)
Elem1 AT %I* : INT;
END_STRUCT;
END_TYPE