finite state machine aufstellen

Gast #3258213
Lesenswert?

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?
#3258718
Lesenswert?

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.
Gast #3258861
Lesenswert?

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;
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren