Schrittkette vs. State Machine

Tmbiz

Level-2
Beiträge
642
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich würde gerne mal eure Meinung zu einem Sachverhalt hören. Im Kern ist eine Schrittkette ja auch nichts anders als eine State Machine. Man durchläuft verschiedene Cases und kann darin Veränderung herbeiführen oder über den State/ Schritt auch einen Rückschluss auf eine Situation ziehen.

Ich bin generell der Ansicht, dass eine Schrittkette oder auch State Machine keine Hardware Zustände abbilden sollte. Also als Beispiel: Ich kann in den Case 1 springen und das Ventil wird geöffnet. Ich kann in den Case 2 springe und das Ventil schliesst. Wenn ich mit der Arbeit fertig bin, gehe ich in 0 Idle. Mein Case bildet nicht die Hardware ab. Ich setze einfach verschiedene Bits, die ich separat ablege und die mir Auskunft über den Status von etwas geben.

Man könnte aber auch aus 0 in 1 (öffnen) gehen und dann in 2 (offen). Case 3 ist dann schliessen und 4 geschlossen. Der Zustandsautomat bildet einen Sachverhalt ab. Ich finde das nicht so schön, da man den Zustand immer mit einem externen Sachverhalt synchron halten muss.

Wie ist eure Meinung dazu?
 
ich würde gerne mal eure Meinung zu einem Sachverhalt hören. Im Kern ist eine Schrittkette ja auch nichts anders als eine State Machine. Man durchläuft verschiedene Cases und kann darin Veränderung herbeiführen oder über den State/ Schritt auch einen Rückschluss auf eine Situation ziehen.
Jup, das wäre Sinn der Sache.
Wie ist eure Meinung dazu?
Kommt drauf an wie genau du es brauchst & wie viel Aufwand du treiben möchtest ¯\_(ツ)_/¯

Bei einem normalen 2/2 Pneumatikventil ohne Stellungsrückmeldung würde ich mir die Zustände für öffnen/schließen sparen, da diese für mich nicht von interesse sind.
Das Teil ist angesteuert oder nicht, offen oder geschlossen.
Eine Reaktion auf z.B. Endlagen würde hier lediglich über den Zustandsautomaten / die Schrittkette des eigentlichen Funktionsablaufs/Prozesses erfolgen.

Bei einem Motorventil, welches ein paar Sekunden zum Stellungswechsel benötigt oder mehrere Zwischenpositionen haben kann, sieht das schon anders aus.
Hier würde ich das komplette Programm fahren, incl Fehlerzuständen für alle Zustände.
Also:
Geschlossen => öffnet => offen => schließt => geschlossen
Da gehe ich beispielsweise bei den SCL-Schrittketten her & addiere bei einem Fehler einen festen Offset (meistens 10000) auf die Zustandsnummer um in einen Fehlerstatus mit Bezug auf den auslösenden Zustand zu gehen.
Das macht es sehr einfach zusammen mit einem Fehlercode das o und warum eines Fehlers auszuwerten & anzuzeigen.
Ist aber letztlich eine Frage der Anforderungen.

Man könnte aber auch aus 0 in 1 (öffnen) gehen und dann in 2 (offen). Case 3 ist dann schliessen und 4 geschlossen. Der Zustandsautomat bildet einen Sachverhalt ab. Ich finde das nicht so schön, da man den Zustand immer mit einem externen Sachverhalt synchron halten muss.
Wenn du Hardware mit einem Zustandsautomaten steuerst muss dieser zwangsläufig synchron zu der Ist-Situation in der realen Welt bleiben.
Ich verstehe nicht ganz was daran nicht so schön sein soll...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nun, im Kern ist doch die Frage, wie sollte man den Ist der Hardware in der Software abbilden. Ich finde es eher unpraktisch, wenn man wenn eine Position in meinem CASE mir sagt, dass der Motor dreht oder das Ventil offen ist. Denn wenn sich daran etwas verändert, muss ich das CASE nachführen.
 
Nun, im Kern ist doch die Frage, wie sollte man den Ist der Hardware in der Software abbilden. Ich finde es eher unpraktisch, wenn man wenn eine Position in meinem CASE mir sagt, dass der Motor dreht oder das Ventil offen ist. Denn wenn sich daran etwas verändert, muss ich das CASE nachführen.
In meinen Augen ne ziemlich akademische Diskussion. Ob ich nun Aktionen und Transitionen innerhalb der Kette oder ausserhalb der Kette programmiere ...
 
