Theorie - FiniteStateMachines

Neurorancer

Level-2
Beiträge
580
Reaktionspunkte
11
Sehr geehrte Forum-Mitglieder,

ich habe eine Verständnis-Frage zu den FiniteStateMachines (FSM) - endlicher Zustandsautomat.

Mich interessieren die Fälle, wo mehrere StateMachines auf eine Hardware-Ressource zugreifen müssen.

Unter dem Link ist die Anwendung zu sehen.

Es sind zwei Tanks, welche über separate Ventile durch eine Pumpe auch parallel befüllt werden.


Ich könnte den Ansatz nehmen, wo ich zwei Slave FSMs habe. Jede Slave FiniteStateMachine würde jeweils
den Tank mit dem Ventil und der Pumpe umfassen.


FSM1 steuert Ventil1 und Pumpe1

FSM2 steuert Ventil2 und Pumpe1

Die Pumpe1 überschneidet sich in beiden Zustands-Automaten.

Als Lösung könnte ich ein "Ausgang-Programm" erstellen,

welches den Zustand der FSM überwacht und die Pumpe entsprechend schaltet.

Oder soll die Pumpe zu einem separaten Zustandsautomaten FSM3 werden?

Dann würde FSM3 durch FSM1 und FSM2 gesteuert werden.

Aber auch hier muss ein Programm her, welches die Ausgänge der FSM1 und FSM2 ließt

und den Hardware-Ausgang für die Pumpe1 setzt, erstellt werden.

Frage: Welchen Lösungsansatz würdet ihr nehmen?
 
Dein Beispiel würde ich nur mir einer FSM / Schrittkette lösen....

Eine andere Möglichkeit wäre, wenn die FSMs / Schrittketten der Tanks bei der Pumpe anfragen, ob diese verfügbar ist. Wenn ja, holt sich die jeweilige FSM es Tanks die Steuereinheit über die Pumpe. Wenn die FSM fertig ist, gibt diese die Pumpe frei und und es wäre für die andere FSM möglich, sich die Steuerhoheit über die Pumpe zu holen.

Allerdings ziemlich viel Aufwand für sowas
 
Zuletzt bearbeitet:
Da beide Einheiten gleichwertig sind und auch gleichzeitig auf die Pumpe zugreifen können würde ich das auch genauso umsetzen - deine FSM's steuern nicht die Pumpe (also den Ausgang) direkt sondern geben ein Kommando raus. Das eine oder das andere Kommando oder beide aktivieren dann die Pumpe (also den Ausgang)
 
Die beiden Tanks über jeweils eine FSM zu stehern kann man auf jeden Fall machen / mach Sinn.
Eine einzelne FSM für beide Tanks wäre praktisch umsetzbar, würde ich aber nicht machen, da das die Wiederverwendbarkeit des Codes einschränkt wenn du auf einmal drei Tanks hast (oder nur einen).

In deinem Beispiel würde es reichen die Anforderung "Pumpe EIN" von den beiden FSM oder zu verknüpfen & damit die Pumpe zu schalten.
=> wie bereits genannt: Umsetzung als "Ausgangs-Programm"
Was nicht heißt, dass man eine FSM nicht für eine simple Oder-Verknüpfung benutzen könnte. (könnte <> praktisch sinnvoll)
Hier würde sich eine FSM erst lohnen wenn die Pumpe eine Drehzahlregelung besitzt & auf die Anzahl der anfordernden Tanks passend reagieren soll.
Oder zwei/mehrere Pumpen im Redundanzbetrieb, die die Tanks versorgen.
 
Zurück
Oben