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.

Syntax
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 Deklaration eines solchen Abschnitts ist sowohl vor dem Ende einer Konfiguration (END_CONFIGURATION) als auch vor dem Ende einer Ressource (END_RESOURCE) zulässig. 

Die folgenden Elemente sind in der entsprechenden Hierarchie für name_1, name_2 usw. möglich (= Symbol (tick)) bzw. nicht möglich (= Symbol (error)):



im VAR_CONFIG-Abschnitt für eine
Nr.ElementKonfigurationRessource
1Name einer Ressource(tick)(error)
2Name einer Programminstanz(tick)(tick)
3Name einer →globalen Variablen(tick)(tick)
4

Name eines Strukturelements,
sofern der Datentyp der globalen Variablen ein →strukturierter Datentyp ist

(info)  Es ist möglich, dass das Strukturelement mit einer partiellen Adresse definiert ist.

(tick)(tick)

Die Elemente müssen voneinander durch . voneinander getrennt werden.
Falls das definierte Element im VAR_CONFIG-Abschnitt nicht eindeutig ist (da z.B. eine globale Variable und die Programminstanz den gleichen Namen haben), können Sie mit Hilfe des Präfixes VAR_GLOBAL# oder PROGRAM# vorgeben, welches der Elemente zu verwenden ist (siehe nachfolgendes Beispiel mit Präfixes). (warning) Trotz dieser Möglichkeit empfiehlt logi.cals, bei der Deklaration des entsprechenden Elements (z.B. einer globalen Variablen) einen eindeutigen →IEC-Bezeichner als Namen zu verwenden.

Mit dem optionalen Schlüsselwort AT können Sie der symbolischen Variable eine physikalische Adresse in der →SPS zuweisen.

Beispiele für physikalischen Adressen: 

BeispielErklärung
%QB7Ausgang, Byte, 7. Element (in der 1. Ebene)
%IX1Eingang, Bool, 1. Element (in der 1. Ebene)
%I1Eingang, Bool, 1. Element (in der 1. Ebene)
%IW2.5.7.3Eingang, Word, 3. Element im 7. "Modul" auf dem 5. "Regal" des 2. "Bus"

Geben Sie eine physikalische Adresse laut diesem Aufbau ein:


ZeichenBedeutung
1.%leitet die Adresse ein
2.Präfix für Lagedefiniert die Lage

IEingang

QAusgang

MSpeicher (Memory)
3.Präfix für Größedefiniert die Größe

X oder keinerBool (einzelnes Bit)

BByte (8 Bits)

WWort (16 Bits)

DDoppelwort (32 Bits)

LLangwort (64 Bits)
4.

eine oder mehrere vorzeichenlose ganze Zahlen (→Unsigned Integers)
Zur Eingabe von hierarchischen Ebenen müssen Sie die Zahlen durch . voneinander trennen.
Die höchste Ebene geben Sie als Zahl ganz links ein, die nächsten Ebenen als Zahlen rechts davon.

Einschränkung

logi.CAD 3 unterstützt max. 5 Ebenen. Die höchstmögliche Zahl pro Ebene ist: 4_294_967_295 (das entspricht UINT32_MAX)
Die Unterstrich-Zeichen _ sind nur zur besseren Lesbarkeit eingefügt und daher nicht signifikant.


definiert die Adresse

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

  • logi.CAD 3 unterstützt VAR_CONFIG-Abschnitte derzeit nur bei Verwendung des →EtherCAT IO-Providers. In allen anderen Fällen können Sie zwar die Syntax verwenden, der entsprechende Code wird aber noch nicht für die →SPS erzeugt (daher haben die VAR_CONFIG-Abschnitte noch keine Auswirkung auf die Ausführung der Anwendung).
  • Der VAR_CONFIG-Abschnitt erlaubt keine instanzspezifische Initialisierung.

(info) Die Deklarationen der entsprechenden globalen Variablen bzw. Datentypen werden vorausgesetzt, damit die folgenden Beispiele fehlerfrei sind.

Beispiel für Abschnitt in Ressource
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 Programm-globale 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
Beispiel für Abschnitt in Konfiguration
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 Programm-globale 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
Beispiel für Abschnitt in Ressource mit Präfixes
CONFIGURATION LocalConfiguration
	RESOURCE local ON BuiltInPlc { ON_CHANNEL := LocalChannel }
		VAR_GLOBAL
			valvePos  : MyType;
		END_VAR
		TASK DefaultTask ( INTERVAL := TIME#500ms , PRIORITY := 38229 );
		PROGRAM valvePos  WITH DefaultTask :
			ProgramWithGVs;
		
		VAR_CONFIG
			(* Die folgende symbolisch dargestellte Variable ist nicht eindeutig, da sowohl eine globale Variable als auch die Programminstanz mit dem Namen 'valvePos' vorhanden sind. *)
			valvePos.E1 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.E1 AT %I1.2.3;
			(* Oder geben Sie den Präfix 'PROGRAM#', falls die Programminstanz 'valvePos' verwendet werden soll. *)
			PROGRAM#valvePos.E1 AT %I1.2.3;
		END_VAR
	END_RESOURCE
END_CONFIGURATION