Ich hatte heute wieder mal Lust auf Logik .
Funktion:
Der Baustein wartet auf ein "True" am Eingang "Trigger" und sendet danach nach Ablauf der Verzögerungszeit 1 den Wert vom Eingang 1 auf Ausgang 1. Nach Ablauf der Verzögerungszeit 2 wird der 2. Ausgang mit dem aktuellen Wert von Eingang 2 gesendet.
Wird keine Verzögerungszeit angegeben, wird sofort beim Empfang des Triggers gesendet.
Es wird nur bei True getriggert. Die Trigger-Option des Einganges "Trigger" sollte daher auf "a" always verbleiben.
Anwendungsbeispiele:
Mein Anwendungsfall: Am Morgen kann ich die Beschattungsautomatik manuell starten, indem ich auf den Auf-Befehl der EG-Jalousie höre. Dabei wird dann das KNX-Objekt der Zeitschaltuhr "True" für Lamelle und danach verzögert "True" für die Behanghöhe gesendet.
Eingänge:
- Trigger: Startet die Sequenz.
- Wert1: Eingang für den Wert, der auf Ausgang 1 gesendet werden soll. Es kann dynamisch der Wert aus einem Objekt verwendet oder per Parameter fix true/false gesetzt werden.
- Verzögerung Ausgang1: Verzögerungszeit, nach deren Ablauf Ausgang 1 den Wert1 sendet.
- Wert2 / Verzögerung Ausgang2: Analoge Einstellungen für den 2. Ausgang.
- Ausgang1: Sendet nach Ablauf der Verzögerungszeit 1 den Wert, der zu diesem Zeitpunkt am Eingang Wert1 anliegt.
- Ausgang2: Sendet nach Ablauf der Verzögerungszeit 2 den Wert, der zu diesem Zeitpunkt am Eingang Wert2 anliegt.
Nutzungsrechte:
Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
Falls wer einen freiwilligen Beitrag zur Motivation leisten will: Klick
Viel Spaß damit und gerne Rückmeldung, wenn was fehlt oder euch die Sache gefällt.
Robert
Der Baustein:
Code: Alles auswählen
/**===========================================================
Trigger "True" für einfache Sequenz mit 2 boolschen Ausgängen:
- Ausgang 1 Sendet Wert 1 mit Verzögerung 1
- Ausgang 2 Sendet Wert 2 mit Verzögerung 2
============================================================*/
{
"Level":[
// Inputs
["$I_Trigger","bool",false],
["$I_Wert1","bool",false],
["$I_Wert2","bool",false],
["$I_Verzoegerung1","float",100.0],
["$I_Verzoegerung2","float",100.0],
// Outputs
["$O_Wert1","bool",false],
["$O_Wert2","bool",false],
// Interne Variablen
["$Trigger","bool",false],
["$Timer1","bool",false],
["$Timer1_Last","bool",false],
["$Timer1_Ende","bool",false],
["$Timer1_CResult","bool",false],
["$Timer2","bool",false],
["$Timer2_Last","bool",false],
["$Timer2_Ende","bool",false],
["$Timer2_CResult","bool",false],
// Konstanten
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$KonstTrue","bool",true],
["$KonstFalse","bool",false]
],
"Module":[
// Eingang getriggert?
["Triggered", "$I_Trigger", "$Trigger" ],
// Timer-Status merken
["Latch","$Timer1","$Timer1_Last","$KonstTrue",0],
["Latch","$Timer2","$Timer2_Last","$KonstTrue",0],
// Wenn getriggert, Verzögerungstimer starten
["Monoflop","$Trigger",0,"$Timer1","$I_Verzoegerung1",0],
["Monoflop","$Trigger",0,"$Timer2","$I_Verzoegerung2",0],
// Wenn Verzoegerung 0, dann direkt beim Trigger reagieren =>
// TimerLast auf True setzen, damit abgelaufener Timer simuliert wird
["Comparator", "$I_Verzoegerung1", "$Timer1_CResult", "$Konst0"],
["Comparator", "$I_Verzoegerung2", "$Timer2_CResult", "$Konst0"],
["Latch","$Trigger","$Timer1_Last","-$Timer1_CResult",0],
["Latch","$Trigger","$Timer2_Last","-$Timer2_CResult",0],
// Timer abgelaufen?, Timer1_Ende wird nur true, wenn in diesem Aufruf der Timer ausgelaufen ist
["And" , ["-$Timer1","$Timer1_Last"],"$Timer1_Ende"],
["And" , ["-$Timer2","$Timer2_Last"],"$Timer2_Ende"],
// Eingangswert auf Ausgang übernehmen
["Latch","$I_Wert1","$O_Wert1","$Timer1_Ende",0],
["Latch","$I_Wert2","$O_Wert2","$Timer2_Ende",0],
// Senden
["SendExplicit","$Timer1_Ende","$O_Wert1",0],
["SendExplicit","$Timer2_Ende","$O_Wert2",0]
//["Polynomial", "$Konst1", "$Temp_Soll",["$I_Temp_Soll", "$I_Offset"]],
//["Ratio","$Konst100","$Steigung","$I_Delta_T_Max"],
//["Limiter","$Hoehe_Soll","$Hoehe_Soll_Lim","$Val_ok",["$I_Hoehe_Min", "$I_Hoehe_Max"]],
//["Comparator", "$I_Hoehe_Min", "$SelectHoehe", "$Hoehe_Soll"],
//["Multiplexer",["$Konst0","$Hoehe_Soll_Lim"],"$Hoehe_Soll_Lim","-$SelectHoehe"],
//["Or" , ["$Val_Large1" , "$Val_Large2"], "$Val_Large"],
//["And" , ["-$Val_Large" , "-$Val_Null"], "$Val_Small"],
//["Monoflop","$Val_Large",0,"$Timer_Large","$I_Delay",1],
//["Latch","$Hoehe_Soll_Step","$Hoehe_Soll_StepB","$Val_Large",0],
//["Clocksignal","$ConstTRUE","$Clk","$Period"],
//["HobbsMeter","$State","$Time","$Reset"],
//["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
//["BinaryMultiplexer",["$In_D","$In_E","$In_F"],"$Output"],
//["Triggered", "$Input", "$Touched" ],
//["SendExplicit","$Send","$Out_val",0],
//["Interpolation","$In", "$Out", [ [x1,y1] , [x2,y2] , ... , [xn,yn ] ] ]
],
"Input":[
["Trigger","Eingang True triggert Output","$I_Trigger","a"],
["Wert 1","Wert der an Ausgang 1 gesendet wird","$I_Wert1","u"],
["Verzögerung Ausgang1","Wert der an Ausgang 1 gesendet wird","$I_Verzoegerung1","u"],
["Wert 2","Wert der an Ausgang 2 gesendet wird","$I_Wert2","u"],
["Verzögerung Ausgang2","Wert der an Ausgang 1 gesendet wird","$I_Verzoegerung2","u"]
],
"Output":[
["Ausgang1","Ausgang 1 sendet nach Verzögerung 1","$O_Wert1","x"],
["Ausgang2","Ausgang 2 sendet nach Verzögerung 2","$O_Wert2","x"]
//["Debug Val_Small","","$Val_Small","a"]
]
}
/** Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. */