Deklarationseditor
Der Deklarationseditor wird verwendet bei der Variablendeklaration von Bausteinen und globalen Variablen, zur Datentypdeklaration, und im Watch- und Rezepturverwalter. Er verfügt über die Windows-üblichen Funktionalitäten und auch die der IntelliMouse kann genützt werden, wenn der entsprechende Treiber installiert ist.
Im Überschreibmodus wird in der Statusleiste 'ÜB' schwarz angezeigt, zwischen Überschreib- und Einfügemodus kann mit der Taste <Einfg> gewechselt werden.
Die Variablendeklaration wird durch Syntaxcoloring unterstützt.
Die wichtigsten Befehle finden Sie im Kontextmenü (rechte Maustaste).
Deklarationsteil
Im Deklarationsteil eines Bausteins werden alle Variablen deklariert, die nur in diesem Baustein verwendet werden. Dies können Eingabevariablen, Ausgabevariablen, EinAusgabevariablen, lokale Variablen, remanente Variablen und Konstanten sein. Die Deklarationssyntax orientiert sich am Standard der IEC61131-3. Ein Beispiel für eine korrekte Variablendeklaration im TwinCAT PLC Control-Editor:
Deklarationseditor
Eingabevariablen
Zwischen den Schlüsselwörtern VAR_INPUT und END_VAR werden alle Variablen deklariert, die als Eingabevariablen eines Bausteins dienen, das heißt, an der Aufrufstelle kann der Wert der Variablen beim Aufruf mitgegeben werden.
Beispiel:
VAR_INPUT
in1:INT; (* 1. Eingabevariable*)
END_VAR
Ausgabevariablen
Zwischen den Schlüsselwörtern VAR_OUTPUT und END_VAR werden alle Variablen deklariert, die als Ausgabevariablen eines Bausteins dienen, das heißt, diese Werte werden dem aufrufenden Baustein zurückgeliefert, dort können diese abgefragt und weiterverwendet werden.
Beispiel:
VAR_OUTPUT
out1:INT; (* 1. Ausgabevariable*)
END_VAR
Ein-Ausgabevariablen
Zwischen den Schlüsselwörtern VAR_IN_OUT und END_VAR werden alle Variablen deklariert, die als Ein- und Ausgabevariablen eines Bausteins dienen.
Bei dieser Variablen wird direkt der Wert der übergebenen Variablen verändert ("Übergabe als Pointer", Call-by-Reference). Deshalb kann der Eingabewert für eine solche Variable keine Konstante sein. Deshalb können auch VAR_IN_OUT Variablen eines Funktionsblocks nicht von außen direkt über <Funktionsblockinstanz>.<Ein-/Ausgabevariable> gelesen oder beschrieben werden !
Beispiel:
VAR_IN_OUT
inout1:INT; (* 1. EinAusgabevariable *)
END_VAR
Lokale Variablen
Zwischen den Schlüsselwörtern VAR und END_VAR werden alle lokalen Variablen eines Bausteins deklariert. Diese haben keine Verbindung nach außen, das heißt, es kann nicht von außen auf sie zugegriffen werden.
Beispiel:
VAR
loc1:INT; (* 1. Lokale Variable*)
END_VAR
Remanente Variablen
Remanente Variablen können ihren Wert über die übliche Programmlaufzeit hinaus behalten. Dazu gehören Retain-Variablen und Persistente Variablen.
- Retain-Variablen werden mit dem Schlüsselwort RETAIN gekennzeichnet. Diese Variablen behalten ihren Wert nach einem Shutdown von TwinCAT. Beim Kommando 'Online' 'Reset' wird die Steuerung mit Initialwerten gestartet. Ein Anwendungsbeispiel für Retain Variablen wäre ein Stückzähler in einer Fertigungsanlage, der nach einem Stromausfall weiterzählen soll.
Alle anderen Variablen werden neu initialisiert, entweder mit ihren initialisierten Werten oder mit den Standardinitialisierungen.
Beispiel:
VAR RETAIN
rem1:INT; (* Remanente Variable*)
END_VAR
![]() | Wenn eine lokale Variable in einem Programm als RETAIN deklariert ist, wird genau diese Variable im Retain-Bereich gespeichert (wie eine globale Retain-Variable). |
Persistente Variablen
Neben den remanenten Variablen, die mit RETAIN spezifiziert werden, gibt es eine weitere Klasse von remanenten Variablen. Diese Variablen werden mit ihrem Instanzpfad und Symbolnamen gesichert. Die Generierung von Symbolen muss dazu angewählt sein. Während die mit RETAIN gesicherten Variablen nach einem "Rebuild all" des SPS Programms und anschließendem Kaltstart nicht mehr zur Verfügung stehen, bleiben persistente Variablen bestehen. Bei einem Reset der SPS werden auch RETAIN Variablen neu initialisiert, persistente Variablen lassen sich nur mit einem Urlöschen initialisieren. Die persistenten Variablen werden beim Herunterfahren des TwinCAT System in eine Datei gesichert und beim Neustart wieder mit ihren gesicherten Werten vorinitialisiert.
Beispiel:
VAR PERSISTENT
Rem2:INT; (* Persistente Variable*)
END_VAR
![]() | Zur Überprüfung der Richtigkeit der PERSISTENT und RETAIN Variablen gibt es in den Systemvariablen in der Struktur SYSTEMINFO ein Byte bootDataFlags. Dieses Byte zeigt den Zustand nach dem Laden der Bootdaten an. Die oberen vier Bit signalisieren den Zustand der persistenten Daten, die unteren vier Bit den Zustand der retain Daten. Um diese Informationen nutzen zu können, muss die Bibliothek "TcSystem.lib" eingebunden werden. |
Bitnummer | Beschreibung |
---|---|
0 | RETAIN Variablen: LOADED (fehlerfrei geladen) |
1 | RETAIN Variablen: INVALID (es wurde die Sicherungskopie geladen, weil keine gültige Datei vorhanden war) |
2 | RETAIN Variablen: REQUESTED (RETAIN Variablen sollten geladen werden, Einstellung im TwinCAT System Control)) |
3 | reserviert |
4 | PERSISTENT Variablen: LOADED (fehlerfrei geladen) |
5 | PERSISTENT Variablen: INVALID (es wurde die Sicherungskopie geladen, weil keine gültige Datei vorhanden war) |
6 | reserviert |
7 | reserviert |
Beim Shutdown (Stop) von TwinCAT werden die PERSISTENT und die RETAIN Daten in zwei Dateien auf die Festplatte geschrieben. Der Pfad kann im TwinCAT System Control über die TwinCAT System Eigenschaften (Reiter PLC) angegeben werden. Die Standardeinstellung ist "<Laufwerk>:\TwinCAT\Boot". Die Dateien haben alle einen festen Namen und eine feste Endung:
Dateiname | Beschreibung |
---|---|
TCPLC_P_x.wbp | Bootprojekt (x = Nummer des Laufzeitsystems) |
TCPLC_R_x.wbp | RETAIN Variablen (x = Nummer des Laufzeitsystems) |
TCPLC_T_x.wbp | PERSISTENT Variablen (x = Nummer des Laufzeitsystems) |
TCPLC_R_x.wb~ | Sicherungskopie der RETAIN Variablen (x = Nummer des Laufzeitsystems) |
TCPLC_T_x.wb~ | Sicherungskopie der PERSISTENT Variablen (x = Nummer des Laufzeitsystems) |
Kann beim Shutdown (Stop) von TwinCAT die Datei der persistenten und/oder retain Variablen nicht geschrieben werden, so wird standardmäßig die Sicherungsdatei geladen. In der SPS ist dann im bootDataFlags das Bit 1 (für die RETAIN Variablen) oder/und das Bit 5 (für die PERSISTENT Variablen) gesetzt.
Soll die Sicherungsdatei auf keinen Fall verwendet werden, so muss man in der NT Registry eine Einstellung vornehmen. Hierzu ist mit dem Registry-Editor unter
[HKEY_LOCAL_MACHINE\SOFTWARE\Beckhoff\TwinCAT\Plc]
"ClearInvalidRetainData"=dword:00000000
"ClearInvalidPersistentData"=dword:00000000
der Wert von "ClearInvalidRetainData" auf 1 bzw. von "ClearInvalidPersistentData" auf 1 zu setzen. Die Defaulteinstellung ist 0.
Konstanten, Typed Literals
Konstanten werden mit dem Schlüsselwort CONSTANT gekennzeichnet. Sie können lokal oder global deklariert werden.
Syntax:
VAR CONSTANT
<Bezeichner>:<Typ> :=
<Initialisierung>;
END_VAR
Beispiel:
VAR CONSTANT
con1:INT:=12; (* 1. Konstante*)
END_VAR
Eine Auflistung möglicher Konstanten finden Sie im Anhang. Sehen Sie dort auch zur Möglichkeit der Verwendung von getypten Konstanten (Typed Literals).
Externe Variablen
Mit dem Schlüsselwort EXTERNAL werden globale Variablen gekennzeichnet, die in den Baustein importiert werden sollen. Sie erscheinen im Online-Modus ebenfalls im Watchfenster des Deklarationsteils.
Stimmt die VAR_EXTERNAL-Deklaration nicht mit der globalen Deklaration überein, so wird folgende Fehlermeldung ausgegeben: "Deklaration von '<var>' stimmt nicht mit globaler Deklaration überein!"
Existiert die globale Variable nicht, so wird folgende Fehlermeldung ausgegeben: "Unbekannte globale Variable: '<var>'!"
Beispiel:
VAR EXTERNAL
var_ext1:INT:=12; (* 1. externe Variable *)
END_VAR
Schlüsselwörter
Schlüsselwörter sind in allen Editoren in Großbuchstaben zu schreiben. Schlüsselwörter dürfen nicht als Variablennamen verwendet werden.
Variablendeklaration
Eine Variablendeklaration hat folgende Syntax:
<Bezeichner> {AT
<Adresse>}:<Typ> {:= <Initialisierung>};
Die Teile in geschweiften Klammern {} sind optional.
Für den Bezeichner, also den Namen von Variablen ist zu beachten, dass er keine Leerstellen und Umlaute enthalten darf, er darf nicht doppelt deklariert werden und nicht identisch mit Schlüsselwörtern sein. Groß-/Kleinschreibung bei Variablen wird nicht beachtet, das heißt VAR1, Var1 und var1 sind keine unterschiedlichen Variablen. Unterstriche sind in Bezeichner signifikant, z.B. werden "A_BCD" und "AB_CD" als unterschiedliche Bezeichner interpretiert. Mehrfach aufeinanderfolgende Unterstriche am Anfang eines Bezeichners oder in einem Bezeichner sind nicht erlaubt.
Die Bezeichnerlänge sowie der signifikante Bereich sind unbegrenzt.
Alle Variablendeklarationen und Datentypelemente können Initialisierungen enthalten. Sie erfolgen mit dem Zuweisungsoperator " := ". Für Variablen von elementaren Typen sind diese Initialisierungen Konstanten. Die Default-Initialisierung ist für alle Deklarationen 0.
Beispiel:
var1:INT:=12; (* Integervariable mit
Initialwert 12*)
Wenn Sie eine Variable direkt an eine bestimmte Adresse binden wollen, dann müssen Sie die Variable mit dem Schlüsselwort AT deklarieren. Zur schnelleren Eingabe von Deklarationen verwenden Sie den Kurzformmodus. In Funktionsblöcken können Variablen auch mit unvollständigen Adreßangaben spezifiziert werden. Um solche Variablen in einer lokalen Instanz zu nutzen, muss dafür ein Eintrag in der Variablenkonfiguration vorgenommen werden.
Beachten Sie die Möglichkeit des automatischen Deklarierens!
AT-Deklaration
Wenn Sie eine Variable direkt an eine bestimmte Adresse binden wollen, dann müssen Sie die Variable mit dem Schlüsselwort AT deklarieren. Der Vorteil einer solchen Vorgehensweise ist, dass man einer Adresse einen aussagekräftigeren Namen geben kann, und dass man eine eventuelle Veränderung eines Ein- oder Ausgangssignals nur an einer Stelle (nämlich in der Deklaration) zu ändern braucht.
Beachten Sie, dass man auf Variablen, die auf einen Eingang gelegt sind, nicht schreibend zugreifen kann. Als weitere Einschränkung gilt, dass AT-Deklarationen nur für lokale und globale Variablen gemacht werden können, also nicht für Ein- und Ausgabevariablen von Bausteinen.
Beispiele:
schalter_heizung7 AT %QX0.0: BOOL;
lichtschrankenimpuls AT %IX7.2: BOOL;
ablage AT %MX2.2: BOOL;
![]() | Wenn boolsche Variablen auf eine Byte-, Word- oder DWORD-Adresse gelegt werden, belegen sie 1 Byte mit TRUE bzw. FALSE, nicht nur das erste Bit nach dem Offset ! |
'Einfügen' 'Deklarations Schlüsselworte'
Mit diesem Befehl öffnen Sie eine Liste aller Schlüsselwörter, die im Deklarationsteil eines Bausteins benutzt werden können. Nachdem ein Schlüsselwort ausgewählt, und die Wahl bestätigt wurde, wird das Wort an der aktuellen Cursorposition eingefügt. Die Liste erhalten Sie auch, wenn Sie die Eingabehilfe aufrufen und die Kategorie Deklarationen auswählen.
'Einfügen' 'Typen'
Mit diesem Befehl erhalten Sie eine Auswahl der möglichen Typen für eine Variablendeklaration. Die Liste erhalten Sie auch, wenn Sie die Eingabehilfe <F2> aufrufen.
Die Typen sind eingeteilt in die Kategorien:
- Standard-Typen BOOL, BYTE etc.·
- Definierte Typen Strukturen, Aufzählungstypen etc.
- Standard-Funktionsblöcke für Instanzdeklarationen
- Definierte Funktionsblöcke für Instanzdeklarationen
TwinCAT PLC Control unterstützt sämtliche Standard-Typen der Norm IEC1131-3. Beispiele für die Verwendung der verschiedenen Typen befinden sich im Anhang.
Syntaxcoloring
In den Texteditoren und im Deklarationseditor werden Sie bei der Implementierung und der Variablendeklaration optisch unterstützt. Fehler werden vermieden bzw. schneller entdeckt, dadurch dass der Text farbig dargestellt wird.
Ein ungeschlossener Kommentar, der dadurch Anweisungen auskommentiert, wird sofort bemerkt; Schlüsselwörter werden nicht versehentlich falsch geschrieben usw.
Es gilt folgende Farbgebung:
Blau | Schlüsselwörter |
Grün | Kommentare in den Texteditoren |
Rosa | Spezielle Konstanten (z.B. TRUE/FALSE, T#3s, %IX0.0) |
Rot | Fehlerhafte Eingabe (z.B. ungültige Zeitkonstante, Schlüsselwort klein geschrieben,...) |
Schwarz | Variablen, Konstanten, Zuweisungsoperatoren, ... |
Kurzformmodus
Der Deklarationseditor von TwinCAT PLC Control bietet Ihnen die Möglichkeit des Kurzformmodus. Dieser wird aktiviert, wenn Sie eine Zeile mit <Strg><Eingabetaste> beenden. Folgende Kurzformen werden unterstützt:· Alle Bezeichner bis auf den letzten Bezeichner einer Zeile werden zu Variablenbezeichnern der Deklaration. · Der Typ der Deklaration wird durch den letzten Bezeichner der Zeile bestimmt, hierbei gilt:
B oder BOOL | ergibt BOOL |
I oder INT | ergibt INT |
R oder REAL | ergibt REAL |
S oder STRING | ergibt STRING |
Wenn durch diese Regeln kein Typ festgelegt werden konnte, dann ist der Typ BOOL und der letzte Identifikator wird nicht als Typ benutzt (Beispiel 1.). Jede Konstante wird, je nach Typ der Deklaration, zu einer Initialisierung oder einer Stringlänge (Beispiele 2. und 3.). Eine Adresse (wie im %MD12) wird um das AT ... Attribut erweitert (Beispiel 4.). Ein Text nach einem Strichpunkt (;) wird ein Kommentar (Beispiel 4.). Alle anderen Zeichen in der Zeile werden ignoriert (wie z.B. das Ausrufezeichen in Beispiel 5.).
Beispiele:
Kurzform | Deklaration |
---|---|
A | A: BOOL; |
A B I 2 | A, B: INT := 2; |
ST S 2; Ein String | ST: STRING(2); (* Ein String *) |
X %MD12 R 5; Reelle Zahl | X AT %MD12: REAL := 5.0;(* Reelle Zahl *) |
B ! | B: BOOL; |
Automatisch deklarieren
Wenn die Option Automatisch deklarieren in der Kategorie Editor des Optionsdialogs gewählt wurde, so erscheint in allen Editoren nach Eingabe einer noch nicht deklarierten Variablen ein Dialog, mit dessen Hilfe diese Variable deklariert werden kann.
Dialog zur Variablendeklaration
Wählen Sie mit Hilfe der Combobox Klasse, ob es sich um eine lokale Variable (VAR) Eingabevariable (VAR_INPUT), Ausgabevariable (VAR_OUTPUT), EinAusgabevariable (VAR_IN_OUT) oder eine globale Variable (VAR_GLOBAL) handelt. Mit den Optionen CONSTANT und RETAIN können sie definieren, ob es sich um eine Konstante bzw. eine remanente Variable handelt.
Das Feld Name wurde mit dem im Editor eingegebenen Variablenname vorbelegt, das Feld Typ mit BOOL.
Mit der Schaltfläche ... erhalten Sie den Dialog der Eingabehilfe zur Auswahl aller möglichen Datentypen.
Wird als Typ der Variable ARRAY (Feld) ausgewählt, so erscheint der Dialog zur Eingabe der Array-Grenzen.
Deklarationseditor für Arrays
Für jede der drei möglichen Dimensionen (Dim.) können unter Start und Ende die Arraygrenzen eingegeben werden, indem durch Mausklick auf das entsprechende Feld ein Editierrahmen geöffnet wird. Im Feld Typ wird der Datentyp des Arrays angegeben. Über die Schaltfläche ... kann hierzu ein Eingabehilfedialog aufgerufen werden.
Beim Verlassen des Array-Grenzen-Dialogs über die Schaltfläche OK wird aus den Angaben das Feld 'Typ' im Dialog Variablendeklaration im IEC-Format belegt. Beispiel: ARRAY [1..5, 1..3] OF INT
Im Feld Initialwert können Sie den Initialwert der zu deklarierenden Variable eintragen. Ist diese ein Array oder eine gültige Struktur, können Sie über die Schaltfläche oder <F2> einen speziellen Initialisierungsdialog öffnen, bzw. bei anderen Typen den Eingabehilfedialog.
Im Initialisierungsdialog für ein Array erhalten Sie eine Auflistung der Array-Elemente und können mit Mausklick auf die Stelle hinter ":=" ein Editierfeld zum Eintragen des Initialwerts eines Elements öffnen.
Im Initialisierungsdialog für eine Struktur werden die einzelnen Komponenten in Baumstruktur dargestellt. In Klammern hinter dem Variablennamen stehen Typ und Default-Initialwert der Komponente, dahinter folgt jeweils ":=". Bei Mausklick auf das Feld hinter ":=" öffnet ein Editierfeld, in dem Sie den gewünschten Initialwert eingeben. Ist eine Komponente ein Array, können im Initialisierungsdialog durch Mausklick auf das Pluszeichen vor dem Array-Namen die einzelnen Felder des Arrays aufgeklappt und mit Initialwerten editiert werden.
Nach Verlassen des Initialisierungsdialogs mit OK erscheint im Feld Initialwert des Deklarationsdialogs die Initialisierung des Arrays bzw. der Struktur im IEC-Format.
Beispiel: x:=5,feld:=2,3,struct2:=(a:=2,b:=3)
Im Feld Adresse können Sie die zu deklarierende Variable an eine IEC-Adresse binden (AT-Deklaration).
Gegebenenfalls geben Sie einen Kommentar ein. Der Kommentar kann mittels der Tastenkombination <Strg>+<Eingabetaste> mit Zeilenumbrüchen versehen werden.
Durch Drücken von OK wird der Deklarationsdialog geschlossen und die Variable gemäß IEC-Syntax in den entsprechenden Deklarationseditor eingetragen.
![]() | Den Dialog zur Variablendeklaration erhalten Sie ebenfalls auf Anfrage über den Befehl 'Bearbeiten' 'Variablen' Deklaration'. |
Steht der Cursor auf einer Variablen, kann im Offline Modus mit <Shift> <F2> das Autodeclare-Fenster mit den aktuellen variablenbezogenen Einstellungen geöffnet werden.
Zeilennummern im Deklarationseditor
Im Offline Modus markiert ein einfacher Klick auf eine spezielle Zeilennummer die gesamte Textzeile. Im Online Modus lässt ein einzelner Klick auf eine bestimmte Zeilennummer die Variable in dieser Zeile auf- oder zuklappen, falls es sich um eine strukturierte Variable handelt.
Deklarationen als Tabelle
Ist die Option Deklarationen als Tabelle im Optiondialog in der Kategorie Editor eingestellt, erhalten Sie den Deklarationseditor in einer tabellarischen Darstellung. Wie in einem Karteikasten können Sie einzeln die Registerkarten der jeweiligen Variablenarten auswählen und die Variablen editieren. Für jede Variable erhalten Sie folgende Felder zum Eintrag:
Name | Geben Sie den Bezeichner der Variablen ein. |
Adresse | Geben Sie gegebenenfalls die Adresse der Variablen ein (AT-Deklaration) |
Typ | Geben Sie den Typ der Variablen ein. (Bei der Instanziierung eines Funktionsblocks, den Funktionsblock) |
Initial | Geben Sie eine eventuelle Initialisierung der Variablen ein. (entsprechend dem Zuweisungsoperator " := ") |
Kommentar | Geben Sie hier einen Kommentar ein. |
Die beiden Darstellungsarten des Deklarationseditors können problemlos gewechselt werden. Im Online Modus gibt es für die Darstellung des Deklarationseditors keine Unterschiede. Um eine neue Variable zu editieren, führen Sie den Befehl 'Einfügen' 'Neue Deklaration' aus.
Deklarationseditor als Tabelle
'Einfügen' 'Neue Deklaration'
Mit diesem Befehl tragen Sie eine neue Variable in die Deklarationstabelle des Deklarationseditors ein. Befindet sich die aktuelle Cursorposition in einem Feld der Tabelle, wird die neue Variable vor dieser Zeile eingefügt, ansonsten ans Ende der Tabelle angefügt. Außerdem können Sie ans Ende der Tabelle eine neue Deklaration anfügen, indem Sie im letzten Feld der Tabelle die rechte Pfeiltaste oder die Tabulatortaste betätigen. Sie erhalten eine Variable, die als Vorbelegung im Feld Name 'Name', und im Feld Typ 'Bool' stehen hat. Diese Werte sollten Sie in die gewünschten Werte ändern. Name und Typ genügen für eine vollständige Variablendeklaration.
Pragma-Anweisung
Die Pragma-Anweisung dient zum Steuern des Übersetzungsvorgangs. Sie wird steht mit zusätzlichem Text in einer Programmzeile oder in einer eigenen Zeile des Deklarationseditors.
Die Pragma-Anweisung wird in geschweifte Klammern gefasst (Groß- oder Kleinschreibung wird nicht berücksichtigt):
{ <Anweisungstext> }
Kann der Compiler den Anweisungstext nicht sinnvoll interpretieren, so wird das gesamte Pragma wie ein Kommentar behandelt und überlesen. Es wird jedoch eine Warnung ausgegeben: "Ignoriere Compilerdirektive '<Anweisungstext>'!".
Abhängig vom Pragmatyp und -inhalt wirkt ein Prama auf die Zeile, in der es steht, bzw. auf alle folgenden Zeilen, bis es mit einem entsprechenden Pragma wieder aufgehoben wird oder bis dasselbe Pragma mit anderen Parametern ausgeführt oder das Ende der Datei erreicht wird. Als Datei wird hierbei verstanden: Deklarationsteil, Implementationsteil, Globale Variablenliste, Typdeklaration.
Die öffnende Klammer darf unmittelbar auf einen Variablennamen folgen. Öffnende und schließende Klammer müssen sich in derselben Zeile befinden.
Folgendes Pragma steht derzeit zur
Verfügung:
Pragma {flag [<flags>] [off|on]}
Mit diesem Pragma können die Eigenschaften einer Variablendeklaration beeinflusst werden.
<flags> kann eine Kombination der folgenden Flags sein:
noinit | Die Variable wird nicht initialisiert. |
nowatch | Die Variable kann nicht gemonitort werden. |
noread | Die Variable wird ohne Leserecht in die Symboldatei exportiert. |
nowrite | Die Variable wird ohne Schreibrecht in die Symboldatei exportiert. |
noread, nowrite | Die Variable wird nicht in die Symboldatei exportiert. |
Mit der Modifikation "on" wirkt das Pragma auf alle folgenden Variablendeklarationen, bis es vom Pragma {flag off} aufgehoben wird, bzw. bis es von einem anderen {flag <flags> on}-Pragma überschrieben wird.
Ohne die Modifikation mit "on" oder "off" wirkt das Pragma nur auf die aktuelle Variablendeklaration (das ist die Deklaration, die mit dem nächsten Strichpunkt abgeschlossen wird).
Beispiele:
Die Variable a wird nicht initialisiert und nicht gemonitort. Die Variable b wird nicht initialisiert:
VAR
a : INT {flag noinit, nowatch};
b : INT {flag noinit};
END_VAR
VAR
{flag noint, nowatch on}
a : INT {flag noinit on};
b : INT;
{flag off}
END_VAR
Beide Variablen werden nicht initialisiert:
{flag noinit on}
VAR
a : INT;
b : INT;
END_VAR
{flag off}
VAR
{flag noinit on}
a : INT;
b : INT;
{flag off}
END_VAR
Die Flags "noread" und "nowrite" dienen dazu, in einem Baustein, der Lese- und/oder Schreibrecht hat, einzelne Variablen mit einem eingeschränkten Zugriffsrecht zu versehen. Der Default für eine Variable ist die Einstellung, die der Baustein hat, in dem die Variable deklariert ist. Hat eine Variable weder Lese- noch Schreibrecht, dann wird sie nicht in die Symboldatei exportiert.
Beispiele:
Der Baustein wird mit Lese- und Schreibrecht versehen, dann kann mit den folgenden Pragmas Variable a nur mit Schreibrecht, Variable b überhaupt nicht exportieren:
VAR
a : INT {flag noread};
b : INT {flag noread, nowrite};
END_VAR
Beide Variablen a und b werden nicht in die Symboldatei exportiert:
{flag noread, nowrite on}
VAR
a : INT;
b : INT;
END_VAR
{flag off}
Das Pragma wirkt additiv auf alle untergeordneten Variablendeklarationen.
Beispiel: (alle verwendeten Bausteine werden mit Lese- und Schreibrecht exportiert)
a : afb;
...
FUNCTION_BLOCK afB
VAR
b : bfb {flag nowrite};
c : INT;
END_VAR
...
FUNCTION_BLOCK bfB
VAR
d : INT {flag noread};
e : INT {flag nowrite};
END_VAR
"a.b.d": Wird nicht exportiert.
"a.b.e": Wird nur mit Leserecht exportiert.
"a.c": Wird mit Lese- und Schreibrecht exportiert.
Pragma für Anzeige/Nicht-Anzeige von Deklarationsteilen im Bibliotheksverwalter
Mittels der Pragmas {library public} und {library private} kann in einer in TwinCAT-SPS erstellten Bibliothek definiert werden, welche Zeilen/Zeilenteile des Deklarationsteils später bei der Verwendung der Bibliothek in einem Projekt im Bibliotheksverwalter angezeigt bzw. nicht angezeigt werden sollen. Die Darstellung des Implementationsteils bleibt davon unbeeinflusst. Damit können beispielsweise Kommentare oder bestimmte Variablendeklarationen der Bibliothek für den Benutzer unsichtbar gemacht werden. Die Pragmas gelten jeweils für den Rest derselben bzw. die nachfolgenden Zeilen, solange, bis sie durch das jeweils andere Pragma aufgehoben werden.
Syntax:
{library public} Der nachfolgende Text wird im Bibliotheksverwalter angezeigt.
{library private} Der nachfolgende Text wird nicht angezeigt.
Beispiel: Sehen Sie unten den Deklarationsteil einer Bibliothek, die in TwinCAT SPS erstellt wird. Der Kommentar "(* this is for all *)" soll nach dem Einbinden der Bibliothek im Bibliotheksverwalter angezeigt werden, "(* but this is not for all ")" dagegen nicht. Die Variablen local und in3 sollen ebenfalls nicht sichtbar sein:
{library public}
(*this is for all*)
{library private}
(*this is not for all*)
{library public}
FUNCTION afun : BOOL
VAR_INPUT
in : BOOL;
END_VAR
{library private}
VAR
local : BOOL;
END_VAR
{library public}
VAR_INPUT
in2 : BOOL;
{library private}
in3 : BOOL;
{library public}
END_VAR
Deklarationseditoren im Online Modus
Im Online Modus wird der Deklarationseditor zu einem Monitor-Fenster. In jeder Zeile steht eine Variable, gefolgt von einem Gleichheitszeichen (=) und dem Wert der Variablen. Wenn die Variable zu diesem Zeitpunkt undefiniert ist, erscheinen drei Fragezeichen (???). Bei Funktionsblöcken werden nur für geöffnete Instanzen (Befehl 'Projekt' 'Instanz öffnen') die Werte angezeigt.
Vor jeder mehrelementigen Variablen steht eine Pluszeichen. Durch das Drücken der <Eingabetaste> oder nach einem Doppelklick auf eine solche Variable klappt diese auf, im Beispiel wäre die Struktur Ampel1 aufgeklappt:
Bei einer aufgeklappten Variablen werden alle ihre Komponenten nachfolgend aufgelistet. Vor der Variablen erscheint ein Minuszeichen. Mit einem weiteren Doppelklick bzw. durch Drücken der <Eingabetaste> klappt die Variable zu und das Pluszeichen erscheint erneut.
Durch Drücken der <Eingabetaste> oder einen Doppelklick auf eine einelementige Variable öffnet den Dialog zum Schreiben einer Variablen. Hier ist es möglich, den aktuellen Wert der Variablen zu ändern. Bei boolschen Variablen erscheint kein Dialog, sie werden getoggelt.
Der neue Wert wird hinter der Variable türkisfarben in spitzen Klammern angezeigt und bleibt unverändert. Wenn der Befehl 'Online''Werte schreiben' gegeben wird, dann werden alle Variablen auf die gewählten Werte gesetzt und wieder schwarz dargestellt. Wenn der Befehl 'Online''Werte forcen' gegeben wird, dann werden alle Variablen auf die gewählten Werte gesetzt, bis der Befehl 'Forcen aufheben' erfolgt. In diesem Fall wechselt die Farbe des Force-Wertes auf rot.