[1.6IP3] Bug oder cooles Feature?

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Antworten

Ersteller
Robert_Mini
Reactions:
Beiträge: 2369
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 591 Mal
Danksagung erhalten: 1068 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) / Wiregate-Fan


blaubaerli
Reactions:
Beiträge: 822
Registriert: Sa Sep 15, 2018 10:26 am
Hat sich bedankt: 274 Mal
Danksagung erhalten: 184 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: 546
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 73 Mal
Danksagung erhalten: 495 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: 2369
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 591 Mal
Danksagung erhalten: 1068 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) / Wiregate-Fan


S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 546
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 73 Mal
Danksagung erhalten: 495 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“