State Machine wird doch häufig über boolsche Algebra realisiert. Oder Umgekehrt muss man über Zustandbit den aktuelle Status auswerten. Jedenfalls ist das meine Auffassung der Thematik.
Da ich generell kein Freund von zustandsorientierter Programmierung bin, tendiere ich zur Schrittkette. Natürlich mit Maß und Ziel. Bei einer Ventilschaltung sind die verfügbaren Bits meist ausreichend. Für eine Servoansteuerung ist mir eine Art Schrittkette lieber
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich finde es eher unpraktisch, wenn man wenn eine Position in meinem CASE mir sagt, dass der Motor dreht oder das Ventil offen ist. Denn wenn sich daran etwas verändert, muss ich das CASE nachführen.
Mal unabhängig davon, dass es MIR bislang nicht gelungen ist, den Unterschied zwischen einem Zustands-Automaten (State.Machine) und einer Schrittkette zu erkennen ... eine Schrittkette bildet auch immer einen Zustand ab ... eigentlich kann man sogar fast jeden Ablauf in einer Schrittkette abbilden (jedenfalls hatte ich bis heute keine Anwendung gehabt wo es nicht so gewesen wäre).
Ob ich das nun mit Setzen und Rücksetzen von Bits umsetze oder mit einer Zuweisung eines Zahlenwertes auf eine Variable um einen CASE abbilden zu können macht (für mich) keinen Unterschied.
Wie dann jetzt nun das Ganze im Detail aussieht hängt aber sicherlich ganz entschieden von der jeweiligen Aufgabenstellung ab.

Um jetzt aber mal den akademischen Teil mit den bestimmt noch kommenden Grundsatz-Diskussionen abzukürzen ... @Tmbiz : was ist deine reale Intension hinter diesem Thread ?
 
Liest sich für mich auch recht abstrakt.
Ich benutze eine Schrittkette dann, wenn ich mehrere Aktoren koordinieren muss.
Also z.B. wenn Ventil 1 geöffnet hat, starte ich Motor 2. Ich brauche also zwangsläufig Rückmeldungen von der Hardware,
die mir den nächsten Schritt freigeben.
Insofern sehe ich kein Problem dabei, irgendwas synchron zu halten. Das ist der Zweck von Transitionen.

Eine Zustandssteuerung, soweit ich den Begriff "State Machine" verstehe, ist z.B. folgendes:
Ich stelle an einer Anlage einen Wert ein, und die Anlage macht daraus dann etwas, unabhängig vom vorherigen Zustand.
z.B. fahre eine Linearachse auf Position X.
 
Eine Zustandssteuerung, soweit ich den Begriff "State Machine" verstehe, ist z.B. folgendes:
Ich stelle an einer Anlage einen Wert ein, und die Anlage macht daraus dann etwas, unabhängig vom vorherigen Zustand.
z.B. fahre eine Linearachse auf Position X.
Also ich habe eine Achse nie unabhängig von einem Vor-Zustand irgendwohin gefahren (eventuell aber schon parallel mit etwas Anderem). Naja ... und wenn sie dann da ist wo du sie hinhaben wolltest ... was kam dann ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal unabhängig davon, dass es MIR bislang nicht gelungen ist, den Unterschied zwischen einem Zustands-Automaten (State.Machine) und einer Schrittkette zu erkennen
Da gibt's - meiner Meinung nach - auch keinen. State Machine kommt halt mehr aus der IT und auch Prozesstechnik.
 
Nach meiner Auffassung bezieht sich ein Zustandsautomat auf z.B. eine Maschine als gesamtheitliches System. Eine Schrittkette auf einen Ablauf innerhalb der Systems.

BSP: Kaffeeautomat

Zustände IDLE -> ZUBEREITUNG -> ENTAHME -> IDLE
Schrittkette Pulver einfüllen -> Zucker zugeben -> Wasser zugeben

Ich gehe allerdings mit, dass diese Diskussion sehr theoretisch ist und auf den "Programmieralltag" wenig bis keine Auswirkung hat
 
