Seite 3 von 4

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 5:38 pm
von Robosoc
terseek hat geschrieben: Mo Nov 15, 2021 3:57 pm ist mir jetzt ganz peinlich, aber mein Zustandsdiagramm hatte einen Fehler, eine Folge "A", "A", "B" würde nicht erkannt werden.
Kein Problem , die Logik, die wir im Kopf haben, würde das korrekt bearbeiten.

Du wirst mit den Einstellungen der Eingangs- und Ausgangsverhalten selber festlegen können, wann der Zustand gesendet werden soll.

BEISPIEL
Wenn am Eingang in irgendeinem zeitlichen Verlauf sowas kommt,
A-A-A-B-B-B-A-A
dann erreichst Du mit einem C am Eingang oder am Ausgang ( wäre hier denke ich egal) Folgendes, wobei X für keine Aktivität am Ausgang steht
X-X-X-1-X-X-0-X

Wenn Du aber gerne sowas hättest
0-0-0-1-1-1-0-0
oder sogar sowas
0-0-0-1-0-0-0-0
müssten wir den Code, den wir im Kopf haben,nochmal umstellen.

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 6:27 pm
von terseek
Robosoc hat geschrieben: Mo Nov 15, 2021 5:38 pm oder sogar sowas
0-0-0-1-0-0-0-0
das wäre das erwartete Ergebnis

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 6:55 pm
von Robosoc
Okay, das heißt im Klartext, du möchtest dass die Logik-Zelle mit jedem gesendeten Wert getriggert wird, aber nur bei dem einmaligen Ereignis, dass die Sezene 15 auf 27 wechselt, ein TRUE gesendet bekommen. Bei jedem Andern Fall soll aktiv ein False gesendet werden.

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 7:03 pm
von Matze76
Robosoc hat geschrieben: Mo Nov 15, 2021 6:55 pm Okay, das heißt im Klartext, du möchtest dass die Logik-Zelle mit jedem gesendeten Wert getriggert wird, aber nur bei dem einmaligen Ereignis, dass die Sezene 15 auf 27 wechselt, ein TRUE gesendet bekommen. Bei jedem Andern Fall soll aktiv ein False gesendet werden.
Ich komme jetzt erst zur Umsetzung. Aber genau das sollte mit unserem Ansatz automatisch passieren.

Nachdem 1 x genau der Zustand alt = 15, neu = 27 eingetreten ist, wechselt es auf false. Denn dann wechselt es zu alt = 27 und neu = 27 und die Bedingung ist nicht mehr erfüllt. Jedenfalls wenn als Eingangsbedingung "a" ausgewählt ist und damit alle Telegramme die Logik triggern.

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 7:20 pm
von Robosoc
Matze76 hat geschrieben: Mo Nov 15, 2021 7:03 pm
Robosoc hat geschrieben: Mo Nov 15, 2021 6:55 pm Okay, das heißt im Klartext, du möchtest dass die Logik-Zelle mit jedem gesendeten Wert getriggert wird, aber nur bei dem einmaligen Ereignis, dass die Sezene 15 auf 27 wechselt, ein TRUE gesendet bekommen. Bei jedem Andern Fall soll aktiv ein False gesendet werden.
Ich komme jetzt erst zur Umsetzung. Aber genau das sollte mit unserem Ansatz automatisch passieren.
Stimmt, klar. Man muss den Ein- und Ausgang lediglich auf a= always stellen :-)

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 7:34 pm
von Matze76
@terseek , dann schau mal. Nach meinen ersten Tests würde ich sagen, dass es funktioniert ;)

Code: Alles auswählen

/**###################################################################################
#  Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL      #
#  ("Timberwolf Open Logic Block License"), die unter https://wrgt.news/TOLL          #
#  zum Download zur Verfügung steht.                                                 #
####################################################################################*/

{
  "Level": [
    ["$AktuellerWert","integer",0],  
    ["$LetzterWert","integer",0],
    ["$Output","bool",false],
    ["$ErwartetLetzter","integer",0],  
    ["$ErwartetAktuell","integer",0],
    ["$VergleichAktuell","bool",false],
    ["$VergleichLetzter","bool",false],
    ["$ConstTrue","bool",true],
    ["$UnusedInt","integer",0],
    ["$VAR<Inhibit?>","bool",false]
  ],
  "Module": [
    ["Break",["$VAR<Inhibit?>"]],
    ["Limiter","$LetzterWert","$UnusedInt","$VergleichLetzter",["$ErwartetLetzter", "$ErwartetLetzter"]],
    ["Limiter","$AktuellerWert","$UnusedInt","$VergleichAktuell",["$ErwartetAktuell", "$ErwartetAktuell"]],
    ["And" , ["$VergleichLetzter" , "$VergleichAktuell" ], "$Output"],
    ["Latch","$AktuellerWert","$LetzterWert","$ConstTrue",0]
  ],
  "Input": [
    ["Aktueller Wert","Empfangener Wert","$AktuellerWert","a"],
    ["Erwartet letzter","Erwarteter letzter Wert, damit die Bedingung erfüllt ist","$ErwartetLetzter","u"],
    ["Erwartet aktuell","Erwarteter aktueller Wert, damit die Bedingung erfüllt ist","$ErwartetAktuell","u"],
    ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
  ],
  "Output": [
    ["relevanter Wechsel?","wird true, wenn letzter Wert und aktueller Wert jeweils den eingestellten erwarteten Werten entsprechen","$Output","a"]
  ]
}
An den Eingängen "Erwartet letzter" und "Erwartet aktuell" einfach die gewünschten Zahlen als Parameter vorgeben.

Bild

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 7:53 pm
von terseek
Hallo Sven, hallo Matthias,

vielen, vielen Dank für Eure Mühe.

Wenn ich sehe, was herausgekommen ist, ist mir nun klar, warum ich für das eigentlich so klein erscheinende Problem keine Lösung gefunden habe.

Ich kann die Logik erst am Ende der Woche testen weil ich derzeit keinen Zugriff auf meinen TWS habe. Werde dann berichten.

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 8:08 pm
von Matze76
Gern geschehen, ist auch immer eine gute Übung, um drin zu bleiben. Der Code sieht schlimmer aus als er ist. Die Logik steckt eigentlich nur in den vier Zeilen im Bereich "Module" (Break ist hier nicht entscheidend).

Für interessierte Neueinsteiger in die Custom-Logik auch ein gutes und überschaubares Beispiel dafür, wie man Werte für den nächsten Aufruf zwischenspeichern kann. Das geht m.E. so auch nur mit Custom-Logik. Entscheidend ist die Reihenfolge, da die Module Zeile für Zeile abgearbeitet werden. Habe auch etwas gebraucht, bis mir das alles so klar wurde.

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 8:17 pm
von Robosoc
Matthias, bitte ergänze noch folgendes in deinem Code oder zumindest im Beitrag
Nutzungsrechte:
Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.

Re: wie Zustandsänderung erkennen

Verfasst: Mo Nov 15, 2021 8:23 pm
von Matze76
Danke für den Hinweis, ist erledigt!