Standzeitprognose · trainiert und geprüft
Was ein Modell hier tun würde — und was es nicht dürfte
ZenFactory arbeitet regelbasiert. Maschinelles Lernen ist hier kein Umbau, sondern ein Stecker: die Andockstelle ist gebaut und geprüft, und seit dem 24.08.2026 steckt das erste Modell darin — zf-standzeit, trainiert auf 89 Bandleben aus dem eigenen Historian. Es schlägt nichts vor; es weiß nur früher. Diese Seite zeigt, was daran gemessen ist und was Ansicht bleibt — dazu vier Instanzen, die auch einem Modell gegenüber Nein sagen können, ohne dass eine Zeile daran geändert würde.
Die Ansicht
Gezeigt an der Bandsäge im Zuschnitt, weil dort der interessanteste Fall liegt: Diese Maschine hat keine Stellgröße. Ein Modell kann hier nichts verstellen — es kann nur früher wissen, was ohnehin passieren wird.
Werk1 · Zuschnitt · Sägeband
Standzeit-Vorhersage
Schnitte seit Bandwechsel
300
von 380 nominell — Standzeit laut Typenschild
Motorstrom
15,3 A
frisches Band 11,5 A · Schwelle 15,8 A
Wechsel voraussichtlich in
42 ± 12
Schnitten, rund 32 min Anlagenzeit
Modellgüte
± 7,9
Schnitte — die Auflösung der Leitung. Gemessen wurden 0,9; siehe unten, warum die größere Zahl die ehrliche ist.
Motorstrom über die Standzeit des Bandes
SAEGE01 · OperationalData.MotorCurrentDas Modell liest nichts, was nicht ohnehin im Zwilling steht: Motorstrom, Schnittzeit, Restlaufzeitanzeige, Fehlschnittrate. Der Nutzen ist nicht die Kurve, sondern der Vorlauf — ein Bandwechsel dauert eine Viertelstunde, und geplant kostet er weniger als überrascht.
Beobachtung ohne Regel
kein VorschlagR01 · Aufheizphase 9 % länger als in den letzten 40 vergleichbaren Chargen, bei unverändertem Sollwert.
- Erwartet
- 18,4 min
- Gemessen
- 20,1 min
- Außerhalb seit
- 6 Chargen
Kein Regelwerk deckt das ab. Deshalb steht es als Beobachtung für die Instandhaltung — und nicht als Vorschlag im Regelkreis.
Modellkarte
trainiert- Name
- zf-standzeit
- Fassung
- 0.1.0
- Merkmal
- Motorstrom, sonst nichts
- Gelernt an
- 89 Bändern · 4.854 Beispiele
- Geprüft an
- 30 zurückgehaltenen Bändern
- Mittlerer Fehler
- 0,9 Schnitte
- Auflösung der Leitung
- 7,9 Schnitte
Kein Platzhalter mehr: die Werte stehen in ml/zf-standzeit.json und stammen aus dem Lauf vom 24.08.2026. Fassung und Gütemaß gehen als Herkunft in dieselbe Kette wie jeder Eingriff — sonst ließe sich später nicht sagen, welcher Stand eine Entscheidung getragen hat.
Vorschlag aus dem Modell
wartet auf FreigabeST020 · Vorschub
0,96 → 1,02
- Prognose
- +9,4 Teile/h
- Rauschband
- ± 6,1 Teile/h
- Tor
- angenommen
Vom Modell erzeugt, aber im selben Format wie ein Vorschlag aus dem Regelwerk: begrenzter Schritt, Prognose als Zahl, Probelauf danach.
Vom Tor abgelehnt
2 GründeCNC03 · Vorschub
1,00 → 1,11
- Schrittweite
- 0,11 > 0,08
- Letzte Änderung
- vor 9 min
- Tor
- abgelehnt
Das Tor prüft die Herkunft eines Vorschlags nicht. Ein Modell bekommt dieselben Grenzen wie eine Regel — und dieselbe Begründung, wenn es sie überschreitet.
Wo das Modell andockt
Das Modell ersetzt nichts. Es tritt neben das Regelwerk und erzeugt dieselbe Art von Befund — alles danach bleibt, wie es ist. Die Dose dafür ist gebaut; was fehlt, ist der Stecker.
Das ist die eigentliche Aussage: Der Wert der bestehenden Architektur liegt darin, dass sie einer lernenden Komponente nichts glauben muss. Prognose, Tor, Freigabe, Probelauf, Wachhund und Ledger sind bereits da — und sie fragen nicht, woher ein Vorschlag kommt. Seit dieser Fassung steht das nicht mehr nur hier, sondern in loop/adapter.py.
- M
Beobachten
unverändertLiest den AAS-Zwilling, zeitgewichtet. Dieselbe Quelle, aus der auch das Modell seine Merkmale zöge.
- +
Adapter
gebaut, leerDie Andockstelle gibt es: ein Adapter ist alles, was beurteile(Beobachtung, Schwellen) beherrscht und einen Befund zurückgibt oder None. Ein Modell wäre ein Dienst, der genau das bedient — er schreibt nirgendwohin und ruft nichts auf. Eingehängt wird er in loop/analyze.py, wo heute schon das Regelwerk gewählt wird.
- A
Beurteilen und planen
unverändertAus dem Befund wird ein begrenzter Vorschlag mit vorhergesagter Wirkung. Ob der Befund aus einer Regel oder einem Modell kam, ändert daran nichts.
- 1
Das Tor
unverändertGrenzen, Schrittweite, Mindestkonfidenz, Beobachtungsdauer, Abstand, Wiederholungssperre. Eine YAML-Datei, die auch für Modellvorschläge gilt.
- 2
Der Mensch
unverändertFreigabe erforderlich. Ein Modell verschiebt diese Schwelle nicht — es müsste sie erst über Wochen bestätigter Prognosen verdienen, so wie die Regeln auch.
- 3
Probelauf und Wachhund
unverändertDie gemessene Wirkung entscheidet, nicht die vorhergesagte. Was weniger liefert als angekündigt, geht zurück — auch wenn ein Modell es vorgeschlagen hat.
- K
Ledger
ein Feld mehrJeder Vorschlag trägt seine Herkunft in der Evidenz: regel oder name@fassung des Adapters. Geschrieben wird sie vom Kreis, nicht vom Adapter — wer seine eigene Herkunft aufschreiben darf, schreibt irgendwann die falsche hin. Das ist die einzige Änderung an der Nachweiskette, und sie ist der Grund, warum sich später sagen lässt, welche Fassung wofür verantwortlich war.
Der Vertrag
im RepositoryDrei Sätze, und sie stehen als Code da, nicht als Absicht: Ein Adapter beantwortet eine Beobachtung mit einem Befund — oder mit None, und dann antwortet die Regel. Fällt er aus, kostet das einen Takt und nicht die Anlage. Und er bekommt keine Sonderrechte: sein Befund geht durch dasselbe Tor, dieselbe Freigabe und denselben Probelauf.
# loop/adapter.py — was ein Adapter können muss class Befundgeber(Protocol): name: str fassung: str def beurteile(b, schwellen) -> Befund | None: ... # loop/analyze.py — die Reihenfolge ist die ganze Zusage befund = adapter.beurteile(b, schwellen) # gibt er None zurück oder fällt aus: befund = regelwerk.beurteile(b, schwellen) # dann antwortet die Regel # einstecken, ohne eine Zeile zu ändern ZENFACTORY_ADAPTER=LINIE_A=pruefstecker # und nachweisen, dass die Dose trägt .venv/bin/python -m pytest tests/test_loop.py -k adapter 9 passed
Der Prüfstecker ist kein Modell und gibt sich auch nicht als eines aus. Er ist das Gegenstück zum Prüfstecker in einer Netzwerkbuchse: er reicht das Urteil der Anlagenregel unter eigenem Namen und mit gedämpfter Konfidenz zurück. Damit lässt sich im Termin zeigen, dass ein Befund durch den Adapter kommt, mit seiner Herkunft im Ledger steht und vom Tor behandelt wird wie jeder andere — ohne dass dafür irgendwo eine Physik erfunden werden müsste.
Was das Modell heute wirklich sagt
Seit dem 24.08.2026 gibt es das Modell. Es ist kein neuronales Netz, es braucht keine GPU und keine einzige zusätzliche Bibliothek — es ist eine Gerade durch eine Punktwolke, gerechnet in reinem Python.
# .venv/bin/python ml/train_standzeit.py --tage 2 Modell Restschnitte = 1286,9 - 78,6 · Strom[A] Gelernt an 89 Bändern, 4.854 Beispielen Geprüft an 30 zurückgehaltenen Bändern, 1.647 Beispielen Fehler 0,9 Schnitte im Mittel (Mittelwert allein: 96,2) Auflösung 7,9 Schnitte je 0,1-A-Schritt — die Grenze der Leitung # .venv/bin/python ml/train_standzeit.py --jetzt 20:59:26 Motorstrom 13,3 A Restlaufzeit 241 Schnitte Modell zf-standzeit@0.1.0
Ein Merkmal
Nur der Motorstrom
Verschleiß und Restlaufzeit stehen in der Simulation zur Verfügung — das Modell bekommt beide nie zu sehen. An einer Säge von 1998 gibt es sie nicht, und ein Modell, das im Termin nur gut aussieht, weil es die Antwort schon kennt, ist wertlos.
Die Etiketten
Kommen von allein
Jeder Bandwechsel beschriftet rückwirkend seine eigene Vorgeschichte: bei Schnitt 300 waren es noch 80 bis zum Ende, und das steht hinterher fest. 119 abgeschlossene Bandleben in 34 Stunden — das Teuerste an einem KI-Projekt entfällt hier.
Die Grenze
7,9 Schnitte je Schritt
Der Strom kommt in Schritten von 0,1 A über Modbus. Ein Schritt sind 7,9 Schnitte — besser als das kann diese Vorhersage an dieser Leitung nie werden, gleich welches Verfahren dahintersteht.
Eine Einordnung, die sonst niemand mitliefert: Die 0,9 Schnitte gelten für ein sauberes Signal. Auf der Modellanlage folgt der Strom exakt dem Verschleiß — ohne Streuung durch Material, Vorschub oder Temperatur. Wie viel davon an einer Maschine mit realem Rauschen übrig bleibt, haben wir gemessen statt offengelassen:
Was bleibt, wenn das Signal streut
Die Säge kann Streuung auf den Motorstrom legen — zwei Drittel als Materialcharge, die über sechzig Schnitte trägt, ein Drittel als Messrauschen. Ab Werk ist das ausgeschaltet, damit die übrigen Zahlen dieser Seiten gegen die reine Formel stimmen. Zugeschaltet wird auf jeder Stufe dasselbe Modell neu trainiert und an zurückgehaltenen Bändern geprüft:
| Streuung auf dem Strom | Mittlerer Fehler | 80 %-Band | Mittelwert allein |
|---|---|---|---|
| aus | 2,0 | −3 bis +3 | 94,9 |
| 1 % | 6,6 | −11 bis +10 | 94,8 |
| 2 % | 12,8 | −22 bis +18 | 94,8 |
| 5 % | 29,7 | −51 bis +43 | 94,8 |
| 10 % | 50,6 | −86 bis +77 | 94,8 |
Alles in Schnitten, 28 Bandleben je Stufe, Strom auf 0,1 A gerundet. Nachzurechnen mit scripts/sweep_streuung.py.
Fünf Prozent Streuung sind an einer Bandsäge keine große Zahl — eine andere Materialcharge verschiebt den Strom leicht um ein Drittel Ampere. Dort liegt die Vorhersage dann auf ±30 Schnitte statt auf ±1. Das ist immer noch dreimal besser als der Mittelwert, aber es ist kein Termin mehr, den man auf den Tag plant — sondern eine Schicht. Diese Zahl gehört in ein Angebot, nicht die 0,9.
Woher die Daten kämen
Für eine Standzeitprognose reicht der Historian: Verschleißverläufe entstehen von allein, jeder Bandwechsel ist ein Beispiel mit bekanntem Ausgang. Für ein Modell, das Stellgrößen vorschlägt, sieht es anders aus. Dessen Etiketten wären die Urteile aus dem Nachweisbuch — und davon gibt es bisher zu wenige.
| Was da ist | Menge | Taugt für |
|---|---|---|
| Verschleißverläufe Motorstrom, Schnittzeit, Fehlschnitte je Band | laufend | Standzeitprognose. Entsteht ohne Zutun, Ausgang immer bekannt. |
| Historisierte Kennzahlen jede Änderung eine Zeile, seit Beginn | laufend | Anomalieerkennung. Braucht keine Etiketten, nur genug Normalbetrieb. |
| Bewertete Versuche Vorschlag, Prognose, gemessene Wirkung, Urteil | 59 | Zu wenig für ein Stellgrößenmodell. 15 bestätigt, 44 zurückgenommen — als Trainingsmenge sind das Einzelfälle. |
Voraussetzung 1
Wirkung muss sich vom Rauschen trennen lassen
Heute schwankt die Ausbringung bei unveränderter Stellgröße um ±14 % an der Linie, ±25 % an der Abfüllung, ±77 % an den Reaktoren. Ein Modell lernt darauf zuerst das Rauschen. Der Paarvergleich gegen eine unveränderte Schwestereinheit ist deshalb kein Nebenprojekt, sondern die Bedingung.
Voraussetzung 2
Genug Versuche, und zwar aus Betrieb
59 bewertete Versuche sind eine gute Erfolgsbilanz und eine schlechte Trainingsmenge. Sie wachsen nur im laufenden Betrieb — und jeder einzelne kostet einen Probelauf von zwei bis sechs Stunden Anlagenzeit.
Voraussetzung 3
Rückfall auf die Regel
Fällt der Modelldienst aus oder liefert er Unsinn, muss der Kreis weiterlaufen — mit dem Regelwerk, das es ohnehin gibt. Ein Modell darf eine Ergänzung sein, nicht eine Abhängigkeit. Das ist die einzige der vier Voraussetzungen, die schon eingelöst ist: Ausfall, Schweigen und Unsinn eines Adapters sind je ein Test, und alle drei enden beim Regelwerk.
Reihenfolge
Erst dort, wo niemand etwas verstellt
Standzeit und Anomalie sind reine Beobachtung: falsch liegen kostet Aufmerksamkeit, nicht Ausschuss. Der Einstieg gehört dorthin — und nicht an die Stellgröße einer laufenden Anlage.
Der Stand in drei Sätzen. Die Andockstelle ist gebaut und abgesichert: Vertrag, Rückfall auf die Regel, Herkunft im Ledger, dazu Tests für Ausfall, Schweigen und Falschantwort. Das Modell ist trainiert und trifft die Physik der Säge; es liefert Befunde für die Instandhaltung und verstellt nichts, weil diese Maschine keine Stellgröße hat. Gelernt hat es auf der Modellanlage — beim Einsatz an Ihrer Maschine wird auf Ihren Daten neu trainiert, und die Messung dazu läuft genauso ab wie hier.