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

Wichtig

Die Groß-/Kleinschreibung muss eingehalten werden.

Beispiel 17. Beispiele
{warning 'This is not allowed'}

{attribute 'obsolete' := 'datatype fb1 not valid!'}

{attribute 'Test':='TestValue1;
                    TestValue2;
                    TestValue3'}


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.

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 „;“ oder END_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.

Beispiel 18. 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}


Tipp

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