Eine Schrittkette ist auch eine Vereinfachung/Abkürzung einer Statemachine. Wenn sich gleiche Anlagenzustände einstellen können, die Reaktion darauf von Fall zu Fall aber unterschiedlich sein soll. Dann braucht man weitere Unterscheidungsmerkmale, z.B. zusätzliche (Merk-)Variablen. Da kann man aber auch die Schrittketten als zusätzliches Merkmal des State hinzuziehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich habe eine Achse nie unabhängig von einem Vor-Zustand irgendwohin gefahren (eventuell aber schon parallel mit etwas Anderem). Naja ... und wenn sie dann da ist wo du sie hinhaben wolltest ... was kam dann ?
Das mit der Achse war nur ein Beispiel. Ok, ein schlechtes.
Stell dir einfach eine manuelle Positionierung ohne Automatisierung vor.
Vielleicht habe ich auch die falsche Vorstellung von "Machine State".
 
Nach meiner Auffassung bezieht sich ein Zustandsautomat auf z.B. eine Maschine als gesamtheitliches System. Eine Schrittkette auf einen Ablauf innerhalb der Systems.
Sorry aber da muss ich dich enttäuschen.
Ich kenn etliche State Machines, die sind detailiert bis ins allerletzte Bit.
Von Siemens gab es mal vor zig Jahren die Software Higraph. Da wurde alles als State Machine betrachtet. Also z.B. auch Betriebsarten, Achsfreigaben, ...
 
State Machine = Petri Netz --> nur jeweils EIN aktiver Schritt erlaubt (ex HiGraph ist ein gutes Beispiel)
Schrittkette = GRAPH (SIEMENS) oder SFC (Codesys/TwinCat) --> Parallelschritte sind erlaubt, also ZWEI oder mehr Schritt können aktiv sein
 
Zuviel Werbung?
-> Hier kostenlos registrieren
eigentlich ist das doch alles das gleiche.

Finite State Machine : Endlicher Zustandautomat : Schrittkette
umsetzen kann man das auf viele Arten!

In der Funktion gibt es 2 Typen: Mealy Machines and Moore Machines. Ich glaube, das ist was ihr hier als Unterschied wahrnehmt.

 
Eine Schrittkette ist Sequentiell und eine StateMachine ist Zustandsorientiert.

Beispiel: Bei Schritt 2 wird ein Vakuum-Sauger aktiviert, der dann im Schritt 4 wieder deaktiviert wird. Würde man einfach nach Schritt 2 springen, dann ist der Sauger nicht aktiv.

SchrittketteState Machine
LogikLinear/sequentiellZustände unabhängig, beliebige Übergänge
SpeicherStatus ist an Reihenfolge gebundenStatus ist an Zustandsdefinition gebunden
SprungwirkungÜbersprungene Schritte setzen nichtsZustand selbst definiert alles Nötige
 
Eine Schrittkette ist Sequentiell und eine StateMachine ist Zustandsorientiert.

Beispiel: Bei Schritt 2 wird ein Vakuum-Sauger aktiviert, der dann im Schritt 4 wieder deaktiviert wird. Würde man einfach nach Schritt 2 springen, dann ist der Sauger nicht aktiv.

SchrittketteState Machine
LogikLinear/sequentiellZustände unabhängig, beliebige Übergänge
SpeicherStatus ist an Reihenfolge gebundenStatus ist an Zustandsdefinition gebunden
SprungwirkungÜbersprungene Schritte setzen nichtsZustand selbst definiert alles Nötige
Woher bringst du denn diese Übersicht?
Vor allem Logik "Zustände unabhängig, beliebige Übergänge" verwundert mich.
Deine Tabelle sieht für mich mehr aus wie der Vergleich "Verknüpfungssteuerung" vs. " Schrittkette"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Schrittkette ist Sequentiell und eine StateMachine ist Zustandsorientiert.
... eine Ab-Folge von Zuständen ist übrigens auch eine Sequenz ... Zustände entstehen nicht willkürlich sondern haben immer auch eine Vor-Bedingung ...
Aber ... es gibt natürlich auch (Pseudo-)willkürlich entstehende Zustände - die nennt man dann Fehler oder ggf. sogar Ablauf-Fehler ...
(wobei ein solcher Zustand ja dann auch immer eine, wenn auch unerwünschte, Vor-Bedingung hat)
 
Zurück
Oben