Was kam zuerst - der Zustand oder ein Übergang?

Gast #4392620
Lesenswert?
• ▲
▼
Implementierung eines Endlichen Automaten: wie wird ein Übergang 
ausgelöst, und wo wird er erfasst? Prüfe ich im Zustand die Ereignisse, 
die einen Übergang auslösen, und führe diese dann aus oder sind mögliche 
Übergange ständig "aktiv" und prüfen ihr Startereignis; sobald es 
eintritt, werden die anderen gesperrt/deaktiviert.
Gast #4392642
Lesenswert?
• ▲
▼
Das ist schlüssig, allerdings habe ich mehrere Übergänge, die in 
verschiedenen Zuständen auftreten können. Die erforderlichen Prüfungen 
müssten dann mehrfach aufgerufen oder implementiert werden.
Ich werde wohl versuchen, dass die Prüfung in der Übergangsfunktion 
erfolgt. Die wartenden Übergänge werden vom Zustand bestimmt.
Daraus ergibt sich aber auch das Problem, dass das Ziel (der neue 
Zustand) bestimmt werden muss.
Alles eine Frage der Sprache :-(
Gast #4392735
Lesenswert?
• ▲
▼
Die Frage ist an sich interessant, aber man muss doch sehr aufpassen, 
dass man sie präzise formuliert und dabei die Verarbeitungsmodelle von 
finiten Automaten und Prozessor auf passende Weise vergleicht.

Zu den theoretischen Aspekten empfehle ich einige Lektüre zur 
Übersicht.


Die praktische Antwort auf Deine Frage ist kurz so:

1. Es ist möglich und nützlich von einem Ausgangszustand auszugehen, der 
von keiner Bedingung abhängt. Man kann es anders machen, aber es handelt 
sich erst einmal um eine völlig freie Wahl und das führte im 
wesentlichen nur zu einer Variation.

2. In diesem Zustand implementiert man alle "möglichen" Übergänge von 
ihm weg (plus der zu ihm selbst führenden). Die Implementierung sieht 
einfach wie eine Bedingung aus mit einem Kontroll-Statement aus. Also 
ein if in C.

Mehr brauchts nicht.

Denke an die gute alte Daumenregel: So einfach wie möglich und so 
kompliziert wie nötig.
Gast #4392746
Lesenswert?
• ▲
▼
N.A. schrieb:

> Implementierung eines Endlichen Automaten: wie wird ein
> Übergang ausgelöst,

Durch ein Eingangssignal ("Ereignis").

> und wo wird er erfasst?

Der Übergang? I.d.R. nirgendwo.
Der Zustand? In der Zustandsvariablen.

Man kann bei Bedarf den Übergang identifizieren, indem man
eine zusätzliche Variable für den vorigen Zustand verwendet
("History"). Start- und Endzustand legen i.d.R. den Übergang
eindeutig fest.

> Prüfe ich im Zustand die Ereignisse, die einen Übergang
> auslösen, und führe diese dann aus

Das ist sinnvoll, wenn Du einen Automaten mit einem
aktiven Zustand implementieren willst.

> oder sind mögliche Übergange ständig "aktiv" und prüfen
> ihr Startereignis; sobald es eintritt, werden die anderen
> gesperrt/deaktiviert.

Das ist sinnvoll, wenn Du mehrere Automaten simultan
implementieren willst. In der SPS-Programmierung macht(e)
man das so.
Gast #4392757
Lesenswert?
• ▲
▼
Karl H. schrieb:

> N.A. schrieb:
>> Das ist schlüssig, allerdings habe ich mehrere Übergänge,
>> die in verschiedenen Zuständen auftreten können. Die
>> erforderlichen Prüfungen müssten dann mehrfach aufgerufen
>> oder implementiert werden.
>
> Ja. Und?

Verstehe ich nicht.

Der gegenwärtige Zustand ist ja bekannt. Also muss nur für
jeden Übergang, der aus dem gegenwärtigen Zustand herausführt,
die dazu notwendige "Freigabe" geprüft werden.

Jede erforderliche Prüfung muss genau einmal implementiert
werden.

In jedem Zustand wird jede implementierte Prüfung höchstens
einmal aufgerufen.
#4392772
Lesenswert?
• ▲
▼
Possetitjel schrieb:
> Karl H. schrieb:
>
>> N.A. schrieb:
>>> Das ist schlüssig, allerdings habe ich mehrere Übergänge,
>>> die in verschiedenen Zuständen auftreten können. Die
>>> erforderlichen Prüfungen müssten dann mehrfach aufgerufen
>>> oder implementiert werden.
>>
>> Ja. Und?
>
> Verstehe ich nicht.
>
> Der gegenwärtige Zustand ist ja bekannt. Also muss nur für
> jeden Übergang, der aus dem gegenwärtigen Zustand herausführt,
> die dazu notwendige "Freigabe" geprüft werden.

Ja. Aber will die bei 3 Zuständen identische Überprüfung auf den 
Auslöser nicht 3 mal schreiben wenn die komplex ist. Dazu gibt es ja 
Funktionen die man aufrufen kann, so dass man den Code nur einmal 
schreibt.

Obwohl: Das ist so trivial, dass ich mich die ganze Zeit frage, ob 
hinter der Frage noch mehr steckt. Am schreiben einer Funktion wirds ja 
wohl hoffentlich nicht scheitern.
Gast #4392788
Lesenswert?
• ▲
▼
Möglicherweise!

Der Punkt ist ja, das beim Automatenmodell jedwede Verarbeitung im 
engeren Sinne fast nie behandelt wird. Also etwa eine Umrechnung. Auch 
ist das "lesen eines Portpins" eine intrinsische Eigenschaft eines 
Automaten während sie bei einem uC oder uP ausdrücklich hingeschrieben 
werden muss.

Dieser Satz mit dem "mehrfachen Hinschreiben" deutet irgendwie in die 
Richtung, "falls ich mich nicht irre". (Sam Hawkins)
Gast #4392812
Lesenswert?
• ▲
▼
Wie erstellst Du denn Deinen Automaten bevor Du anfängst zu coden ?
Normalerweise malt man sich den auf ein Blatt Papier und hat dann 
Zustandsblasen an denen dann die Übergänge als Pfeil auf den nächsten 
Zustand zeigen.
Wenn Du nun mehrere Übergänge von einem Zustand hast kannst Du nun 
entweder in Deinem Zustand die einzelnen Übergänge ansprechen oder Du 
erzeugst "Zwischenzustände" so das es immer nur einen Übergang gibt.
Wenn man ja wüßte was es werden soll ?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.