Worum es geht
Eine SPS-Plattform ist nur so gut wie ihre Feldbus-Anbindung. Aber jeder Bus ist anders: Modbus-TCP hat keine echte Diagnose, EtherCAT hat einen vollständig getakteten Slave-Zustandsautomat, Profibus hat seine eigenen Fault-Klassen, EthernetIP hat CIP-Connections.
Tongs löst das mit einer Plug-in-Familie: pro Protokoll ein eigener Daemon, gesteuert von anvild, mit einer einheitlichen Fault-Schicht und strukturierten Diagnose-Bits aus den Geräte-FDDs. Statt eines Mega-Drivers mit allen Protokollen drin gibt es eine modulare Komponenten-Familie.
Pro Protokoll ein Daemon
| Daemon | Protokoll | Status |
|---|---|---|
tongs-modbustcp | Modbus TCP Master + Slave-Mode | verfügbar |
tongs-modbusrtu | Modbus RTU | verfügbar |
tongs-lorawan | LoRaWAN | in Arbeit (Schwerpunkt) |
tongs-ethercat | EtherCAT-Master mit DC-Sync | Gerüst, in Arbeit |
tongs-profibus | Profibus DP/PA | Gerüst, in Arbeit |
tongs-ethernetip | EtherNet/IP CIP | Gerüst, in Arbeit |
Status aktualisiert im Oktober 2026.
Alle laufen unter dem gleichen anvild-Subprozess-Manager. Lifecycle, Logging, Auto-Restart — gemeinsam, nicht pro Protokoll neu erfunden.
Einheitliches Fault-Modell
Spec tongs-platform-v1.md §5 definiert eine gemeinsame
Fault-Stufung über alle Bridges:
| Stufe | Bedeutung |
|---|---|
OK | Gerät kommuniziert, keine Störungen |
WARN | Funktional, aber Diagnose-Bits zeigen Vor-Störung |
FAULT | Gerät kommuniziert, aber Schutzfunktion ausgelöst |
OFFLINE | Gerät antwortet nicht |
UNKNOWN | Bus-Status nicht ermittelbar (z.B. Scanner aus) |
Wird einheitlich in Studio + anvild gemeldet — egal ob das darunter Modbus, EtherCAT oder Profibus ist. Operator muss nicht für jeden Bus eine eigene Fehler-Tabelle lernen.
Aufruf via MCP: bellows.protocol_status liefert pro Segment den
aktuellen Fault-Stand inklusive Diagnose-Bits.
Diagnose-Bits — strukturiert, nicht freier Text
Bei Hersteller-Geraten (z.B. Weidmueller-Busklemmen) gibt es konkrete Diagnose-Bits in den Status-Bytes:
- Bit 0: Modul fehlt
- Bit 1: Kurzschluss am Ausgang
- Bit 2: Drahtbruch
- Bit 3: Versorgungsspannung außerhalb Spec
- …
Diese Bits stehen im FDD (Field Device Description) des Herstellers. ForgeIEC Studio:
- Importiert die FDDs (auch mit eingebettetem PDF-Datenblatt)
- Parsed die
<DiagnosticDecode>-Sektionen - Stellt pro Bit Bedeutung + Schweregrad in Studio-Diagnose-Tab dar
- Macht die aufgelösten Bits per
catalog.diag_bitsMCP-Tool abrufbar
KI-Diagnose-Loop: „Warum schaltet Motor_Bereit nicht?" → KI ruft
bellows.protocol_status + catalog.diag_bits und kann
klartext-antworten „Modul Stachelbeere meldet Drahtbruch am
Ausgang 3".
Pro Segment ein eigener Daemon-Prozess
Architektur-Vorteil: Crashed eine Bridge nicht den ganzen Master. Wenn die EtherCAT-Bridge gegen einen frischen Slave- Bug läuft und stirbt, laufen Modbus + Profibus + die PLC-Logik ungestört weiter. anvild startet den abgestürzten Bridge-Daemon automatisch neu.
Das ist anders als bei monolithischen Runtimes wo ein Treiber- Fault die ganze Maschine schlachtet.
Bus-Konfiguration in .forge
Im .forge-Projekt-Format liegen Bus-Segmente strukturiert
abgelegt:
[[bus_segments]]
name = "Modbus_HMI"
protocol = "modbustcp"
settings.host = "192.168.1.50"
settings.port = 502
[[bus_segments.devices]]
name = "Stachelbeere"
fdd_path = "catalog/weidmueller/UR20-FBC-PN-IRT-V2.fdd"
Studio rendert das als Bus-Baum, generiert Codegen + auto-rolt beim Save den passenden tongs-Bridge-Daemon ein.
IEC-Zugriff im ST-Code mit klarem 5-Level-Namespace:
anvil.<segment>.<device>.Status.<var> — z.B.
anvil.Modbus_HMI.Stachelbeere.Status.WireBreak.
Plus: Anvil ABI-Probe — kein Versions-Roulette mehr
Tongs-Bridges sprechen mit anvild über Anvil-Shared-Memory. Bei Versionsmischung zwischen anvild + Bridge konnten früher still inkonsistente Daten auftreten — Bridge schreibt eine ABI-Variante A, anvild liest Variante B, niemand bemerkt es.
Mit der ABI-Probe (commit 7653cc5 + 9b17adc) wird der
Type-Hash der SHM-Topics beim Connect verifiziert. Mismatch wirft
sofort eine Studio-Warnung mit konkretem Versions-Vergleich
— statt stiller Daten-Korruption.
Was die Commits getragen haben
83fe7d4—anvil.*Tool-Familie (4 Tools)3c61445—bellows.protocol_status+tasks.cycle_overview9cc6dcd— Force-Gate-Layer-1-3 (auch Bus-IO betreffend)5dc087c— FDD-Diagnostic-Bit-Resolver5fe1e69— Module-Picker-Filter via<ModuleProtocol>im Coupler-FDD66923df— Weidmueller-FDDs self-contained mit CDATA-PDFs + Git-LFS6774397— FDD-Editor: Diagnostics-Tab + Documents-Tab7653cc5,9b17adc— Anvil-ABI-Probe Layer 3a/3b21759e7— MCP-4a Remote-Bind macht Bus-Diagnose über Distanz möglich
Spec: documentation/architecture/tongs-platform-v1.md
bus-system-v1.md+anvil-platform-v2.md§13.
Wo Sie das nutzen
| Setup | Was Sie konfigurieren |
|---|---|
| Modbus-TCP an einer SPS | tongs-modbustcp + Gerät im Bus-Tab anlegen |
| Mehrere Protokolle gemischt | je ein tongs-* pro Protokoll, anvild orchestriert |
| Diagnose im laufenden Betrieb | bellows.protocol_status per MCP oder im Studio-Bus-Panel |
| Gerät wechseln (Stachelbeere → Birne) | FDD austauschen, regenerieren, deployen |
Wo es konkret nachzulesen ist
- Bus-Konfiguration
- MCP-Tool-Familien: anvil + bellows + bus-system
- Spec:
documentation/architecture/tongs-platform-v1.md(Source-Tree)