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
- 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. - Abschlussreihenfolge: Beim Beenden wird zuerst die Pausenfunktion aufgerufen und danach
Abgeschlossengespeichert. Der Abschluss prüft das Ergebnis der Pausenfunktion nicht gesondert. Ein Fehler kann deshalb einen widersprüchlichen Zwischenstand hinterlassen. - 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.
- 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.csTwinHub.MES.Data.BSC/Models/RueckmeldungVorgang.csTwinHub.MES.Data.BSC/Repository/MESRepositoryFactory.csTwinHub.MES.Terminal.BSC/Components/Modal/NeuerVorgang.razorTwinHub.MES.Terminal.BSC/Components/Modal/NeueNebenzeit.razorTwinHub.MES.Terminal.BSC/Components/Modal/VorgangBearbeitung.razorTwinHub.MES.Terminal.BSC/Components/Modal/UmlagerBearbeitung.razorTwinHub.MES.Terminal.BSC/Components/Modal/BaugruppeAnmeldung.razorTwinHub.MES.Terminal.BSC/Components/Modal/BaugruppeAbmeldung.razor