NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[Gelöst] wie Zustandsänderung erkennen

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

Robosoc
Reactions:
Beiträge: 1885
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 639 Mal
Danksagung erhalten: 775 Mal

#21

Beitrag 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.
Zuletzt geändert von Robosoc am Mo Nov 15, 2021 5:40 pm, insgesamt 1-mal geändert.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Ersteller
terseek
Reactions:
Beiträge: 278
Registriert: Mi Sep 05, 2018 1:09 pm
Hat sich bedankt: 508 Mal
Danksagung erhalten: 121 Mal

#22

Beitrag 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
TWS 2600 ID:186 + 3 PBM, VPN offen, Reboot nach Vereinbarung
TWS 3500L ID:895 + 1 PBM, VPN offen, Reboot nach Vereinbarung

Robosoc
Reactions:
Beiträge: 1885
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 639 Mal
Danksagung erhalten: 775 Mal

#23

Beitrag 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.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 195 Mal

#24

Beitrag 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.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

Robosoc
Reactions:
Beiträge: 1885
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 639 Mal
Danksagung erhalten: 775 Mal

#25

Beitrag 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 :-)
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 195 Mal

#26

Beitrag 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
Zuletzt geändert von Matze76 am Mo Nov 15, 2021 8:50 pm, insgesamt 3-mal geändert.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

Ersteller
terseek
Reactions:
Beiträge: 278
Registriert: Mi Sep 05, 2018 1:09 pm
Hat sich bedankt: 508 Mal
Danksagung erhalten: 121 Mal

#27

Beitrag 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.
TWS 2600 ID:186 + 3 PBM, VPN offen, Reboot nach Vereinbarung
TWS 3500L ID:895 + 1 PBM, VPN offen, Reboot nach Vereinbarung

Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 195 Mal

#28

Beitrag 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.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

Robosoc
Reactions:
Beiträge: 1885
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 639 Mal
Danksagung erhalten: 775 Mal

#29

Beitrag 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.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 195 Mal

#30

Beitrag von Matze76 »

Danke für den Hinweis, ist erledigt!
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache
Antworten

Zurück zu „Logikengine & Logik-Editor“