Zum Inhalt

Zustandsautomaten der TerminalSchleiferei

Die TerminalSchleiferei verwaltet vier miteinander verbundene Lebenszyklen: den Vorgang, die Rückmeldung einer Person, die Equipmentgruppe und das einzelne Equipment. Jeder Lebenszyklus hat eigene Zustände. Eine Benutzeraktion kann mehrere Datensätze verändern, ohne dass alle denselben Status annehmen.

Diese Seite beschreibt die im Code beobachteten Übergänge und ihre Auswirkungen auf die Datenbank. Die Diagramme zeigen den vorgesehenen Ablauf; relevante Fehlerpfade und Einschränkungen stehen jeweils darunter.

Überblick

Objekt Gespeicherte Zustände Wesentliche Datenbankeinträge
Vorgang Geplant, Aktiv, Pausiert, Abgeschlossen _VORG, _VORGPARA
Rückmeldung einer Person Offen oder Geschlossen, aus Ende abgeleitet _RUECKVORG
Equipmentgruppe InBau, Bereit, Eingebaut, Ausgebaut, Zerlegt _EQGRKOPF, _EQGREH
Einzelnes Equipment Neu, Gewartet, Eingebaut, Ausgebaut; weitere Enum-Werte siehe unten Equipmentdatensatz, _EQGREH, _EQUIP_HIST

Vorgang

Ein Vorgang beginnt nach dem Anlegen mit dem Status Geplant. Sobald eine Person ihn startet, wechselt er zu Aktiv. Eine Pause beendet die laufende Arbeitsphase und setzt den Status Pausiert. Anschließend kann der Vorgang erneut gestartet werden. Der Abschluss führt zu Abgeschlossen.

stateDiagram-v2
    [*] --> Geplant: Anlegen
    Geplant --> Aktiv: Starten
    Aktiv --> Pausiert: Pausieren
    Pausiert --> Aktiv: Erneut starten
    Aktiv --> Abgeschlossen: Beenden
    Abgeschlossen --> [*]

Bedeutung der Zustände

Zustand Bedeutung
Geplant Der Datensatz ist angelegt; eine laufende Arbeitsphase ist noch nicht gestartet.
Aktiv Der Vorgang wurde gestartet. Im normalen Ablauf gibt es dazu eine offene Rückmeldung.
Pausiert Die aktuelle Rückmeldung wurde geschlossen; der Vorgang kann später fortgesetzt werden.
Abgeschlossen Der Vorgang ist in diesem Ablauf beendet.

Aktionen und Datenbankwirkung

Aktion Wirkung
Vorgang anlegen Ein neuer Eintrag in _VORG mit Status Geplant entsteht. Vorlagenparameter werden als _VORGPARA gespeichert. Je nach Vorgangsart entstehen weitere Zuordnungen zu Equipment oder einer Equipmentgruppe.
Vorgang starten Der Dialog sucht die Person anhand der Kartennummer. Bei Erfolg setzt er _VORG.Status auf Aktiv und versucht anschließend, eine offene Rückmeldung in _RUECKVORG anzulegen.
Vorgang pausieren Die offene Rückmeldung erhält eine Endzeit. Bei erfolgreichem Abschluss setzt der Code _VORG.Status auf Pausiert und speichert Vorgangsparameter sowie vorhandene Durchmesserdaten.
Vorgang erneut starten _VORG.Status wird wieder Aktiv. Eine neue Rückmeldung mit eigener ID entsteht; die vorherige bleibt geschlossen.
Vorgang beenden Der Code ruft zuerst die Pausenlogik auf und setzt danach _VORG.Status auf Abgeschlossen. Beim normalen Vorgang aktualisiert er zusätzlich Daten der zugeordneten Walze oder Schere.

Der Enum VorgangStatus enthält auch Nebenzeit. Der Dialog für eine neue Nebenzeit speichert den Eintrag in diesem Ablauf jedoch zunächst als Geplant; ein Übergang zu Nebenzeit ist hier nicht implementiert.

Wichtig: Der Pfeil Aktiv → Abgeschlossen stellt die eine Benutzeraktion „Beenden“ dar. Intern wird vor dem Abschluss kurz Pausiert gespeichert, weil die Beenden-Funktion zuerst die Pausenfunktion aufruft.

Rückmeldung einer Person

Eine Rückmeldung beschreibt einen zusammenhängenden Arbeitszeitraum einer Person an einem Vorgang. Ihr Zustand steht nicht in einem Status-Enum. Stattdessen entscheidet das Feld Ende: null bedeutet Offen, eine gesetzte Endzeit bedeutet Geschlossen.

stateDiagram-v2
    [*] --> Offen: Vorgang starten
    Offen --> Geschlossen: Pausieren oder Beenden
    Geschlossen --> [*]

