Skip to main content

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:

  • Meldungspragmas

    Während des Übersetzungsvorgangs können benutzerdefinierte Meldungen ausgegeben werden.

  • Attributpragmas

    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.

  • Bedingte Pragmas

    Die Codegenerierung kann durch bedingte Anweisungen gesteuert werden. So kann beispielsweise das Verhalten einer Variablen unter bestimmten Bedingungen unterschiedlich sein.

  • Region-Pragma

  • Pragmas in Testbausteinen

  • 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.

. In der Deklaration
  • 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>)

. In der Implementierung eines Programmierbausteins
  • 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 wie END_VAR, END_IF oder END_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/AWLSprungmarke 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.

Beispiel 17. Beispiel

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.