Pragmas verwenden
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 verschiedene Pragmas für unterschiedliche Zweicke (Beispiel: 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).
Wichtig
Die Groß-/Kleinschreibung muss eingehalten werden.
Pragma-Kategorien
Die CODESYS-Pragmas sind in folgende Kategorien aufgeteilt:
Während des Übersetzungsvorgangs können benutzerdefinierte Meldungen ausgegeben werden.
Die Kompilierung und Vorkompilierung können beeinflusst werden. Dafür stehen Pragmas für unterschiedliche Zwecke zur Verfügung, beispielsweise zur Initialisierung, zum Monitoring oder zum Hinzufügen einer Variablen zur Symbolkonfiguration.
Die Codegenerierung kann durch bedingte Anweisungen gesteuert werden. So kann beispielsweise das Verhalten einer Variablen unter bestimmten Bedingungen unterschiedlich sein.
Benutzerdefinierte Pragmas
Tipp
Im Dialog Eigenschaften (Kategorie Übersetzen) können Sie "Compiler-Defines" deklarieren, die in Pragmas abgefragt werden können.
Mögliche Einfügepositionen
Wichtig
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.
Sie können ein Pragma, das der Compiler auswerten soll, an verschiedenen Positionen einfügen.
Im Deklarationskopf eines Programmierbaustein
Sie können das gewünschte Pragma im textuellen Editor direkt als eigene Zeile eingeben, entweder als erste Zeile des Bausteins oder vor einer Variablendeklaration.
In der tabellarischen Ansicht werden Sie bei der Eingabe unterstützt. Wählen sie den Befehl Deklarationskopf editieren. Klicken Sie im Dialog auf die Schaltfläche Attribute und geben Sie im Eingabefeld das gewünschte Pragma an.
In einer globalen Variablenliste
Einschränkung bei bedingten Pragmas
Verwenden Sie Pragmas für bedingte Kompilierung nur in Implementierungen von Programmierbausteinen. In Deklarationen werden diese Pragmas nicht ausgewertet sondern ignoriert.
Beachten Sie bitte die folgende Ausnahme: Das IF-Pragma mit dem Operator project_defined
kann in Deklarationen eingefügt werden. Für weitere Informationen siehe: IF-Pragma mit project_defined (<global define>)
Strukturierter Text (ST)
Bei der Implementierungssprache ST gehört ein Pragma an eine „Anweisungsposition“. Eine gültige Position ist am Anfang der Implementierung in einer separaten Zeile. Eine weitere gültige Position ist nach einer Anweisung, deren Ende durch einen Strichpunkt „
;
” oder durch Schlüsselwörter wieEND_VAR
,END_IF
oderEND_WHILE
gekennzeichnet ist.Funktionsbausteinsprache (FUP) oder Kontaktplan (KOP)
Bei den Implementierungssprachen des FUP/KOP/AWL-Editors gehört ein Pragma an eine Position, die auch für eine Sprungmarke geeignet ist. Sie können das Pragma genauso wie eine Sprungmarke eingeben. Wählen Sie dazu den Befehl FUP/KOP/AWL → Sprungmarke einfügen. Ersetzen Sie dann den Standardtext
Label:
im Textfeld der Marke durch das gewünschte Pragma. Wenn Sie ein Pragma zusätzlich zu einer Sprungmarke verwenden wollen, tragen Sie zunächst das Pragma und dann die Sprungmarke ein.
Für falsche und richtige Positionierung eines bedingten Pragmas
PROGRAM PRG_ConditionalPragma VAR strTest : STRING := 'b'; iResult : INT := 0; END_VAR
Falsch
{IF defined(DEFINE_A)} IF strTest = 'a' THEN {ELSE} IF strTest = 'b' THEN {END_IF} iResult := {IF defined(DEFINE_B)} 12; {ELSE} 13; {END_IF} END_IF
Richtig
{IF defined(DEFINE_A)} IF strTest = 'a' THEN {IF defined(DEFINE_B)} iResult := 16#A; {ELSE} iResult := 16#AA; {END_IF} END_IF {ELSE} IF strTest = 'b' THEN {IF defined(DEFINE_B)} iResult := 16#B; {ELSE} iResult := 16#BB; {END_IF} END_IF {END_IF}
Wirkungsbereich
Abhängig vom Typ und Inhalt eines Pragmas wirkt ein Pragma auf Folgendes:
Nachfolgenden Deklarationen
Genau die nachfolgende Anweisung
Alle nachfolgenden Anweisungen, bis es durch ein entsprechenden Pragma wieder aufgehoben werden
Alle nachfolgenden Anweisungen, bis dasselbe Pragma mit anderen Parametern ausgeführt, oder das Ende des Codes erreicht ist. In diesem Kontext bezeichnet "Code" den Deklarationsteil, Implementierungsteil, die globale Variablenliste und die 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.