Beim Start wird ein neuer _RUECKVORG-Eintrag mit VorgangId, PersonId, Start und Ende = null gespeichert. Beim Pausieren oder Beenden setzt BeendeVorgangRückmeldungAsync das Feld Ende auf die aktuelle Zeit. Die Spalte Dauer wird aus Start und Ende beziehungsweise bei offenen Einträgen aus der aktuellen Zeit berechnet.

Eine geschlossene Rückmeldung wird nicht wieder geöffnet. Startet jemand einen pausierten Vorgang erneut, wird ein neuer Datensatz angelegt. Das kann dieselbe oder eine andere Person sein. Das Repository verweigert einen weiteren offenen Eintrag, wenn für den Vorgang bereits eine offene Rückmeldung vorhanden ist.

Beispiel: Arbeitet Tibet zuerst zwei Stunden, pausiert und übernimmt David später, bestehen danach zwei Rückmeldungen mit unterschiedlichen PersonId-Werten und eigenen Zeiträumen. Der Vorgang selbst bleibt derselbe.

Equipmentgruppe

Die Equipmentgruppe besitzt einen eigenen Status. Beim Anlegen eines Umlagervorgangs entsteht eine Gruppe in InBau. Ein Abschluss setzt diese Gruppe auf Bereit. Einbau und Ausbau am Arbeitsplatz verändern später den Gruppenstatus unabhängig vom Status des ursprünglichen Vorgangs.

stateDiagram-v2
    [*] --> InBau: Gruppe anlegen
    InBau --> Bereit: Umlagervorgang beenden
    Bereit --> Eingebaut: Baugruppe anmelden
    Eingebaut --> Ausgebaut: Baugruppe abmelden
    Ausgebaut --> Eingebaut: Erneut anmelden
    Bereit --> Zerlegt: Als Vorlage kopieren
    Ausgebaut --> Zerlegt: Als Vorlage kopieren
    InBau --> Zerlegt: Als Vorlage kopieren

Bedeutung der Zustände

Zustand Bedeutung
InBau Die Gruppe wurde angelegt oder wird im Umlagervorgang zusammengestellt.
Bereit Der Umlagervorgang ist abgeschlossen; die Gruppe ist noch nicht am Arbeitsplatz eingebaut.
Eingebaut Die Gruppe wurde an einem Arbeitsplatz angemeldet.
Ausgebaut Die Gruppe wurde vom Arbeitsplatz abgemeldet, aber nicht zerlegt.
Zerlegt Die bisherige Gruppe wurde beim Erstellen einer neuen Gruppe als Vorlage verwendet.

Aktionen und Datenbankwirkung

Aktion Wirkung
Neuen Umlagervorgang anlegen Ein neuer _EQGRKOPF mit Status InBau und Bezug zum Vorgang entsteht.
Umlagervorgang starten oder pausieren Die Gruppe bleibt beziehungsweise wird InBau. Das Pausieren ändert den Gruppenstatus nicht zu Bereit.
Umlagervorgang beenden Der Vorgang wird Abgeschlossen und die Gruppe wird Bereit.
Gruppe anmelden Eine Gruppe in Bereit oder Ausgebaut wird Eingebaut.
Gruppe abmelden Eine eingebaute Gruppe wird Ausgebaut.
Bestehende Gruppe kopieren Der alte _EQGRKOPF wird Zerlegt. Ein neuer _EQGRKOPF mit eigener ID entsteht in InBau; die _EQGREH-Einheiten werden in ihn übernommen.

Beim Kopieren gibt es keinen Übergang desselben Datensatzes von Zerlegt zurück nach InBau. Es handelt sich um zwei Gruppen. Der Auswahldialog sperrt nur Gruppen mit Status Eingebaut und filtert Zerlegt aus der Liste; dadurch kann derzeit auch eine Gruppe in InBau als Vorlage gewählt und auf Zerlegt gesetzt werden. Die Aktionen zum Kopieren protokollieren außerdem die Übernahme von Equipment in _EQUIP_HIST.

Einzelnes Equipment

Der Status eines einzelnen Equipments gehört zum Equipmentdatensatz und ist vom Status seiner Gruppe zu unterscheiden. In der Umlagerbearbeitung ändert er sich unmittelbar beim Hinzufügen oder Entfernen aus einer Gruppe.

stateDiagram-v2
    Neu --> Eingebaut: Zur Gruppe hinzufuegen
    Gewartet --> Eingebaut: Zur Gruppe hinzufuegen
    Ausgebaut --> Eingebaut: Zur Gruppe hinzufuegen
    Eingebaut --> Ausgebaut: Aus Gruppe entfernen

