Instruction List Editor

Ueberblick

Instruction List (IL) ist die assemblernahe Textsprache der IEC 61131-3 und die historisch erste der fuenf IEC-Sprachen. 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 ueber 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) haelt das Zwischenergebnis der laufenden Auswertung. Eine typische Sequenz:

  1. LD x — laedt x in den Akkumulator (CR := x)
  2. AND y — verknuepft 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 frueher dominierenden Mikrocontroller-Plattformen, fuer die die Sprache 1993 standardisiert wurde.

Wichtigste Operatoren

GruppeOperatorenWirkung
Laden / SpeichernLD, LDN, ST, STNAkkumulator setzen / nach Variable speichern (N = negiert)
Set / ResetS, RBit setzen / ruecksetzen (BOOL-Variable, falls CR = TRUE)
Bit-LogikAND, OR, XOR, NOTAkkumulator mit Operand verknuepfen
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
RueckkehrRET, RETC, RETCNPOU verlassen

Modifier

Ein Operator kann durch Suffix-Modifier verfeinert werden:

ModifierBedeutung
NNegation des Operanden (LDN x laedt NOT x)
CConditional — Operation nur, wenn CR = TRUE (JMPC label)
()Klammer-Modifier — Auswertung verzoegern, bis ) schliesst

Die Klammer-Form ermoeglicht zusammengesetzte Ausdruecke 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, aelterer ABB-/Beckhoff-Bestand).
  • Sehr knappe Logik-Bloecke — Selbsthaltungen, Verriegelungen, Edge-Conditions sind in IL oft zwei Zeilen kuerzer als in ST.

Fuer alles andere ist ST lesbarer und einfacher zu warten.

Code-Beispiel — Selbsthaltung mit Schliesser/Oeffner

Klassische Schuetz-Selbsthaltung in IL: Tastendruck start schaltet das Schuetz K1 an, der Stop-Taster stop (Oeffner, 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, fuer die IL urspruenglich entworfen wurde.

Verwandte Themen