Instanzbezogene adressierte Variablen: 'Instanz' und 'Programm'
Hinweis
Die hier beschriebenen instanzbezogenen adressierten Variablen werden nicht in sicherheitsbezogenen POEs, d.h. nicht für die sicherheitsbezogene SPS unterstützt. Deshalb kann die Datenrichtung ('I/Q') in lokalen Variablentabellen nicht eingestellt werden und es lassen sich auch keine 'Instanz'- oder 'Programm'-Deklarationen in die Datenliste der sicherheitsbezogenen SPS einfügen. |
Die Zuordnung einer Variablen zu einem Prozessdaten-Element kann nur in der Datenliste der Ressource ('IEC 61131-3'-Knoten) oder der Steuerung erfolgen (siehe hierzu das Thema "Rollenzuordnung in Datenlisten: I/O-Variablen und Austauschvariablen"). Ressourceglobale Variablen werden in der Datenliste mit dem Schlüsselwort 'Global' deklariert. Eine ressourceglobale Variable, die einem Prozessdaten-Element zugeordnet ist, wird als ressourceglobale I/O-Variable bezeichnet. Diese Variable kann in allen POEs der Projekts verwendet werden.
Wenn ein Programm oder Funktionsbaustein mehrfach instanziiert ist, kann eine ressourceglobale I/O-Variable nicht instanzbezogen behandelt werden. Jede Instanz, die diese ressourceglobale I/O-Variable liest/schreibt, greift auf denselben physikalischen Speicher zu. Die instanzbezogene Behandlung einer Variablen ist dann notwendig, wenn mehrere Instanzen desselben Programms oder FB andere Eingangs- und Ausgangssignale verarbeiten sollen.
Um sicherzustellen, dass jede Programm-/FB-Instanz die richtigen instanzbezogenen Variablen liest/schreibt, müssen instanzbezogene I/O-Variablen anstelle von Globals verwendet werden. Eine instanzbezogene I/O-Variable kann auf zwei Arten realisiert werden:- Resultierend aus einer lokalen Variablen, die mit dem Schlüsselwort 'Instanz' in einer Programm- oder FB-POE deklariert ist und für die eine Datenrichtung angegeben wurde. In der Datenliste erhalten solche Variablen automatisch das Deklarationsschlüsselwort 'Instanz'.
- Resultierend aus einer programmglobalen Variablen, die mit dem Schlüsselwort 'Programm' in einer Programm-POE deklariert ist und für die eine Datenrichtung angegeben wurde. In der Datenliste erhalten solche Variablen automatisch das Deklarationsschlüsselwort 'Programm'.
Hinweis
Lokale Variablen und programmglobale instanzbezogene Variablen unterscheiden sich in ihrer "Sichtbarkeit": Eine lokale 'Instanz'-Variable kann nur in der POE verwendet werden, in der sie deklariert ist. Im Gegensatz dazu kann eine programmglobale Variable ('Programm'-Schlüsselwort) auch in den FB-Instanzen verwendet werden, die in dieser Programm-POE aufgerufen werden. Dazu muss die programmglobale Variable als externe Variable in den aufrufenden FBs deklariert sein. |
Lokale Variable wird zur instanzbezogenen 'Instanz'-Variablen
Um eine 'Instanz'-Variable für einen FB zu deklarieren, gehen Sie wie folgt vor:- Öffnen Sie die Variablentabelle der FB-POE, die mehrfach instanziiert werden soll.
- Fügen Sie die neue Variable in die Tabelle ein und setzen Sie 'Verw.' auf 'Instanz'.
Das Feld 'I/Q' wird aktiv und die Datenrichtung auf 'I' voreingestellt. - Geben Sie in der Spalte 'I/Q' an, ob die Variable mit einem Eingangssignal (I) oder Ausgangssignal (Q) verbunden werden soll.Durch Festlegen der Datenrichtung in der Spalte 'I/Q' in der Variablentabelle des FB wird die lokale Variable automatisch in die Datenliste der Ressource übernommen.
- Doppelklicken Sie in der ANLAGE auf den 'IEC 61131-3'-Knoten und öffnen Sie im Editorenbereich die Datenliste.In der Datenliste wird die Variable automatisch für jede Instanz des FB eingefügt, in dem die Variable deklariert ist. Die 'Verwendung' wird automatisch auf 'Instanz' gesetzt.
Hinweis
Eine 'Instanz'-Variable kann in der 'IEC 61131-3'-Datenliste initialisiert werden. Der in der Spalte 'Init' definierte Anfangswert einer 'Instanz'-Deklaration überschreibt den Anfangswert, der in der lokalen Variablentabelle definiert ist.Ordnen Sie jeder Variableninstanz ein Prozessdaten-Element zu.
Beispiel: lokale instanzbezogene Variable
Programmglobale Variable wird zur instanzbezogenen 'Programm'-Variablen
Alternativ zu einer lokalen I/O-Variablen (siehe obige Beschreibung) können Sie auch eine programmglobale Variable verwenden. Eine programmglobale Variable ist in einer Programm-POE mit dem Schlüsselwort 'Programm' deklariert. Der Unterschied zwischen einer lokalen I/O-Variablen und einer programmglobalen I/O-Variablen ist, dass die programmglobale Variable auch in FB-Instanzen verwendet werden kann, die aus der Programm-POE aufgerufen werden. Dazu muss die Variable mit dem Schlüsselwort 'Extern' im aufrufenden FB deklariert sein.
Um eine programmglobale Variable als 'Programm'-Variable zu deklarieren, gehen Sie wie folgt vor:- Öffnen Sie die Variablentabelle der Programm-POE, die mehrfach instanziiert werden soll.
- Fügen Sie die neue Variable in die Tabelle ein und setzen Sie 'Verw.' auf 'Programm'.
- Geben Sie in der Spalte 'I/Q' an, ob die Variable mit einem Eingangssignal (I) oder Ausgangssignal (Q) verbunden werden soll.Durch Angabe der Datenrichtung in der Spalte 'I/Q' in der Variablentabelle des Programms wird die programmglobale Variable automatisch in die Datenliste der Ressource übernommen.
- Doppelklicken Sie in der ANLAGE auf den 'IEC 61131-3'-Knoten und öffnen Sie im Editorenbereich die Datenliste.In der Datenliste wurde die Variable automatisch für jede Instanz des Programms eingefügt, in dem die Variable deklariert ist. Die 'Verwendung' wird automatisch auf 'Programm' gesetzt.
Hinweis
Eine 'Programm'-Variable kann in der 'IEC 61131-3'-Datenliste initialisiert werden. Der in der Spalte 'Init' definierte Anfangswert einer 'Programm'-Deklaration überschreibt den Anfangswert, der in der lokalen Variablentabelle definiert ist.Ordnen Sie jeder Variableninstanz ein Prozessdaten-Element zu.
Hinweis
'Programm'-Variablen lassen sich ebenfalls beim Debuggen der Applikation forcen. |