UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[1.6IP3] Bug oder cooles Feature?

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
Antworten

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

[1.6IP3] Bug oder cooles Feature?

#1

Beitrag von Robert_Mini »

Hallo zusammen!

Ich habe gestern lange gesucht, warum eine Logik permanent sendet, obwohl am Ausgang Option "c" on change stand und der Wert konstant 0 ist.

Lösung: Der Wert der Ausgangsvariable wird in der Logik temporär verändert und dann wieder mit 0 überschrieben.
Ich hätte hier erwartet, dass die Prüfung auf "change" nur am Ende der Logik erfolgt, offensichtlich passiert das aber permanent.

Nun zur Frage an @S. Kolbinger und @StefanW: ist das ein Bug oder ein Feature?
Ich vermisse nämlich permanent die Möglichkeit, einen Wert "ausnahmsweise" zu senden, obwohl er sonst nur "on change" und "timer" gesendet wird.
Einen Float um 0.001 zu ändern war mir bisher aber zu krumm.

Mit dem obigen Verhalten habe ich aber dafür nun einen Workaround gefunden, mit dem man einen "Send-Trigger" ähnlich dem "Triggered" -Modul (am Eingang) simulieren kann.
Ich will diesen Weg aber nur verwenden (und dokumentieren!!), wenn er NICHT als Bug gesehen wird und irgendwann behoben wird!


Der Testcode unten braucht noch einen Trigger Eingang mit zb 30s.

Danke und lg
Robert

Code: Alles auswählen

{
    "Level":[
        ["$I_Fuellstand","float",0.0],
	["$Drehzahl_Soll_Lim","float",100.0],
	["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$KonstTrue","bool",true]
    ],
    "Module":[
  	["Latch","$Konst1","$Drehzahl_Soll_Lim","$KonstTrue",0],
        ["Latch","$Konst0","$Drehzahl_Soll_Lim","$KonstTrue",0]
    ],
    "Input":[
        ["Aktueller Füllstand","Aktueller Füllstand","$I_Fuellstand","a"]
    ],
    "Output":[
        ["Drehzahl","Solldrehzahl in Prozent","$Drehzahl_Soll_Lim","c"]
    ]
}
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

blaubaerli
Reactions:
Beiträge: 2308
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 884 Mal
Danksagung erhalten: 677 Mal

#2

Beitrag von blaubaerli »

Moin Robert,

ich meine mich ziemlich sicher daran zu erinnern, dass Stefan Kolbinger dieses Verhalten mal so als „works as designed“ beschrieben hat. Ich vermag aber den passenden Thread nicht zu finden bzw. zu zitieren.

Beste Grüße
Jens
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 558 Mal

#3

Beitrag von S. Kolbinger »

Damit sollte das Senden noch einfacher anpassbar werden:
viewtopic.php?p=24900#p24900
Gruß,
Stefan K.

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#4

Beitrag von Robert_Mini »

Hallo Stefan!

Nachdem du darauf nicht 100% eingegangen bist: ist das aktuelle Verhalten (eine temporäre Änderung triggert bereits das "on change") wie oben beschrieben damit "as designed". Damit könnte man nämlich auch bei der Sendeoption "ct" ein Senden triggern...

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

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 558 Mal

#5

Beitrag von S. Kolbinger »

Hallo Robert,
Robert_Mini hat geschrieben: Mo Jun 29, 2020 10:31 pm Nachdem du darauf nicht 100% eingegangen bist: ist das aktuelle Verhalten (eine temporäre Änderung triggert bereits das "on change") wie oben beschrieben damit "as designed". Damit könnte man nämlich auch bei der Sendeoption "ct" ein Senden triggern...
sorry für meine kurz gehaltene Antwort.
Die ganze Wahrheit ist, dass ich beim Design der Logik-Engine eher in Schaltungstechnik, als in Programmierung gedacht hatte.
Ein mehrmaliges Setzen/Beschreiben eines Levels während eines Logik-Durchlaufes hatte ich erst mal nicht vorgesehen. (Würde ja bedeuten, dass mehrere Ausgangstreiber dieselbe Leitung treiben!)
Und so setze ich bei jeder Werteänderung das "changed"-Flag des Levels.
Dieses Flag wird am Anfang des Logik-Durchlaufes gelöscht und am Schluß ausgewertet (für die Sendeoption "C").
Das kann bei mehrmaligem Ändern dazu führen, dass der "onChange" Trigger anspricht, obwohl der Wert am Schluß gleich dem Anfangs-Wert ist.

Dieses Verhalten kann man sich natürlich zunutze machen (cooles Feature) oder als falsches irreführendes Verhalten (Bug) sehen.
Aber ich hoffe, dass der Workaround (mehrmaliges Setzen eines Levels, um das senden zu erzwingen) mit dem "Sendexplicit" nicht mehr notwendig ist.
Gruß,
Stefan K.
Antworten

Zurück zu „Logikengine & Logik-Editor“