IEC-Standard-Library als Lern-Referenz mit LLM-Auto-Fix
Worum es geht
PLC-Programmierer haben es bis heute mit zwei sehr unterschiedlichen
Lernpfaden zu tun. Anfaenger wollen verstehen wie ein Timer
ueberhaupt funktioniert (was ist IN, was ist PT, warum muss
ich eine Instanz deklarieren?). Profis wollen die exakte
Spec-Konformitaet nachschlagen (welche Operatoren akzeptiert
matiec? Wie verhaelt sich MOD bei negativen Operanden?). Und
ein LLM-Assistent will eine Compiler-Fehlermeldung in eine
ausfuehrbare Korrektur uebersetzen ohne zu raten.
Auf forgeiec.io gibt es jetzt eine IEC 61131-3 Reference, die alle drei Zielgruppen parallel bedient.
Was bisher live ist
Erste Welle, Stand 2026-05-14:
- Strukturierter Aufbau: 3 Sprachfamilien als Top-Level (Textual — ST + IL, Graphical — LD + FBD, Structured — SFC) plus Common Elements und Standard Library.
- ST Control Flow voll dokumentiert:
IF/ELSIF/ELSE,CASE. - Function & FB calls mit zwei Tiefenartikeln: FB-Instanz vs. Function-Call und Positional vs. Named Parameters.
- Standard Library: erster vollstaendiger Funktionsbaustein TON — Timer-On-Delay mit Pin-Layout, Beispielen, Semantik und Reihe von Auto-Fix-Eintraegen.
- Literals: Integer & Hexadecimal inklusive der zwei matiec-Quirks die uns am 2026-05-14 in der Ackersteuerung den Tag gekostet haben.
Das Auto-Fix-Block-Schema
Jede Konstrukt-Seite traegt im Frontmatter einen
llm_signals[]-Block. Format:
llm_signals:
- error_pattern: "<substring oder regex aus dem Compiler-stderr>"
where: FStCompiler | matiec | gcc | linker | runtime
diagnosis: "<warum dieser Fehler feuert>"
fix_strategy: "<was zu tun ist>"
fix_example: |
(* before *) ...
(* after *) ...
Ein konsumierender LLM (der ForgeIEC-MCP-Tool forge.help_for,
der Chat-Tab-Assistent oder ein externes IDE-Plug-in) walked
die Pages, sammelt die error_pattern-Strings und matched gegen
die Live-Compiler-Ausgabe. Match → die Page’s fix_strategy +
fix_example ist die actionable Antwort. Damit wird aus
„Fehler XYZ in POU PLC_PRG, Zeile 17" eine konkrete
set_text_body-Operation — ohne Raten.
Das where-Feld constraint den Matcher auf eine Compiler-
Schicht (lokaler ST-Frontend, matiec, g++ auf der PLC, Linker,
Runtime). Damit kann derselbe Konstrukt mehrfach auftauchen mit
verschiedenen Fix-Strategien je nachdem, wo der Fehler feuert.
Echte Quirks aus echten Projekten
Die ersten neun dokumentierten error_pattern-Eintraege kommen
alle aus dem Ackersteuerung-Cleanup vom 2026-05-14 — nichts
ist erfunden. Beispiele:
Unexpected token: '01'bei16#xxinCASE-Labels — matiec-Lexer parst16#als Type-Prefix und scheitert an den Hex-Ziffern. Workaround: dezimale Labels.'BYTE' has no member named 'BYTE'beim g++-Compile auf der PLC — matiec emittiertdata__->BYTEstatt einer Literal-Konversion fuerSHL(BYTE#1, …). Workaround: vorberechnen oderINT_TO_BYTE(1)benutzen.is a Function Block — declare instance first— der Klassiker fuer LLMs, dieTON(IN:=x, PT:=t)direkt aufrufen wollen. Fix: erst Instanz deklarieren, dann die Instanz aufrufen.
Was als naechstes kommt
Der Reference-Sprint laeuft ueber mehrere Sessions. Roadmap:
- Weitere Standard-FBs (CTU, R_TRIG, RS, TOF, TP, …) nach dem TON-Muster.
- Operatoren-Tabelle (arithmetic / bitwise / comparison / assignment + precedence).
- Iteration (
FOR,WHILE,REPEAT). - Common Elements: Datentypen + Variablen-Scopes mit ForgeIEC’s Anvil/Bellows/GVL-Spezifika.
- Variables & References: Anvil/Bellows-Namespacing, Pool-Resolver-Regeln.
Wenn dir ein Konstrukt fehlt, das du gerade brauchst — sag Bescheid und es springt in die Prio-Liste.