Forum: Mikrocontroller und Digitale Elektronik AVR: C, Zustandsmaschine, Tools, Tricks


von J. W. (ontheway)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe hier dankbar Hinweise bekommen, dass ich bei einigen 
Eingangszuständen und Ausgangszuständen doch über eine Zustandsmaschine 
nachdenken sollte. Ich versuche das nun, von Anfang her sauber zu coden, 
gefällt mir sehr gut! Ich hatte im Nebenfach Studium Informatik auch 
Automatentheorie und Petri-Netze, jetzt will ich das praktisch umsetzen.

Zuerst zu dem, was ich gerne coden würde: In erster Näherung ein 
Automat, der von einem Zustand in den nächsten schaltet, aber nur, wenn 
gewisse Bedingungen gegeben sind. Nennen wir es Sicherheitskonditionen.
Beispiel: Eine Ampel bekommt eine Störung, wenn dem so ist, schalte auf 
aus.

Angehangen mein funktionierender Code, macht Spaß mit der Maschine!
(Wenn ihr euch wundert: Die Zeitschaltung ist von einem delay in der 
main.c).

Man erkennt hier schon: Die Transition zwischen den Zuständen ist hier 
schon ein if-Statement, weil ich hier zum Beispiel ständig darauf achten 
muss, ob die Ampel ausschalten muss. Vielleicht reicht das, wenn ich die 
Eingänge mit AND code. Und die Transitionen, die natürlich fall-abhängig 
sein könnten?

Was meint ihr, am besten Funktionen schreiben, die die Transitionen 
prüfen? Das Ziel ist bei mir: Absolut verständlicher Code, 
nachvollziehbare Logik. (Eierlegender Wollmichsaucode??)

Hier stieß ich zum Beispiel auf Qfsm (http://qfsm.sourceforge.net/) oder 
sogar für Petri-Netze auf den Platform Independent Petri Net Editor 
(http://sourceforge.net/projects/pipe2/), wenn es um kommunizierende 
Automaten geht. Was haltet ihr davon? Was ist eure Erfahrung? Nutzt ihr 
sowas?

Danke!

Liebe Grüße,
Jens

von amateur (Gast)


Lesenswert?

Die meisten, grundlegenden Informationen zu diesem Bereich, wirst Du 
wohl im Bereich SPS und Industriesteuerungen finden.

>Das ist doch ein Witz, das kann schon mein 9jähriger!
... nur mit den Lego-Steinen, da hat er immer noch Probleme.

von kopfkratzer (Gast)


Lesenswert?

Also das mit dem Switch und dem Ändern hast Du ja hinbekommen.
Wenn es mehrere Bedingungen zum Status gibt macht es erstmal Sinn das 
ganze auf ein Blatt Papier zu schreiben und dann einen gewichteten 
Graphen zu erstellen.
Je nachdem wie wichtig eine Kondition ist dann entsprechend werten.
Also statt BOOL einen Wert vergeben, oder ich habe Deine Frage nicht 
verstanden :-P
Bei identischer Gewichtung funktioniert das natürlich mit AND ;-)
Achja und Dein default beim switch sollte alle Ampeln nicht aus sondern 
GELBBLINKEN sein :-D

von J. W. (ontheway)


Lesenswert?

Das klingt sehr spannend, ein gewichteter Graph! Ich habe null Ahnung, 
wie man den implementiert! Hast du Beispiele? In irgendwelchen 
Diagrammen sieht alles immer so nett aus, aber der Code ist dann 
spannend... nur dank dem Tipp eines Forumteilnehmers kam ich erst auf 
Zustandsmaschinen!
Deshalb kam ich ja auf Simulationen, ich würde das ganze gerne nicht nur 
zeichnen, sondern vielleicht (!!) auch simulieren, aber Du hast 
offensichtlich die Erfahrung, und Du sagst: Blatt Papier reicht... 
Weißt, ich bin brutaler Theoretiker, aber das nützt mir nen Scheiß wenn 
ich code ;)

von kopfkratzer (Gast)


Lesenswert?

Also in meinem Buchregal steht z.B. rum:
T.Ottmann/P.Widmayer Algorithmen und Datenstrukturen
Ist allerdings schon etwas älter :-P
Such einfach mal im Netz nach Graphentheorie und z.B. 
Traveling-Salesman-Problem ;-)
Du kannst eine Gewichtung auch als Fuzzy ausführen, dann hast Du einen 
Wert zwischen 0 und 1 und damit die Schwelle.
Wichtig ist das Du alle Zustände erfaßt hast und weißt welche Übergänge 
von welchen zu welchen wie geschehen müssen/sollen.
Ein extra Zustand bei keiner passenden Entscheidung ist obligatorisch, 
wie das gelbe Blinken der Ampeln z.B. bei Kurzschluß.

P.S.: Der "amazon link" geht ins Nirvana !

von Matthias L. (Gast)


Lesenswert?


von amateur (Gast)


Lesenswert?

Theoretisch gibt es keine Probleme bei einem Automaten. Auch die 
Simulation funktioniert, wenn vernünftig definiert, immer 100-prozentig.
Dummerweise halten sich echte Automaten aber nicht daran.

von kopfkratzer (Gast)


Lesenswert?

amateur schrieb:
> Dummerweise halten sich echte Automaten aber nicht daran.

Du solltest hier keine Fahrkartenautomaten "beleidigen" :-P
Denn die funktionieren genau so wie sie sollen vor allem bei Auswahl 
einer Fremdsprache ...

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.