KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[DISKUSSION] Fragen zur State Machine

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Benutzeravatar

Eraser
Reactions:
Beiträge: 677
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 281 Mal

#11

Beitrag von Eraser »

MiniMaxV2 hat geschrieben: So Mai 03, 2020 6:17 pm Vereinfachung der Schaltkreise (KV-Diagramme)
Das waren noch Zeiten mit KV... schön wars :lol:
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

Ersteller
Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1264 Mal
Danksagung erhalten: 2213 Mal

#12

Beitrag von Robert_Mini »

Genau. Natürlich gilt jede Variable vorher wie nachher.

Danke für die Hilfe.
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1264 Mal
Danksagung erhalten: 2213 Mal

#13

Beitrag von Robert_Mini »

Hallo Hans-Martin!

Du wolltest es so ;) :dance:
MiniMaxV2 hat geschrieben: So Mai 03, 2020 6:17 pm Und klar - immer her mit den Fragen :angelic-blueglow:
Hab nun das Zustandsdiagramm (falls man das überhaupt so nennt) nochmal gezeichnet und die Tabelle dazu fertiggestellt.
Jetzt ist mir auch klar, warum ich da bei der klassischen Programmierung noch ein paar Bugs hatte, den die Zustände sind doch komplizierter als erwartet.
Ich habe auch verstanden, dass jeder Zustand auf eine Änderung von SV und IN reagieren muss, damit keine State "hängen bleibt".

Was mich im Vergleich zu deinem Beispiel weiter oben interessiert: Warum ordnest du deinen Zustandsübergangstabelle nach den Bedingungen.
In meinem Fall habe ich diese der Reihe nach entsprechend den States geordnet.
Mit ist klar dass die Reihenfolge einer Priorisierung entspricht und vermute, dass das bei dir der Grund ist?

In jedem Fall habe ich an der State Machine Gefallen gefunden, auch wenn ich gerade erst begonnen habe.

lg
Robert
Automower_Statemachine_neu.png
Automower_Statemachine_Tabelle.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Robert_Mini am Do Mai 07, 2020 10:56 pm, insgesamt 3-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

MiniMaxV2
Reactions:
Beiträge: 278
Registriert: Sa Jan 12, 2019 8:41 pm
Wohnort: Bremen
Hat sich bedankt: 342 Mal
Danksagung erhalten: 151 Mal

#14

Beitrag von MiniMaxV2 »

Hi Robert,
ich merke schon - du fängst an dich für Automaten zu begeistert. Das Ganze hat schon ne schöne Struktur und wir übersichtlicher. Was mir dabei ins Auge springt, du behandelst die "Timeouts" spearat. Sie gehören aber mit in die "Übergangsbedingung".

Code: Alles auswählen

SV=1,IN=0,T_Laden=*,T_Mähen=* | 0 | 1 | Zustand 0 => suchen
...
SV=1,IN=1,T_Laden=1,T_Mähen=* | 2 | 4 | Ende Laden => warten
Damit kannst du einfach die erste Spalte als Bedingung nutzen. Und vereinfachen tust das Ganze, indem du die Klauseln mit einem * streichst.

Was mir dann noch auffällt, dir fehlen da ein paar Übergänge (es sei denn, sie sind gekürzt, da sei keinen Übergang verursachen). z.B. bei der Ersten "Gruppe"- SV=1 & IN=0 sowie SV=1 & IN=1 (T_M=*, T_L=*) eingegeben. Aber was ist mit SV=0 & IN=0 sowie SV=0 & IN=1 ? Vielleicht hast du da ja schon implizit gedacht, dass dann der Zustand bleibt.


Zu deiner Frage mit der Reihenfolge - ich habe bei meinem Beispiel am Anfang die "Abbruchbedingungen" und danach die "normalen" Übergänge. Da gibt's natürlich auch ausnahmen, wenn aufgrund der Vereinfachung die Übergänge nicht Eindeutig ist aber einer die "Prio" bekommt.
LG
Hans Martin
timberwolf413 (950Q) - VPN offen - reboot erlaubt / timberwolf610 (950Q) - VPN offen - reboot erlaubt

Ersteller
Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1264 Mal
Danksagung erhalten: 2213 Mal

#15

Beitrag von Robert_Mini »

Hy Hans-Martin!

Völlig richtig, bin begeistert.

Danke für die weiteren Erläuterungen. "Alles" klar.