Aktionen und Datenbankwirkung

Aktion Wirkung
Equipment hinzufügen Ein _EQGREH-Eintrag wird angelegt, Equipment.Status wird Eingebaut, und _EQUIP_HIST dokumentiert den Einbau.
Equipment entfernen Der _EQGREH-Eintrag wird gelöscht, Equipment.Status wird Ausgebaut, und _EQUIP_HIST dokumentiert den Ausbau.
Einbauort ändern Der Einbauort am _EQGREH-Eintrag wird gespeichert; Equipment.Status bleibt unverändert.
Vorgang pausieren oder beenden Diese Aktionen ändern Equipment.Status in der betrachteten Umlagerbearbeitung nicht direkt.

Neu und Gewartet werden durch diese Aktionen nicht erzeugt, können aber Ausgangszustände eines auswählbaren Equipments sein. Der Enum enthält außerdem InWartung und Ausgemustert: InWartung ist im Auswahlfeld gesperrt, Ausgemustert wird aus der verfügbaren Liste gefiltert. Für diese beiden Zustände ist in diesem Ablauf kein Übergang implementiert.

Wird eine Equipmentgruppe kopiert, werden Gruppenzuordnungen übernommen. Der Status der einzelnen Equipments wird in diesem Codepfad nicht eigens geändert.

Zusammenspiel der vier Automaten

Benutzeraktion Vorgang Rückmeldung Equipmentgruppe Einzelnes Equipment
Vorgang starten Aktiv Neuer offener Eintrag Bei Umlagerung InBau Keine direkte Änderung
Vorgang pausieren Pausiert Aktueller Eintrag wird geschlossen Bei Umlagerung weiterhin InBau Keine direkte Änderung
Vorgang fortsetzen Wieder Aktiv Neuer offener Eintrag; alter bleibt geschlossen Weiterhin InBau Keine direkte Änderung
Umlagervorgang beenden Abgeschlossen Aktueller Eintrag wird geschlossen Bereit Keine direkte Änderung
Equipment hinzufügen Keine direkte Änderung Keine direkte Änderung Gruppenzusammensetzung ändert sich Eingebaut
Equipment entfernen Keine direkte Änderung Keine direkte Änderung Gruppenzusammensetzung ändert sich Ausgebaut

Die Tabelle beschreibt den vorgesehenen Erfolgsfall. Die vier Statuswerte werden nicht atomar gemeinsam gespeichert.

Technische Grenzen des aktuellen Ablaufs

  1. Startreihenfolge: Der Dialog setzt den Vorgang auf Aktiv, bevor das Repository die neue Rückmeldung einfügt. Wenn das Einfügen wegen einer bereits offenen Rückmeldung abgelehnt wird, setzt dieser Codepfad den Vorgangsstatus nicht automatisch zurück.
  2. Abschlussreihenfolge: Beim Beenden wird zuerst die Pausenfunktion aufgerufen und danach Abgeschlossen gespeichert. Der Abschluss prüft das Ergebnis der Pausenfunktion nicht gesondert. Ein Fehler kann deshalb einen widersprüchlichen Zwischenstand hinterlassen.
  3. Getrennte Speichervorgänge: Beim Anlegen oder Kopieren von Gruppen sowie beim Hinzufügen oder Entfernen von Equipment erfolgen mehrere Datenbankoperationen nacheinander. In den betrachteten Abläufen ist keine gemeinsame Transaktion über alle Änderungen erkennbar.
  4. Status und Zuordnung sind verschieden: Eine geänderte Gruppenzuordnung setzt nicht automatisch einen passenden Status an jedem Equipment. Insbesondere beim Kopieren einer Gruppe muss man die Zugehörigkeit und den Equipmentstatus getrennt betrachten.

Technische Grundlage

Die Beschreibung stützt sich auf die Statusdefinitionen und die folgenden Implementierungen im Projekt:

  • TwinHub.MES.Data.BSC/Enums.cs
  • TwinHub.MES.Data.BSC/Models/RueckmeldungVorgang.cs
  • TwinHub.MES.Data.BSC/Repository/MESRepositoryFactory.cs
  • TwinHub.MES.Terminal.BSC/Components/Modal/NeuerVorgang.razor
  • TwinHub.MES.Terminal.BSC/Components/Modal/NeueNebenzeit.razor
  • TwinHub.MES.Terminal.BSC/Components/Modal/VorgangBearbeitung.razor
  • TwinHub.MES.Terminal.BSC/Components/Modal/UmlagerBearbeitung.razor
  • TwinHub.MES.Terminal.BSC/Components/Modal/BaugruppeAnmeldung.razor
  • TwinHub.MES.Terminal.BSC/Components/Modal/BaugruppeAbmeldung.razor