Worum es geht
PLC-Programmierer haben es bis heute mit zwei sehr unterschiedlichen
Lernpfaden zu tun. Anfänger wollen verstehen wie ein Timer
überhaupt funktioniert (was ist IN, was ist PT, warum muss
ich eine Instanz deklarieren?). Profis wollen die exakte
Spec-Konformität nachschlagen (welche Operatoren akzeptiert
matiec? Wie verhält sich MOD bei negativen Operanden?). Und
ein LLM-Assistent will eine Compiler-Fehlermeldung in eine
ausführbare Korrektur übersetzen 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 vollständiger Funktionsbaustein TON — Timer-On-Delay mit Pin-Layout, Beispielen, Semantik und Reihe von Auto-Fix-Einträgen.
- 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 trägt 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-Einträge 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 fürSHL(BYTE#1, …). Workaround: vorberechnen oderINT_TO_BYTE(1)benutzen.is a Function Block — declare instance first— der Klassiker für LLMs, dieTON(IN:=x, PT:=t)direkt aufrufen wollen. Fix: erst Instanz deklarieren, dann die Instanz aufrufen.
Was als nächstes kommt
Der Reference-Sprint läuft über 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.