Aufbau einer Statemachine

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich brauche mal eure Fachliche Meinung.... ich möchte gerade für einen bestimmten Ablauf eine Statemachine aufbauen.

Meine Frage ist jetzt folgende.... ich setze bei den verschiedenen stetes verschiedene Bits.
Sollte man Das Bit A bei der Abfrage zum Übergang von State 0 zu State 1 setzen, oder erst direkt in State B?

Bsp:
Code:
Case State OF 
 0:
    IF Bedingung THEN
         A := TRUE;
         State := 1;
 1:
    Weitere Bedingungen...
END_CASE

oder besser so:
Code:
Case State OF 

 0:
    IF Bedingung THEN
         State := 1;
 1:
    A := TRUE;
    Weitere Bedingungen...
END_CASE

Was meint Ihr dazu... wenn ich das Bit erst in State 1 setze, ist es einen Zyklus verzögert, aber man hat direkt ne Zuordnung zu dem State, wo das Bit gesetzt wird.
Eventuell kann es ja sein, dass man später nochmal von wo anders in den State springt... dann müsste man es nicht in jeder If abfrage setzen, sondern es würde immer direkt im State gesetzt werden... was meint Ihr?
 
Es gibt beide Varianten (und noch zig andere auch).
Wichtig ist nur, dass du es einheitlich machst.

Du kannst dir aber auch einfach AS (Ablaufsprache) anschauen.
Dort programmierst du deine Statemachine / Schrittkette grafisch und hast sie sozusagen auch gleich dokumentiert.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke... ich habe mich jetzt für die Variante entschieden, bei der die Werte erst gesetzt werden, wenn der State auch wirklich aktiv ist... so ist ein rückspringen denken ich leichter zu realisieren... ps. in AS wäre es ja auch so.
 
Hallo,

bei speicherprogrammierten Steuerungen ist es eigentlich nicht so wichtig, ob sagen wir mal ein Ausgang mit dem Zyklus gesetzt wird in dem auch der nächste Zustand angewiesen wird, oder in dem nächsten Zustand.

Das ist eigentlich nur für Aufgaben wie Kommunikationsschnittstellen wichtig, bei denen die Signalverläufe pro Zyklus fest vorgeschrieben sind.
 
Hallo

ein Setzen des Ausganges eines Zyklus früher hat den Vorteil das bei höheren Zykluszeiten das z.B. Ventil früher schaltet. Die Zykluszeit zur Herstellung kann dadurch verringert werden und somit die hergstellte Menge erhöht werden.

daher nutze ich in solchen Fällen diesen Ansatz:

Case State OF
0:
IF Bedingung THEN
State := 1;
1:
Weitere Bedingungen...
END_CASEA := State = 1;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sorry

kein leerzeichen


Hallo

ein Setzen des Ausganges eines Zyklus früher hat den Vorteil das bei höheren Zykluszeiten das z.B. Ventil früher schaltet. Die Zykluszeit zur Herstellung kann dadurch verringert werden und somit die hergstellte Menge erhöht werden.

daher nutze ich in solchen Fällen diesen Ansatz:

Case State OF
0:
IF Bedingung THEN
State := 1;
1:
Weitere Bedingungen...
END_CASE



A := State = 1;
 
Hey, den Ansatz finde ich super... Habe ich schon mal gesehen, aber wieder verdrängt.... Aber ist klasse, man könnte es ja auch so aufbauen, dass man eine case Abfrage nur für die Zustände benutzt und eine nur für die dem entsprechenden Befehle, bzw. Ausgaben... Also so...

Code:
Case State Of

0: If Bedingung Then
        State := 1;
    End_If

1: Weiter Bedingungen

End_Case

Case State Of

0: Irgend eine Zuweisung
 
1: A := True;

2: Weiter Zuweisungen
End_Case

finde ich gut :)

der Nachteil ist allerdings, dass man bei rückwärtsmöglichkeiten immer in jedem Schritt zumindest den im nächsten Schritt gesetzten Zustand negiert drin hat...

bsp... Im Schritt 1 wird a gesetzt und in Schritt 2 wird b gesetzt..... Wenn ich jetzt von 2 nach 1 springen kann, dann muss ich in Schritt 1 big a true setzten und bit b. Falle setzen.

anders könnte ich es in der Abfrage zum Sprung auf Falle setzen... Man muss also Wissen aus welchem Schritt zurück gesprungen werden kann und diese Signale auch verarbeiten
 
Zuletzt bearbeitet:
Zurück
Oben