Zum Hinweis mit den Timeouts: ist mir bewußt, dass das für die Übergangstabelle auch eine Bedingung ist, die Tabelle ist aufgrund des Eingabeformats in der TWS State Maschine so entstanden.

Danke und lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1264 Mal
Danksagung erhalten: 2213 Mal

#16

Beitrag von Robert_Mini »

Kleiner Nachtrag:
Es hatte schon einen Grund, dass ich die Timeouts separat hatte (und die Übergangsbedingung war ursprünglich auch leer).
Die Syntax des LE will bei Timeouts keine Übergangsbedingung sondern einfach eine 0.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

MiniMaxV2
Reactions:
Beiträge: 278
Registriert: Sa Jan 12, 2019 8:41 pm
Wohnort: Bremen
Hat sich bedankt: 342 Mal
Danksagung erhalten: 151 Mal

#17

Beitrag von MiniMaxV2 »

Hi Robert,
dann hab ich nicht verstanden, was du mit Timeout meinst :think:
Hast du ein Beispiel?
LG
Hans Martin
timberwolf413 (950Q) - VPN offen - reboot erlaubt / timberwolf610 (950Q) - VPN offen - reboot erlaubt

Ersteller
Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1264 Mal
Danksagung erhalten: 2213 Mal

#18

Beitrag von Robert_Mini »

Hy Hans-Martin!

Mit Timeout meine ich, dass ein Zustand nach einer gewissen Zeit automatisch in den nächsten wechselt, ohne dass sich SV oder IN ändern. zb im Posting 13 von 2 => 4.

Ich habe erst jetzt verstanden, dass der Timeout als Parameter beim Übergang in den nächsten Zustand, der zeitlich begrenzt sein soll, mitgegeben werden muss (was bei genauer Überlegung genial ist). D.h. damit der Zustand 2 zeitlich begrenzt wird, muss jeder Zustand der in 2 springt diesen Timer auch starten.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

MiniMaxV2
Reactions:
Beiträge: 278
Registriert: Sa Jan 12, 2019 8:41 pm
Wohnort: Bremen
Hat sich bedankt: 342 Mal
Danksagung erhalten: 151 Mal

#19

Beitrag von MiniMaxV2 »

Hi Robert,
ach du meinst den trigger timer, den die StateMachine im Wolf mitbringt? Jetzt hab ichs verstanden. Dieser ist ja keine "Bedingung" sondern einfach nur eine Angabe für einen automatischen Trigger. Das heißt, dass du den Timer startest, wenn du in den Zustand 2 gehst (0-2;1-2;3-2). Den darauf folgenden Übergang hast du ja dann noch eindeutig beschrieben durch In=1 und SV=1. Du wirst nur so das Problem haben, dass dir die Logik zu oft triggert. Wenn du z.B. vor dem Timer durch bist und sv=1 in=0 in Z3 geht vor dem Timer, kommt die Logik in den Übergang 3-6, was ja nicht gewollt ist. Kurz - die Zeiten im Automaten des Wolfs sind keine "Timeouts", es sind Auto-Trigger. Du wirst für deine Timeouts, die auch als solche definiert sind, separate Timer laufen lassen müssen, wo du erkennen kannst, ob der Timer oder ein anderer Eingang getriggered hat. Das führt dann im Beispiel dazu, dass der Timeout mit als Bedingung rein kommt und dann Sv=1 In=0 Timeout_Mähen=0 gilt und somit kein Übergang "passend" ist - die Statemachine bleibt im Zustand 3. Daher auch immer meine Beschreibung der "Timeouts" als Übergangsbedingung und nicht als AutoTrigger.
LG
Hans Martin
timberwolf413 (950Q) - VPN offen - reboot erlaubt / timberwolf610 (950Q) - VPN offen - reboot erlaubt

Ersteller
Robert_Mini
Reactions:
Beiträge: 3903
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1264 Mal
Danksagung erhalten: 2213 Mal

#20

Beitrag von Robert_Mini »

Hallo Hans-Martin!

Ich glaube da liegst du falsch.
S. Kolbinger hat es als Timeout beschrieben und es funktioniert auch genau so.
=> Übergangsbedingung 0 wertet den laufenden Timeout aus und triggers auch den Übergang in dieser Zeile.
(0,1,3,0) springt von 1 nach 3 wenn ein timeout beim Übergang in 1 gestartet wurde.
Läuft auch so bereits.

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Antworten

Zurück zu „Logikengine & Logik-Editor“