Servus Leute! Wie geht ihr vor, wenn ihr ausgehend von einem Problem eine FSM entwickelt? Gibt es da irgend eine standartisierte/etablierte Vorgehensweise? Also ich habe das bisher immer so gemacht: als erstes schaue ich mir das Problem an und schreibe auf, welche Zustände es überhaut geben kann, z.B. so: 01: Belüftet 02: Abpumpen 03: Abgepumpt 04: Belüften 05: Störung Dann schreibe ich auf welche Zustände von einem bestimmten Zust. überhaupt erreicht werden können, z.B. so: Act. State Next State ---------------------------- 01 : 02 02 : 03, 04, 05 03 : 04, 05 04 : 01, 02, 05 05 : 01, 02, 03, 04 Schließlich schreibe ich in einer Tabelle für alle Übergänge auf welche Bedingungen erfüllt sein müssen, etwa so: Transition Condition ------------------------------ 01 -> 02 : AUTO_START == 1 02 -> 03 : AUTO_START == 1 && P_SETP == 1 02 -> 04 : AUTO_START == 0 02 -> 05 : AUTO_START == 1 && P_SETP == 0 (after 120 sec.) usw. Anschließend setze ich das Ganze dann in der entspr. Programmiersprache, PLC, oder was auch immer um. Für einfache Probleme funktioniert das ganz gut aber für komplexere Sachen wird das schnell sehr unübersichtlich. Gibts da eine effizientere Herangehensweise um das Alles strukturiert anzugehen und auch nichts zu vergesen / zu Übersehen? Was habt ihr da so für Erfahrungen?
Ich fang meistens damit an, mir ein großes Blatt Papier zu nehmen und dort die State-maschine aufzumalen. Statemachine: Darstellung von Zustandsautomaten und dann spiele ich einfach mal alle Möglichkeiten durch, was mir so passieren kann, indem ich mit dem Finger einfach durch die Maschine durchlaufe und mir im jeweiligen Zustand vorstelle, was da alles so passieren kann. Je nachdem wandert dann der Finger weiter zum nächsten Zustand oder auch nicht. Das mache ich solange, bis ich denke alle Fälle und Eventualitäten bedacht zu haben. Änderungen und Ergänzungen lassen sich in diesem Stadium trivial mit Radiergummi und Bleistift machen. Und erst dann fange ich an, diese Erkenntnisse etwas formaler zu fassen.
Physiker schrieb: > Transition Condition > ------------------------------ > 01 -> 02 : AUTO_START == 1 > > 02 -> 03 : AUTO_START == 1 && P_SETP == 1 > 02 -> 04 : AUTO_START == 0 > 02 -> 05 : AUTO_START == 1 && P_SETP == 0 (after 120 sec.) Ich mach das ein bischen anders. Bin ich irgendwie noch aus der PLD-Programmierung gewohnt. Ich schreibe mir die Endzustände wie diese aus den Anfangszuständen erreichbar sind: switch (state) ... case Belüften: { if (condition1) state = Abpumpen; else if (condition2) state = Abgepumpt; else if (condition3) state = Störung; else state = Belüften; }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.