Forum: Mikrocontroller und Digitale Elektronik finite state machine aufstellen


von Physiker (Gast)


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?

von Karl H. (kbuchegg)


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.

von 6A66 (Gast)


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

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
Noch kein Account? Hier anmelden.