Deklarationsregeln für Variablen/FB-Instanzen
Dieses Thema enthält folgende Informationen:
Die nachfolgend aufgeführten Deklarationsregeln gelten beim Deklarieren von Variablen
durch Einfügen und Bearbeiten einer Deklaration in einem Variablen-Arbeitsblatt.
Eine auf diese Weise deklarierte Variable/FB-Instanz kann anschließend in den Code eingefügt werden.
mit Hilfe des Dialogs 'Variable' beim Bearbeiten des Codes.
Auf diese Weise erfolgen die Deklaration und das Einfügen in einem Schritt.
Die Deklaration von Variablen erfolgt gemäß den Regeln der Norm IEC 61131-3.
Da die Deklarationen in EcoStruxure Machine Expert - Safety nicht in Form von Textblöcken eingetippt, sondern in ein Variablen-Arbeitsblatt eingegeben werden, erfolgt die Überprüfung der Deklarationsregeln und Beschränkungen automatisch durch den tabellenorientierten Editor. Syntaxfehler (wie z.B. fehlerhafte Verschachtelungen in Deklarationsblöcken oder falsche Datentypen) sowie Verstöße gegen Regeln und Beschränkungen werden auf diese Weise verhindert. Jedes eingegebene Variablenattribut wird nach Verlassen des Tabellenfeldes vom Variablenkompiler überprüft. Felder, die einen Fehler enthalten, werden rot gekennzeichnet.
Weitere Informationen
Weitere Informationen hierzu finden Sie im Thema "Variablen-Arbeitsblätter".
Die verschiedenen Variablen müssen wie folgt deklariert werden:
Lokale symbolische Variablen müssen im lokalen Variablen-Arbeitsblatt mit dem Schlüsselwort ('Verwendung') VAR deklariert werden.
Lokale Variablen können nicht mit Prozessdaten-Elementen (physikalischen Ein- und Ausgängen) verbunden sein. Dies ist nur bei globalen I/O-Variablen möglich.
Eingangsparameter von FB-POEs werden im lokalen Variablen-Arbeitsblatt mit VAR_INPUT deklariert.
Ausgangsparameter von FB-POEs werden im lokalen Variablen-Arbeitsblatt mit VAR_OUTPUT deklariert.
Beim Initialisieren von Variablen müssen die folgenden Regeln beachtet werden.
Regeln für die Initialisierung von Variablen
Die Initialisierung von Variablen ist optional. Wird kein Anfangswert angegeben, dann wird die Variable mit dem Standard-Anfangswert des jeweiligen Datentyps gemäß IEC 61131-3 initialisiert.
Anfangswerte können für lokale (symbolische) Variablen und globale Ausgangsvariablen vergeben werden.
Globale Eingangsvariablen (globale Variablen, die mit einem physikalischen Eingang verbunden sind) können nicht initialisiert werden.
Der Anfangswert muss zu dem gewählten Datentyp passen.
Für boolesche Variablen ist der Standard-Anfangswert 0 oder FALSE.
Anfangswerte für sicherheitsbezogene Variablen müssen unter Angabe des Datentyps in folgendem Format eingegeben werden: SAFEINT#Wert, SAFEBYTE#Wert, SAFEWORD#Wert, SAFEDWORD#Wert oder SAFETIME#Werts.
(Wert gibt dabei den tatsächlichen Wert an, z.B. SAFEINT#13 oder SAFETIME#1s.)
Um eine sicherheitsbezogene boolesche Variable mit FALSE zu initialisieren, geben Sie entweder SAFEBOOL#0 oder SAFEFALSE ein. Verwenden Sie entsprechend SAFEBOOL#1 oder SAFETRUE, um eine sicherheitsbezogene boolesche Variable mit TRUE zu initialisieren.
Globale Variable wirkt wie globale Konstante: Wenn eine globale symbolische Variable einen Anfangswert besitzt, dann kann diese als globale Konstante mit symbolischem Namen betrachtet werden. Die initialisierte globale symbolische Variable ist schreibgeschützt und wird vom Compiler wie eine Konstante behandelt. Infolgedessen kann sie z.B. an den Formalparameter eines Funktionsbausteins angeschlossen werden, der eine Konstante erwartet.
Lesen Sie hierzu das Thema "Konstanten: Einfügen".
Funktionsbaustein-Instanzen werden automatisch mit dem Schlüsselwort VAR in der lokalen Variablen-Deklaration derjenigen POE deklariert, in der der Funktionsbaustein aufgerufen wird. Der Variablenname repräsentiert den FB-Instanznamen und der Datentyp entspricht dem FB-Typ. Weitere Informationen hierzu finden Sie im Thema "Instanziierung von FBs".
Globale Variablen werden immer im globalen Variablen-Arbeitsblatt deklariert.
Bei globalen Variablen wird zwischen zwei Typen unterschieden:
Globale symbolische Variablen. Dabei handelt es sich, wie bei lokalen Merkervariablen, um "normale" symbolische Variablen ohne physikalische I/O-Adresse, d.h. sie sind mit keiner Geräteanschlussklemme verknüpft.
Wie lokale Variablen auch, können diese globalen Merkervariablen entweder mit Hilfe des Dialogs 'Variable' direkt in den Code eingefügt werden (die Deklaration wird dabei automatisch in das globale Variablen-Arbeitsblatt eingetragen) oder manuell im globalen Variablen-Arbeitsblatt des Projekts deklariert werden. Lesen Sie hierzu das Thema "Variablen: Einfügen und Deklarieren".
Globale I/O-Variablen. Im Gegensatz zu symbolischen Variablen sind I/O-Variablen einer physikalischen Geräteanschlussklemme, d.h. einem Prozessdaten-Element, zugeordnet. Daraus folgt: Wird eine I/O-Variable gelesen bzw. beschrieben, dann wird der Wert tatsächlich von der zugeordneten physikalischen Adresse gelesen bzw. auf diese geschrieben. In der Norm IEC 61131 werden solche Variablen als adressiert bezeichnet.
In EcoStruxure Machine Expert - Safety können I/O-Variablen nicht in derselben Weise wie symbolische Variablen angelegt werden.
Globale I/O-Variablen werden im globalen Variablen-Arbeitsblatt automatisch erzeugt, wenn Sie ein Prozessdaten-Element (Geräteanschlussklemme) aus dem 'Geräte'-Fenster in den Code ziehen. (Prozessdaten-Elemente werden zusammen mit sicherheitsbezogenen Geräteinformationen und -daten von EcoStruxure Machine Expert nach EcoStruxure Machine Expert - Safety übergeben.)
Dieses Verhalten gilt sowohl für sicherheitsbezogene als auch für Standard-Prozessdaten-Elemente.
Sowohl globale symbolische Variablen als auch I/O-Variablen können in jeder grafischen POE des Projekts verwendet werden (im Gegensatz zu lokalen Variablen, die nur in der POE gelten, in der sie deklariert sind).
HINWEIS:
Globale Variablen können nicht in der Programmiersprache ST (Strukturierter Text) verwendet werden.
Für globale symbolische Variablen gilt:
Der Kompiler meldet einen Fehler, wenn eine globale symbolische Variable
mehr als einmal geschrieben wird.
gelesen wird, bevor sie geschrieben wurde.
Der Kompiler generiert eine Meldung, wenn eine globale symbolische Variable
weder geschrieben noch gelesen wird (unbenutzte globale Merkervariable).
zwar geschrieben aber nicht gelesen wird.
innerhalb derselben POE geschrieben und gelesen wird. In diesem Fall sollte anstelle der globalen symbolischen Variablen eine lokale Variable verwendet werden.
Beim Deklarieren einer globalen symbolischen Variablen kann keine 'Verwendung' ausgewählt werden, da das Variablen-Schlüsselwort 'VAR_GLOBAL' automatisch für alle globalen Variablen gilt.
Namenskonventionen: EcoStruxure Machine Expert - Safety erlaubt die Verwendung von DIN-Bezeichnern in IEC 61131-Variablennamen.
Regeln für die Verwendung von DIN-Bezeichnern
Gemäß der Norm IEC 61131 dürfen Variablennamen aus Buchstaben, Ziffern und Unterstrichen zusammengesetzt sein. Der Bezeichner muss mit einem Buchstaben oder einem Unterstrich beginnen. Die Verwendung jedes anderen Zeichens führt zum Kompilerfehler "Unzulässiger Bezeichner".
Diese Namenskonvention wurde in EcoStruxure Machine Expert - Safety dahingehend erweitert, dass IEC 61131-Variablennamen auch DIN-Bezeichner enthalten dürfen:
Die Zeichen - + < > dürfen an jeder beliebigen Position innerhalb des Namens und als letztes Zeichen vorkommen. Sie dürfen jedoch nicht als erstes Zeichen des Variablennamens verwendet werden.
Die DIN-Bezeichner / * # und die Ziffern 0 bis 9 können an jeder beliebigen Stelle verwendet werden.
Regeln für die Verwendung von DIN-Bezeichnern in IEC 61131-Variablennamen
Variablennamen müssen mindestens ein alphabetisches Zeichen enthalten.
Variablen dürfen nicht den Namen eines IEC 61131-Datentyps haben, wie z.B. BOOL, INT, WORD, REAL, etc.
Variablennamen dürfen nicht gleich wie Literale sein. Im Code werden Literale durch Spezifizieren des Literaldatentyps, gefolgt vom Hash-Zeichen ('#') verwendet: <Literalpräfix>#<Wert>. Beispiele für Literale sind SAFEINT#5 und WORD#32767. Eine Variablendeklaration wie safeint#MyVar wäre deshalb ungültig.
Literalpräfixe unterscheiden nicht zwischen Groß- und Kleinschreibung und beinhalten die folgenden Schlüsselwörter:
BOOL, REAL, LREAL, SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE, WORD, DWORD, LWORD, TIME, T, DATE, D, TIME_OF_DAY, TOD, DATE_AND_TIME, DT, STRING, TIMEDATE48, WEIGHT, ANALOG, UNIFRACT, BIFRACT200, FIXED, BOOLEAN2, BCD4, ENUM4, SAFEBOOL, SAFEBYTE, SAFEDWORD, SAFEINT, SAFEDINT, SAFETIME, SAFEWORD
Weitere Informationen
Weitere Informationen hierzu finden Sie in den Themen "Spalten (Eigenschaften) in Variablen-Arbeitsblättern" und "IEC 61131-Implementierung - Variablen".
Sicherheitsbezogene und Standard-Variablen in FBS/KOP-Code
Sicherheitsbezogener und Standard-Code wird in EcoStruxure Machine Expert - Safety strikt unterschieden. Deshalb wird auch zwischen sicherheitsbezogenen und Standard-Variablen differenziert, oder genauer gesagt zwischen sicherheitsbezogenen und Standard-Datentypen. So ist es beispielsweise nicht möglich, eine Variable mit Standard-Datentyp an einen Formalparameter anzuschließen, der eine sicherheitsbezogene Variable erwartet.
HINWEIS:
Innerhalb eines FBS/KOP-Netzwerks können sicherheitsbezogene und Standard-Variablen gemischt werden. In solchen gemischten Netzwerken sind führende sicherheitsbezogene Signalpfade optisch hervorgehoben. Dabei müssen einige Regeln und Einschränkungen beachtet werden.
Sicherheitsbezogene und Standard-Variablen in ST
Sicherheitsbezogene und Standard-Variablen können zusammen in einer Anweisung verwendet werden, wenn bestimmte Regeln eingehalten werden. Prinzipiell ist es erlaubt, sicherheitsbezogene Variablen Standard-Variablen zuzuweisen, aber nicht umgekehrt.
Weitere Informationen
Weitere Informationen finden Sie im Thema "Mischen von sicherheitsbezogenen Variablen und Standard-Variablen in ST".
Zur einfacheren Unterscheidung werden Standard-Variablen und sicherheitsbezogene Variablen im ST-Code-Editor unterschiedlich dargestellt. Sicherheitsbezogene Variablen sind rot unterstrichen, Standard-Variablen sind nicht unterstrichen.