Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich habe folgendes Problem. Zum Aufbau eines Messplatzes hab ich einen Zustandsautomaten gebaut.
Der Messplatz umfasst mehrere Komponenten (Zustande) die je nach Usereingabe mehrfach ausgeführt werden müssen.
Ich weiß nun nicht so recht wie ich dies umsetzen soll, es wäre "praktisch" wie eine For-Schleife aber nur um mehrere Zustände.
Habt ihr eine Idee?
Die simpelste Methode wäre folgende, denke ich: Du baust dir ein Enum (TypeDef), mit allen Zuständen, dei du brauchst. Innerhalb der Zustände verwendest du das Enum dann mittels Schieberegister, um gezielt Zustände aufzurufen. Wenn die Zustände nicht einfach nur stumpf nacheinander aufgerufen werden sollen, braucht es natürlich noch eine Logik innerhalb des jeweiligen Zuständes, über die der nächste Zustand bestimmt wird.
Es ist schwer, dein konkretes Problem aus der Beschreibung herauszulesen. Für mich jedenfalls Vielleicht kannst du das noch etwas genauer umschreiben.
Ich kann es ja nochmal detailierter versuchen zu beschreiben
Also sagen wir ich hab Zustand1, Zustand2, Zustand3 und Zustand4
Der User gibt dem Programm als Anweisung die Zahl 4.
Das Programm soll dann folgend ablaufen: Zustand1 läuft normal ab. Zustand2 und Zustand3 sollen jetzt jedoch 4-mal hintereinander ablaufen. Und danach soll dann Zustand 4 kommen.
So ist mein Plan, jedoch scheitert es an der Umsetzung.
20.08.2014, 10:34 (Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2014 10:37 von GerdW.)
Hier bietet sich eine "Queue driven State Machine" (QSM) an, siehe Beispiel. Der Vorteil offenbart sich natürlich erst, wenn Du mehr als nur den "Ablauf Nr 4" im Programm hast.
Nochmal eine kurze Frage zu dem geposteten Vi.
Ich würde gern noch weitere Zustände hinzufügen.
Dies funktioniert allerdings durch einfaches hinzufügen im State und im Case nicht.
Kann mir jemand sagen, wie ich da vorgehen muss ?
21.08.2014, 10:23 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2014 10:24 von GerdW.)
was Ludwig in der Eile () vergessen hat zu erwähnen: ein Enum sollte (so gut wie immer) als Typdefinition angelegt werden.
Also: mach aus dem Enum mit den States in Ludwigs Beispiel-VI ein typdefiniertes Enum und ersetze alle Instanzen dieses Enums durch die Typdefinition. Wenn das erledigt ist, öffnest du die Typdefinition erneut und fügst einen neuen Zustand (z.B. Z5) hinzu (speichern nicht vergessen). In allen Instanzen der Typdefinition taucht dieser Zustand nun auch auf und du kannst ihn per Queue versenden. Jetzt noch einfach einen neuen Case dafür im Consumer einrichten und fertig. Tipp hierzu: entferne aus der Consumer-Case-Struktur den Standard ("Voreinstellung"), dann bekommst du eine Fehlermeldung, wenn du für einen State im Enum noch keinen Case angelegt hast…