Instruction List Editor

Abgekündigt

AWL (Anweisungsliste) ist nicht mehr Teil der aktuellen Ausgabe der IEC 61131-3 und abgekündigt; sie bräuchte außerdem einen eigenen Übersetzungsweg nach Assembler. In ForgeIEC wird IL nicht weiterentwickelt und nicht übersetzt. Für lauffähige Programme nutzen Sie Strukturierten Text (ST). Siehe auch die Roadmap.

Überblick

Instruction List (IL) ist die assemblernahe Textsprache der IEC 61131-3 und die historisch erste ihrer Sprachen. AWL (Anweisungsliste) wurde mit der dritten Ausgabe der IEC 61131-3 (2013) abgekündigt und ist in der aktuellen Ausgabe, IEC 61131-3:2025 (erschienen im Mai 2025), nicht mehr enthalten. ForgeIEC entwickelt sie nicht; sie bräuchte außerdem einen eigenen Übersetzungsweg nach Assembler. Programme bestehen aus einer Folge von Instruktionen, die ein einzelnes internes Akkumulator-Register — das Current Result (CR) — manipulieren. Jede Zeile ist eine Anweisung der Form

[Label:] Operator [Modifier] [Operand] (* Kommentar *)

und liest oder schreibt entweder den Akkumulator selbst oder eine externe Variable.

In ForgeIEC wird IL über den FIlEditor editiert — Layout und Tooling sind analog zum ST-Editor aufgebaut.

Editor-Layout

+----------------------------------------+
| Variablentabelle                       |  <- FVariablesPanel
| (VAR/VAR_INPUT/VAR_OUTPUT)             |
+========================================+  <- QSplitter (vertikal)
| Code-Bereich                           |  <- FStCodeEdit
| (tree-sitter-il grammar) |
+----------------------------------------+
BereichInhalt
Variablentabelle (oben)Deklarationen mit Name, Typ, Initialwert, Adresse, Kommentar — synchron zum VAR ... END_VAR-Block.
Code-Bereich (unten)IL-Quelltext mit Tree-Sitter-Highlighting (tree-sitter-il-Grammatik).
Search Bar (Ctrl-F / Ctrl-H)Such- und Ersetzleiste.

Online-Mode + Inline-Wert-Overlay funktionieren identisch zum ST-Editor.

Akkumulator-Modell

Der Akkumulator (CR) hält das Zwischenergebnis der laufenden Auswertung. Eine typische Sequenz:

  1. LD x — lädt x in den Akkumulator (CR := x)
  2. AND y — verknüpft den Akkumulator mit y (CR := CR AND y)
  3. ST z — speichert den Akkumulator nach z (z := CR)

Damit ist IL eine stack-freie, ein-Register-Maschine — sehr nahe an den früher dominierenden Mikrocontroller-Plattformen, für die die Sprache 1993 standardisiert wurde.

Wichtigste Operatoren

GruppeOperatorenWirkung
Laden / SpeichernLD, LDN, ST, STNAkkumulator setzen / nach Variable speichern (N = negiert)
Set / ResetS, RBit setzen / rücksetzen (BOOL-Variable, falls CR = TRUE)
Bit-LogikAND, OR, XOR, NOTAkkumulator mit Operand verknüpfen
ArithmetikADD, SUB, MUL, DIV, MODAkkumulator + Operand → Akkumulator
VergleichGT, GE, EQ, NE, LE, LTVergleichsergebnis nach CR
SprungJMP, JMPC, JMPCNSprung zu Label (C = wenn CR = TRUE)
AufrufCAL, CALC, CALCNFunktionsblock-Instanz aufrufen
RückkehrRET, RETC, RETCNPOU verlassen

Modifier

Ein Operator kann durch Suffix-Modifier verfeinert werden:

ModifierBedeutung
NNegation des Operanden (LDN x lädt NOT x)
CConditional — Operation nur, wenn CR = TRUE (JMPC label)
(…)Klammer-Modifier — Auswertung verzögern, bis ) schließt

Die Klammer-Form ermöglicht zusammengesetzte Ausdrücke ohne Zwischen-Variablen:

LD   a
AND( b
OR   c
)
ST   result            (* result := a AND (b OR c) *)

Wann IL statt ST?

ST ist heute die Default-Wahl. IL bleibt sinnvoll, wenn:

  • Mikrocontroller-Performance den Ausschlag gibt — IL bildet sich in den meisten matiec-Backends 1:1 auf Maschinen-Befehle ab, ohne Zwischen-Optimierungen.
  • Altsysteme kompatibel zu pflegen sind (S5/S7-AWL-portierte Logik, älterer ABB-/Beckhoff-Bestand).
  • Sehr knappe Logik-Blöcke — Selbsthaltungen, Verriegelungen, Edge-Conditions sind in IL oft zwei Zeilen kürzer als in ST.

Für alles andere ist ST lesbarer und einfacher zu warten.

Code-Beispiel — Selbsthaltung mit Schließer/Öffner

Klassische Schütz-Selbsthaltung in IL: Tastendruck start schaltet das Schütz K1 an, der Stop-Taster stop (Öffner, low-aktiv) schaltet ab. Logik:

K1 := (start OR K1) AND NOT stop

In IL:

PROGRAM Selbsthaltung
VAR
    start  AT %IX0.0 : BOOL;       (* Schliesser-Taster *)
    stop   AT %IX0.1 : BOOL;       (* Oeffner-Taster, low-aktiv *)
    K1     AT %QX0.0 : BOOL;       (* Schuetz *)
END_VAR

    LD    start
    OR    K1                    (* CR := start OR K1 *)
    ANDN  stop                  (* CR := CR AND NOT stop *)
    ST    K1                    (* K1 := CR *)
END_PROGRAM

Vier Instruktionen, ein Register, kein temp-Speicher. Genau die Konstruktionen, für die IL ursprünglich entworfen wurde.

Verwandte Themen