Pragma in CODESYS
Als Pragma gilt ein Text im Quellcode der Applikation, der in geschweiften Klammern steht. Pragmas werden verwendet, um spezielle Anweisungen im Code einzufügen, die der Compiler auswerten kann. Damit kann ein Pragma die Eigenschaften einer oder mehrerer Variablen bezüglich der Vorkompilierung oder der Kompilierung (Codegenerierung) beeinflussen. Pragmas, die der Compiler nicht kennt, überliest er wie einen Kommentar.
Der Anweisungsstring eines Pragmas kann auch mehrzeilig sein. Zur Syntax im Detail sehen Sie bitte die Beschreibungen der einzelnen CODESYS-Pragmas.
Es gibt Pragmas für unterschiedliche Effekte: Initialisierung einer Variablen, Monitoring einer Variablen, Hinzufügen einer Variablen zur Symbolkonfiguration, Erzwingen von Meldungsausgaben während des Übersetzungsvorgangs, Verhalten einer Variablen unter bestimmten Bedingungen etc.




HINWEIS

Die Groß-/Kleinschreibung muss eingehalten werden.
Beispiele
{warning 'This is not allowed'} {attribute 'obsolete' := 'datatype fb1 not valid!'} {attribute 'Test':='TestValue1; TestValue2; TestValue3'}
Mögliche Einfügepositionen




HINWEIS

Pragmas in CODESYS sind keine Eins-zu Eins-Implementierungen der C-Präprozessor-Direktiven. Sie müssen ein Pragma wie eine normale Anweisung positionieren. Sie dürfen ein Pragma nicht innerhalb eines Ausdrucks verwenden.
Ein Pragma, das der CODESYS-Compiler auswerten soll, können Sie an folgenden Positionen einfügen:
-
Im Deklarationsteil eines Programmierbausteins:
-
Im textuellen Deklarationseditor geben Sie Pragmas direkt als Zeile(n) ein, entweder am Anfang des Bausteins oder vor einer Variablendeklaration.
-
Im tabellarischen Editor geben Sie Pragmas, die oberhalb der ersten Deklarationszeile stehen sollen, im Dialog „Deklarationsteil editieren“ / „Attribute“ ein.
-
-
In einer globalen Variablenliste
-
Im Implementierungsteil eines Programmierbausteins:
-
Das Pragma muss an einer "Anweisungsposition" stehen, also am Anfang eines Programmierbausteins in einer separaten Zeile, oder nach einem "
;
" oderEND_IF
,END_WHILE
etc. -
FBD/LD/AWL-Editor: Pragmas in Netzwerken des FUP/KOP/AWL-Editors geben Sie wie eine Sprungmarke ein: Wählen Sie dazu den Befehl „FUP/KOP/AWL Sprungmarke einfügen“. Ersetzen Sie dann den Standardtext „Label:“ im Textfeld der Marke durch die entsprechende Pragmaanweisung. Wenn Sie ein Pragma zusätzlich zu einer Sprungmarke verwenden wollen, tragen Sie zunächst das Pragma und dann die Sprungmarke ein.
-
Falsche und richtige Positionierung eines bedingten Pragmas
FALSCH:
{IF defined(abc)} IF x = abc THEN {ELSE} IF x = 12 THEN {END_IF} y := {IF defined(cde)} 12; {ELSE} 13; {END_IF} END_IF
RICHTIG:
{IF defined(abc)} IF x = abc THEN {IF defined(cde)} y := 12; {ELSE} y := 13; {END_IF} END_IF {ELSE} IF x = 12 THEN {IF defined(cde)} y := 12; {ELSE} y := 13; {END_IF} END_IF {END_IF}
Im Dialog „Eigenschaften“, Kategorie „Übersetzen“ können Sie Defines angeben, die in Pragmas abgefragt werden können.
Wirkungsbereich:
Abhängig vom Typ und Inhalt eines Pragmas wirkt ein Pragma auf Folgendes:
-
die nachfolgenden Deklarationen
-
genau auf die nachfolgende Anweisung
-
auf alle nachfolgenden Anweisungen bis es mit einem entsprechenden Pragma wieder aufgehoben wird
-
auf alle nachfolgenden Anweisungen, bis dasselbe Pragma mit anderen Parametern ausgeführt, oder das Ende des Codes erreicht wird. "Code" in diesem Kontext heißt: Deklarationsteil, Implementierungsteil, Globale Variablenliste, Typdeklaration. Somit wirkt ein Pragma, das alleine in der ersten Zeile des Deklarationsteils steht und nicht durch ein weiteres abgelöst oder aufgehoben wird, auf das gesamte Objekt.
Pragma-Kategorien in CODESYS
Die CODESYS-Pragmas sind in folgende Kategorien aufgeteilt:
-
Attributpragmas: Beeinflussung der Kompilierung und der Vorkompilierung
-
Meldungspragmas: Ausgabe von benutzerdefinierten Meldungen während des Übersetzungsvorgangs
-
Bedingte Pragmas: Beeinflussung der Codegenerierung
-
Benutzerdefinierte Pragmas