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

Ansicht · Beispielverlauf

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.MotorCurrent
Schwelle 15,8 Ajetzt · 3003420 Schnitte400
gemessen, aus dem Historian Vorhersage Unsicherheitsband

Das 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 Vorschlag

R01 · 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 Freigabe

ST020 · 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ünde

CNC03 · 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.

  1. M

    Beobachten

    unverändert

    Liest den AAS-Zwilling, zeitgewichtet. Dieselbe Quelle, aus der auch das Modell seine Merkmale zöge.

  2. +

    Adapter

    gebaut, leer

    Die 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.

  3. A

    Beurteilen und planen

    unverändert

    Aus dem Befund wird ein begrenzter Vorschlag mit vorhergesagter Wirkung. Ob der Befund aus einer Regel oder einem Modell kam, ändert daran nichts.

  4. 1

    Das Tor

    unverändert

    Grenzen, Schrittweite, Mindestkonfidenz, Beobachtungsdauer, Abstand, Wiederholungssperre. Eine YAML-Datei, die auch für Modellvorschläge gilt.

  5. 2

    Der Mensch

    unverändert

    Freigabe erforderlich. Ein Modell verschiebt diese Schwelle nicht — es müsste sie erst über Wochen bestätigter Prognosen verdienen, so wie die Regeln auch.

  6. 3

    Probelauf und Wachhund

    unverändert

    Die gemessene Wirkung entscheidet, nicht die vorhergesagte. Was weniger liefert als angekündigt, geht zurück — auch wenn ein Modell es vorgeschlagen hat.

  7. K

    Ledger

    ein Feld mehr

    Jeder 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 Repository

Drei 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 StromMittlerer Fehler80 %-BandMittelwert allein
aus2,0−3 bis +394,9
1 %6,6−11 bis +1094,8
2 %12,8−22 bis +1894,8
5 %29,7−51 bis +4394,8
10 %50,6−86 bis +7794,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 istMengeTaugt für
Verschleißverläufe
Motorstrom, Schnittzeit, Fehlschnitte je Band
laufendStandzeitprognose. Entsteht ohne Zutun, Ausgang immer bekannt.
Historisierte Kennzahlen
jede Änderung eine Zeile, seit Beginn
laufendAnomalieerkennung. Braucht keine Etiketten, nur genug Normalbetrieb.
Bewertete Versuche
Vorschlag, Prognose, gemessene Wirkung, Urteil
59Zu 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.