Hallo Robert (
@Robert_Mini),
habe nun eine Custom Logik angelegt - leider klappt es noch nicht ganz so wie gewünscht
Ich nutzte keine Binärmultiplexerlogik um aus den beiden Statuswerten ein Integer zu machen sondern ich addiere die Werte der beiden Statuseingänge einfach. Das ist zwar mathematisch nicht korrekt, funktioniert in diesem Fall aber, so dass ich folgende Ausgangswerte bekomme:
Code: Alles auswählen
Ausgang=0 -> geschlossen
Ausgang=1 -> gekippt
Ausgang=2 -> geöffnet
Den Trigger für ein zyklisches Senden füge ich als zusätzlichen Eingang hinzu.
Die Custom Logik sieht zurzeit so aus (das Triggerintervall von 5 sec ist nur zum testen):
Leider gibt es noch ein Problem beim Wechsel von geöffnet nach gekippt oder geschlossen. Ich vermute, das hängt mit dem 'Reset' Eingang vom Monoflop zusammen. Ich habe hier verschiedene Variablen ausprobiert - leider bisher ohne das gewünschte Ergebnis zu erhalten.
Der Code sieht Zurzeit so aus:
Code: Alles auswählen
/**
* Auswertung Status Fenstergriff
* Eingänge:
* Griffstatus 1 (bool) ($in_1)
* Griffstatus 2 (bool) ($in_2)
* Status 1=0 UND Status 2=0 -> geschlossen
* Status 1=1 UND Status 2=0 -> gekippt
* Status 1=1 UND Status 2=1 -> geöffnet
* Werteänderung verzögern (int) ($in_3)
*
* Ausgang:
* Griffstatus (int) -> 0=geschlossen, 1=gekippt, 2=geöffnet ($out_1)
*
*/
{
"_Meta": { // Optional
"Description": "Auswertung Status Fenstergriff",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["Griffstatus 1", "Griff Status 1", "$in_1", "c"], // Griff Status 1
["Griffstatus 2", "Griff Status 2", "$in_2", "c"], // Griff Status 2
["Verzögerung Griffstatus 2 (s)", "Verzögerung Griffstatus 2 (s)", "$in_3", "u"] // Werteänderung von Griffstatus 2 verzögern (in sec)
],
"Output": [
["Griffstatus", "Griffstatus", "$out_1", "a"]
],
"Level": [
// Eingangs Variablen
["$in_1","bool",false],
["$in_2","bool",false],
["$in_3","integer",1], //Änderunge Griffstatus 2 um 1 Sekunde verzögern
//Zwischenvariablen
["$ausgang_monoflop","bool",false],
["$ausgang_latch","bool",false],
["$griffstatus_berechnen","string","(X1 + X2)"],
// Ausgangs Variablen
["$out_1","integer",0]
],
"Module": [
["Monoflop","$in_2","-$in_2","$ausgang_monoflop","$in_3",3],
["Latch","$in_2","$ausgang_latch","$ausgang_monoflop",2],
["CalcFormula",["$in_1","$ausgang_latch"],"$out_1", "$griffstatus_berechnen"]
]
}
Beim schnellen Wechsel von 'geschlossen' nach 'gekippt' und umgekehrt funktioniert alles wie gewünscht, allerdings wird bei der Änderung von 'geöffnet' nach 'gekippt' bzw. 'geschlossen' der Ausgangswert nicht richtig gesetzt.
Hier mal ein Signalverlauf:
Die rote Linie zeigt eine Änderung von 'geöffnet' nach 'gekippt', der Wert am Ausgang bleibt aber bei '2'.
Bei der orangenen Linie hat der Ausgangswert einen Peak - warum kann ich (noch) nicht sagen.
Ich versuche weiter, das hinzubekommen...
Viele Grüße
Piet