Seite 1 von 1

[1.6IP3] Bug oder cooles Feature?

Verfasst: So Jun 28, 2020 9:25 am
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"]
    ]
}

Re: [1.6IP3] Bug oder cooles Feature?

Verfasst: So Jun 28, 2020 9:42 am
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

Re: [1.6IP3] Bug oder cooles Feature?

Verfasst: Mo Jun 29, 2020 1:11 pm
von S. Kolbinger
Damit sollte das Senden noch einfacher anpassbar werden:
viewtopic.php?p=24900#p24900

Re: [1.6IP3] Bug oder cooles Feature?

Verfasst: Mo Jun 29, 2020 10:31 pm
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

Re: [1.6IP3] Bug oder cooles Feature?

Verfasst: Do Jul 02, 2020 7:42 am
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.