Seite 2 von 5

Re: Universeller Zustandsautomat

Verfasst: Sa Aug 25, 2018 12:04 am
von Chris M.
supernode hat geschrieben: Fr Aug 24, 2018 10:44 pm Sollte es mehr tabellarisch werden hatten wir ja das Thema FSM/LUT im KNX UF auch schon diskutiert. Damit lassen sich so einfache State-Machines ja auch realisieren. Meiner Meinung nach oft auch übersichtlicher als graphisch.
Ich kann mir nicht vorstellen, das eine Tabellenlösung übersichtlicher ist als eine grafische (wenn die nicht bewusst unleserlich gemalt wurde).
Auch meine Erfahrung mit Source-Dokumentation von riesigen Software-Produkten (mehrere 10.000 Seiten!) zeigt, dass die Zustandsautomaten grafisch dokumentiert werden.
supernode hat geschrieben: Fr Aug 24, 2018 11:32 pm Dabei sollte man auf jeden Fall auch auf das Debugging achten, d.h. Breakpoints auf einzelne Zustände oder eben Zeilen im obigen Beispiel setzen und schrittweise ausführen.
Ich befürchte wir haben unterschiedliche Vorstellungen von einem Zustandsautomaten: ich wüsste nicht wie sich Breakpoints mit einem Zustandsautomaten verheiraten lassen. Entweder bin ich in dem einen Zustand - oder in einem anderen. Eine Pause dazwischen gibt es nicht.

Eine Pause-Taste die den aktuellen Zustand einfriert macht dagegen viel Sinn (war es das was Du mit einem Breakpoint haben wolltest?), genau so wie die Möglichkeit beim Entwickeln einen Zustandsübergang zu erzwingen, so wie eine Live-Anzeige welcher Zustand aktuell gültig ist.

Re: Universeller Zustandsautomat

Verfasst: Sa Aug 25, 2018 12:22 am
von StefanW
Nein Jochen, wir sind rein Tabellarisch orientiert unterwegs, weil ich das für wesentlich einfacher halte (jeder kann Excel) als grafische Objekte wie in einem Schnittmuster herumzuschieben.

Seh Dir den 1-Wire Geräteeditor an. Der ist tabellarisch und dabei außerordentlich mächtig. Was da in einer Zeile steht, braucht bei manchen grafischen Editoren eine ganze Seite mit 15 Boxen. Das ist nicht wirklich übersichtlich, es sieht lediglich "toll" aus, aber man braucht eigentlich viel zu lange um das für einen wichtige zu finden und zu verstehen.

Es gibt nichts plazsparenderes wie eine Tabelle. Unsere Editoren sind alle ähnlich aufgebaut und zu bedienen. Hat man mal das Konzept der Suche und des Filters und des Sortierens erfasst - insbesondere die MAcht der TAGs - dann hat man es total leicht, immer einen Überblick über die passende Funktionengruppe zu haben, daher bleiben wir bei Zeilen und Zellen.

Bitte also die Ideen in der Hinsicht State Maschine so weiterentwickeln... (Muss noch klick machen bei mir, vielleicht kann man mir das als Abfolge eines nächtlichen Rasensprenges mit Umschalten nach Zeit, Regenmesser, Bodenfeuchtefühler und mehreren nacheinander zu schaltenden Ventilen erklären)?


lg

Stefan

Re: Universeller Zustandsautomat

Verfasst: Sa Aug 25, 2018 12:49 am
von Chris M.
StefanW hat geschrieben: Sa Aug 25, 2018 12:22 am Nein Jochen, wir sind rein Tabellarisch orientiert unterwegs, weil ich das für wesentlich einfacher halte (jeder kann Excel) als grafische Objekte wie in einem Schnittmuster herumzuschieben.
Dann hast Du nur eine neue textuelle Programmiersprache geschaffen die nicht mal effizient per Texteditor zu programmieren ist...

StefanW hat geschrieben: Sa Aug 25, 2018 12:22 am Es gibt nichts plazsparenderes wie eine Tabelle.
Platz sparen ist beim Programmieren eine komplett falsche Optimierungsrichtung!
Code ist wesentlich schneller geschrieben als man ihn lesen kann. Das ist der Fluch des Programmierens! Wenn Du nach einem Jahr nachvollziehen willst, was Du damals geschrieben hast und warum, dann dauert das ca. 10x so lange wie das Schreiben.
Kommentare im Code helfen nur bedingt, denn Kommentieren ist eine Kunst die erst gelernt und gemeistert werden will.

Von daher muss das Ziel und die Optimierungsrichtung die sein, es so leicht wie möglich zu machen zu verstehen, was damals programmiert wurde und wieso. Egal wie viel Platz das braucht.
(Natürlich hilft es, wenn es kompakt ist und auf eine Seite passt. Wenn dadurch aber die Verständlichkeit leidet war's kontraproduktiv)

StefanW hat geschrieben: Sa Aug 25, 2018 12:22 am Bitte also die Ideen in der Hinsicht State Maschine so weiterentwickeln... (Muss noch klick machen bei mir, vielleicht kann man mir das als Abfolge eines nächtlichen Rasensprenges mit Umschalten nach Zeit, Regenmesser, Bodenfeuchtefühler und mehreren nacheinander zu schaltenden Ventilen erklären)?
Die Möglichkeit für Tabellen sind hier sehr mühsam, daher stark minimal das Beispiel:
Tabelle 1: Zustände:

Code: Alles auswählen

Nr| Name    | Aktion
---+--------+-------
 1 | Aus    | Sende alle Ventile ZU
 2 | Vorne  | Sende Ventil vorne AUF
 3 | Hinten | Sende Ventil vorne ZU + hinten AUF

Tabelle 2: Zustandsübergänge

Code: Alles auswählen

  | Init | 1 | 2 | 3
--+------+---+---+---
1 | A    | - | B | C
2 | -    | D | - | -
3 | -    | - | E | -

Bedingungen für die Zustandsübergänge:
A: Immer
B: Not-Aus-Paket kommt gerade über den Bus rein
C: Not-Aus-Paket kommt gerade über den Bus rein ODER Timer>30Min
D: (aktuelle Uhrzeit>3 Uhr UND Bodenfeuchte<x% UND Regenmesser=kein Regen) ODER (Paket Erzwinge Bewässern wird gerade vom Taster gesendet)
E: Timer>30Min
(Für's Verständnis wichtig: ein Zustandsautomat hat immer einen Zustand und reagiert auf Events. )

Re: Universeller Zustandsautomat

Verfasst: Sa Aug 25, 2018 1:38 am
von supernode
Für kleine FSMs mit wenig States und Übergängen bzw. Übergangsbedingungen sehe ich auch vorteile bei der graphischen Beschreibung. Auch zu Dokumentationszwecken wo Leute einen Überblick über das System erhalten sollen.
Wird eine FSM größer so herrscht dort schnell die Unübersichtlichkeit. Da ist es für mich (!) deutlich übersichtlicher das textuell/tabellarisch zu sehen.

Ich komme aus der programmierbaren Logik-Ecke und da sind FSMs sehr wohl getaktet und reagieren nicht unmittelbar auf Events. Ein "immer" ist in einigen Branchen demnach nicht korrekt. Aus System-Sicht ist das was du schreibt aber schon in Ordnung, da geht man weniger auf diese Details von Zeitabläufen und Synchronität ein.

Breakpoints ließen sich wohl realisieren wenn bei der Berechnung eines Zustands, was bei Änderungen an den Eingängen, im periodischen Raster (getaktete FSM) oder nach einem Wechsel eines Zustands geschieht die Abarbeitung anhält. Auch ließe sich auf bestimmte Eingangs-Kombination oder Werten von Ausgängen triggern.
Ein Einfrieren ließe sich ja auch über Breakpoint bzw. die Anhaltefunktion realisieren. Das sollte dann natürlich nur die eine FSM anhalten und nicht die ganze Logic Engine. Auch ein Trace/History wäre hilfreich um zu sehen wieso man in einem Zustand gelandet ist oder woher man kam. Eine Live-Anzeige wird schwierig wenn man häufige Zustandsübergänge hat.

Noch eine Ergänzung: vieleicht sollte man FSMs und LUTs, so wie ichs oben im vorherigen Post beschrieben habe, auch auseinanderhalten. Mit LUTs kann man FSMs realisieren, aber es ist nicht deren Kernaufgabe. Eigentlich sinds ja auch nicht mal LUTs sondern eine Art if-elsif-Zweige

Hinzugefügt nach 20 Minuten 12 Sekunden:
Beispiel: Wir schalten um 3 Uhr ein und und um 5 aus. Wenn eine Bewegung erkannt wird schalten wir unmittelbar aus.
Zwischen einschalten der Ventile 1 und 2 vergehen 5 Minuten. Alles sollte man sich als Tabelle vorstellen, links die Eingänge, rechts die Ausgänge.
Dann pro Zeile ein Fall der bei der Ausführung analysiert wird. Zeilen weiter oben haben höhrere Priorität.

Eingänge:
- R (Reset, bool) -> Neustart
- B (Bewegungsmelder, bool) -> Abschalten
- T (Timer, Event, Jede Minute)
- U (Aktuelle Uhrzeit)

Lokal genutzte Variablen oder Realisiert über externen Feedback (Ein- und Ausgänge)
- ST (State, string, Default: "off")

Ausgänge:
- V1 (Ventil 1, bool)
- V2 (Ventil 1, bool)

Legende:
X = don't care
- = keine Zuweisung
E = Event

Tabelle:
Zeile 1 (Reset-Fall, Abschalten):
Eingangsfilter: ST = X, R = true, B = X, T = X, U = X
Ausgangszuweisung: ST = "off", V1 = false, V2 = false

Zeile 2 (Bewegungsmelder):
Eingangsfilter: ST = "on" OR "on_delay",R = false, B = true, T = X, U = X
Ausgangszuweisung: ST = "off", V1 = false, V2 = false

Zeile 3 (einschalten):
Eingangsfilter: ST = "off", R = 0, B = true, T = E, U = 3uhr
Ausgangszuweisung: ST = "on_delay", V1 = true, V2 = false

Zeile 4 (einschaltverzögerung):
Eingangsfilter: ST = "on_delay", R = false, B = false, T = E, U = 3uhr 5 minuten
Ausgangszuweisung: ST = "on", V1 = true, V2 = true

Zeile 5 (abschalten, Fängt die Fälle der inaktiven Zeit):
Eingangsfilter: ST = "on", R = false, B = false, T = E, (U > 5uhr) OR (U < 3uhr)
Ausgangszuweisung: ST = "off", V1 = false, V2 = false


Ich hoffe man verstehts einigermaßen. So spät am Abend ist das schon eine Meisterleistung :-)

Re: Universeller Zustandsautomat

Verfasst: Sa Aug 25, 2018 4:20 pm
von StefanW
StefanW hat geschrieben: Sa Aug 25, 2018 12:22 amDann hast Du nur eine neue textuelle Programmiersprache geschaffen die nicht mal effizient per Texteditor zu programmieren ist...
ähh, doch. Unsere Logiken können sehr wohl auch mit einem Texteditor programmiert werden. Nennt sich "Custom" und nimmt beliebig komplexe Verschaltungen in Textform auf.

StefanW hat geschrieben: Sa Aug 25, 2018 12:22 amPlatz sparen ist beim Programmieren eine komplett falsche Optimierungsrichtung!
Für einen Programmierer womöglich nicht, aber für einen Elektriker der eine handvoll Logikfunktionen realisieren will ist es sehr hilfreich, das strukturiert zusehen. Zumindest ist das unser Gedanke.

lg

Stefan

Re: Universeller Zustandsautomat

Verfasst: Sa Aug 25, 2018 5:30 pm
von Dragonos2000
Lassen wir uns überraschen, was Ihr Euch ausgedacht habt...

Re: Universeller Zustandsautomat

Verfasst: Sa Jan 19, 2019 12:59 pm
von Dragonos2000
@StefanW
Um das Thema nochmal aufzugreifen: Im Zusammenspiel mit dem angekündigten universellen Objekteditor/Dispatcher (Ihr nennt das DOS, glaube ich), wird da einschöner Schuh draus und viele Alltragsprobleme lassen sich elegant lösen. Ich denke da allein schon an die Beschattungssteuerung oder Szenensteuerung. Ich sehe enormes Potential. Habt Ihr da noch weiter drauf rumgedacht in den letzten Monaten?

Wenn ich mir die Votings ansehe muss ich zugeben, dass es nicht so wichtig zu sein oder ist in Vergessenheit geraten.

Re: Universeller Zustandsautomat

Verfasst: Sa Jan 19, 2019 1:13 pm
von StefanW
Wir haben über eine Menge nachgedacht, aber das ist nicht alles so einfach das immer zu beschreiben.

Schaut Euch mal das Gehaue und Gesteche im KNXUF an. Da weden auch Dinge, die ich irgendwann mal sagte dass ich darüber nachdenke oder als möglicherweise realisierbar habe erscheinen lassen, mir nun als gebrochene Versprechen (etwas vereinfacht dargestellt) angehängt.

Selbst dass wir die wöchentlichen Fortentwicklung unseres Kataloges mit Euch geteilt haben (zefix, andere teilen täglich Ihre Katzenfotos auf Instagramm...) wird mir heute negativ ausgelegt.

Ich muss mir daher überlegen, wie ich auftrete und was ich noch sagen soll über unsere Gedanken und was nicht. Mein derzeitiger Eindruck ist, weniger sagen ist besser.

Daher bitte ich um Verständnis, wenn ich mich in Fragen zu unseren internen Planungen und Gedanken eher zurückhaltend äußere.

lg

Stefan

Re: Universeller Zustandsautomat

Verfasst: Sa Jan 19, 2019 1:28 pm
von Dragonos2000
Ist in Ordnung, Stefan.
Falls gewünscht, können wir uns gerne mal offline über meine Gedanken zum ein oder anderen FR von mir austauschen. Denn entweder seh nur ich die Potentiale, oder habe ne falsche Vorstellung.
Bemerkung am Rande: Ein bestimmter Thread im KNXUF k*tzt mich mega an und es ist beschämend, wie eine Handvoll Leute Stimmung machen (vor Allem geduldeter maßen), anders denkende Diffamieren und keine Ruhe geben. Irgendeiner fängt immer wieder an...

Re: Universeller Zustandsautomat

Verfasst: Sa Jan 19, 2019 1:54 pm
von FabKNX
Dragonos2000 hat geschrieben: Sa Jan 19, 2019 1:28 pm Ist in Ordnung, Stefan. ...
Bemerkung am Rande: Ein bestimmter Thread im KNXUF k*tzt mich mega an und es ist beschämend, wie eine Handvoll Leute Stimmung machen (vor Allem geduldeter maßen), anders denkende Diffamieren und keine Ruhe geben. Irgendeiner fängt immer wieder an...
Sehe ich ähnlich. Aus meiner beschränkten Sicht solltest du die Trolle in dem thread einfach schreiben lassen und gar nicht mehr oder nur sehr kurz antworten. Du hast doch echt alles gesagt. Es wird doch ehh nicht angenommen.

Bin schon am überlegen, wie man auch dort wie wieder etwas mehr technische Themen ins Rollen bringen kann. Ohne diese Trolle.

Ich denke mit den neuen Sensoren (Bodenfeuchte z.B.) kann das wieder gelingen.