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 images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg ) bzw. nicht möglich (= Symbol images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/error.svg ):



im VAR_CONFIG-Abschnitt für eine

Nr.

Element

Konfiguration

Ressource

1

Name einer Ressource

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/error.svg

2

Name einer Programminstanz

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

3

Name einer Variable
Unterstützt werden dabei die Variablen-Arten: →interne Variablen (VAR...END_VAR), →Eingangsvariablen, →Ausgangsvariablen, →externe Variablen , →globale Variablen

Diese Variablen-Arten werden nicht unterstützt: →Ein-/Ausgangsvariablen, →temporäre Variablen
Falls Sie solche Variablen verwenden, werden diese im Code nicht als fehlerhaft gekennzeichnet. In Folge ist es aber nicht möglich, die Anwendung zu erzeugen oder auf die SPS zu laden.

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

4

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

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Es ist möglich, dass das Strukturelement mit einer partiellen Adresse definiert ist.

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/check.svg

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). images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg 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:

Beispiel

Erklärung

%QB7

Ausgang, Byte, 7. Element (in der 1. Ebene)

%IX1

Eingang, Bool, 1. Element (in der 1. Ebene)

%I1

Eingang, Bool, 1. Element (in der 1. Ebene)

%IW2.5.7.3

Eingang, Word, 3. Element im 7. "Modul" auf dem 5. "Regal" des 2. "Bus"

Erforderlicher Aufbau für physikalische Adresse

Geben Sie eine physikalische Adresse laut diesem Aufbau ein:


Zeichen

Bedeutung

1.

%

leitet die Adresse ein

2.

Präfix für Lage

definiert die Lage


I

Eingang


Q

Ausgang


M

Speicher (Memory)

3.

Präfix für Größe

definiert die Größe


X oder keiner

Bool (einzelnes Bit)


B

Byte (8 Bits)


W

Wort (16 Bits)


D

Doppelwort (32 Bits)


L

Langwort (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

  • Zur Verwendung der VAR_CONFIG-Abschnitte: 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.

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg 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).

Beispiel 1: 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 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
Beispiel 2: 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 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
Beispiel 3: Abschnitt in Ressource mit Präfixes
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
Addendum für Beispiele 1 bis 3: Möglicher ST-Code
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