Hallo Dani,
wie wäre es mit folgender Lösung aus 3 Logik-Zellen:
- Tastenfeld (Ermittelt die Zahl, für die die Taste steht)
- Code-Erfassung (Sammelt die einzelnen Tasteneingaben zu einem Code)
- Freigabe-Timer (vergleicht den Code mit Vorgabe und öffnet für eine bestimmte Zeit)
Tastenfeld (Custom-Logik):
Code: Alles auswählen
{
"Level": [
["$TS_0","bool",false],
["$TS_1","bool",false],
["$TS_2","bool",false],
["$TS_3","bool",false],
["$TS_4","bool",false],
["$TS_5","bool",false],
["$TS_6","bool",false],
["$TS_7","bool",false],
["$TS_8","bool",false],
["$TS_9","bool",false],
["$Taste","integer",0],
["$BIT_0","bool",false],
["$BIT_1","bool",false],
["$BIT_2","bool",false],
["$BIT_3","bool",false],
["$Konst2","integer",2]
],
"Module": [
["Or",["$TS_1","$TS_3","$TS_5","$TS_7","$TS_9"],"$BIT_0"],
["Or",["$TS_2","$TS_3","$TS_6","$TS_7"],"$BIT_1"],
["Or",["$TS_4","$TS_5","$TS_6","$TS_7"],"$BIT_2"],
["Or",["$TS_8","$TS_9"],"$BIT_3"],
["Polynomial","$Konst2","$Taste",["$BIT_0","$BIT_1","$BIT_2","$BIT_3"]],
["BinaryDemultiplexer",0,["$TS_0","$TS_1","$TS_2","$TS_3","$TS_4","$TS_5","$TS_6","$TS_7","$TS_8","$TS_9"]] // reset all keys to false
],
"Input": [
["T_1","Taste 1","$TS_1","c"],
["T_2","Taste 2","$TS_2","c"],
["T_3","Taste 3","$TS_3","c"],
["T_4","Taste 4","$TS_4","c"],
["T_5","Taste 5","$TS_5","c"],
["T_6","Taste 6","$TS_6","c"],
["T_7","Taste 7","$TS_7","c"],
["T_8","Taste 8","$TS_8","c"],
["T_9","Taste 9","$TS_9","c"],
["T_0","Taste 0","$TS_0","c"]
],
"Output": [
["Taste","Nummer der gedrückten Taste","$Taste","a"]
]
}
Code-Erfassung (Custom-Logik):
Code: Alles auswählen
{
"Level": [
["$In","integer",0],
["$Digits","integer",6],
["$Out","integer",0],
["$InLimit","integer",0],
["$Pos","integer",0],
["$Complete","bool",true],
["$ResetTime","float",5.0],
["$Timeout","bool",false],
["$KonstTrue","bool",true],
["$Konst0d","integer",0],
["$Konst1d","integer",1],
["$Konst9d","integer",9],
["$Konst10d","integer",10]
],
"Module": [
["Monoflop","$KonstTrue",0,"-$Timeout","$ResetTime",1], // (Re-)trigger watchdog
["Latch","$KonstTrue","$Complete","$Timeout",1], // Restart when timout occoured
["Break",["$Timeout"]], // timeout -> wait for next input
["Latch","$Konst0d","$Out","$Complete",0], // Set for restart
["Latch","$Konst0d","$Pos","$Complete",0], // Set for restart
["Polynomial","$Konst1d","$Pos",["$Konst1d","$Pos"]], // Increment position
["Limiter","$In","$InLimit",0,["$Konst0d","$Konst9d"]], // Limit input value to single digits
["Polynomial","$Konst10d","$Out",["$InLimit","$Out"]], // shift and add new input value (y = x + 10*y)
["Comparator","-$Pos","-$Complete","-$Digits"], // digits complete?
["Break",["-$Complete"]] // not complete -> wait for next input
],
"Input": [
["IN","Eingang","$In","a"],
["Stellen","Anzahl der Stellen","$Digits","u"],
["Timeout","Zeit nachder alles zurückgesetzt wird","$ResetTime","u"]
],
"Output": [
["OUT","Integerausgang","$Out","a"]
]
}
Freigabe-Timer (Standard Timer2) kann mit unterschiedlichen Code-Vorgaben natürliche mehrfach vorkommen.
Und dann noch diese Logiken verknüpfen:
