hyman Hallo Horst,
Anbei mal mein ProofOfConcept einer Statemachine mit drei Zuständen und 2 Eingängen. Es ist sicherlich noch einiges zu tun (Initialisierung und nicht vorgesehene Tastenbetätigungen führen noch auf State0,...) aber durch die Nutzung der internen previous Variablen ist es möglich auf eine Rückführung zu verzichten und die Statemachine einfach durchzusimulieren.
Die binären Tastenbetätigungen (Taster kurz und Taster lang) werden für die Statemachine über die Treppenlichtzeit nur für (hier 1s) auf den aktuellen Wert gesetzt und fallen danach auf den Wert für ungültig 255 zurück. Das Ganze geht sicherlich noch eleganter, aber erstmal ist mir nichts anderes eingefallen.
Der Vollständigkeit halber kurz die Formel aus dem Block Telegrammselektion "{Trigger:b} ? {Wert:N} :255"
In der Statemachine wird der aktuelle State in Formel4 zusammengefasst, dabei wird der Wert nur geändert, wenn ein Taster nicht als ungültig (255) gekennzeichnet ist.
Die Formeln 1-3 greifen dann jeweils über _previousOut4_ auf den aktuellen State zurück und überprüfen die Ausstiegsbedingungen aus dem State. Wenn eine Bedingung erfüllt ist, wird die neue Statenummer gesetzt, ansonsten wird der Wert Null zurückgeliefert. Auch hier gilt natürlich, das alle Bedingungen enthalten sein müssen. Bei vielen Bedingungen wird die Formel schnell unübersichtlich. Formel1 berücksichtigt zusätzlich den State0, um aus der Initialisierung zu kommen (muss später überarbeitet werden).
Formel4 berechnet den neuen State wenn ein Taster betätigt wurde aus der Summe der Formeln 1-3 (hier könnte noch ein Abfangen einer Fehlberechnung ergänzt werden).
Statemachine.JPG Formeln.JPG
Anbei mal mein ProofOfConcept einer Statemachine mit drei Zuständen und 2 Eingängen. Es ist sicherlich noch einiges zu tun (Initialisierung und nicht vorgesehene Tastenbetätigungen führen noch auf State0,...) aber durch die Nutzung der internen previous Variablen ist es möglich auf eine Rückführung zu verzichten und die Statemachine einfach durchzusimulieren.
Die binären Tastenbetätigungen (Taster kurz und Taster lang) werden für die Statemachine über die Treppenlichtzeit nur für (hier 1s) auf den aktuellen Wert gesetzt und fallen danach auf den Wert für ungültig 255 zurück. Das Ganze geht sicherlich noch eleganter, aber erstmal ist mir nichts anderes eingefallen.
Der Vollständigkeit halber kurz die Formel aus dem Block Telegrammselektion "{Trigger:b} ? {Wert:N} :255"
In der Statemachine wird der aktuelle State in Formel4 zusammengefasst, dabei wird der Wert nur geändert, wenn ein Taster nicht als ungültig (255) gekennzeichnet ist.
Die Formeln 1-3 greifen dann jeweils über _previousOut4_ auf den aktuellen State zurück und überprüfen die Ausstiegsbedingungen aus dem State. Wenn eine Bedingung erfüllt ist, wird die neue Statenummer gesetzt, ansonsten wird der Wert Null zurückgeliefert. Auch hier gilt natürlich, das alle Bedingungen enthalten sein müssen. Bei vielen Bedingungen wird die Formel schnell unübersichtlich. Formel1 berücksichtigt zusätzlich den State0, um aus der Initialisierung zu kommen (muss später überarbeitet werden).
Formel4 berechnet den neuen State wenn ein Taster betätigt wurde aus der Summe der Formeln 1-3 (hier könnte noch ein Abfangen einer Fehlberechnung ergänzt werden).
Statemachine.JPG Formeln.JPG
Kommentar