AVR: C, Zustandsmaschine, Tools, Tricks

OP #3086765
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
Angehängte Dateien:
Gast #3086800
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.
Gast #3086812
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
OP #3086846
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 ;)
Gast #3086863
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 !
Gast #3086874
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.

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