Seite 1 von 1

Logikbaustein Trigger startet einfache Sequenz

Verfasst: Do Sep 24, 2020 9:37 pm
von Robert_Mini
Hallo zusammen!

Ich hatte heute wieder mal Lust auf Logik :D .

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.
Ausgänge:
  • 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.
Der Baustein ist für boolsche Werte konzipiert. Sollte Bedarf an einem Baustein bestehen, der Zahlenwerte sendet, so kann ich das gerne nachreichen.

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:
Sequenz.png

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. */

Re: Logikbaustein Trigger startet einfache Sequenz

Verfasst: Fr Sep 25, 2020 9:26 am
von StefanW
Sehr schön,

wunderbar. Danke dass Du das mit uns allen teilst und damit tolle Bausteine zur Verfügung stellst.

Sobald wir dazu kommen, machen wir mit Euch zusammen eine Liste der besten zusätzlichen Bausteine und integrieren diese dann in den Server, so dass es gleich zur Verfügung steht.

lg

Stefan

Re: Logikbaustein Trigger startet einfache Sequenz

Verfasst: Mo Jan 17, 2022 8:47 pm
von Zelkin
Hallo Robert

Klasse Logik :)

Kann man diese erweitern, dass man auf dem Trigger=1 einen wert senden kann und auf trigger=0 einen anderen?
Ich steig bei dem code leider nicht ganz durch, sonst würde Ich es gerne selbst probieren :)

Im Prinzip ein einfacher If Baustein
wenn trigger = 1 dann wert von eingang 1 (float oder int) auf ausgang 1
sonst / wenn trigger = 0 dann wert von eingang 2 (float oder int) auf ausgang 1

die Idee mit der Verzögerung mit drin und man hat eine super licht Steuerung

Ich schalte mein Licht abhängig vom Zustand des Hauses und Uhrzeit und verwende dazu 4 verschiedene werte und einen Wert aktuell --> diesen könnte man dann auf Eingang 1 setzen

gruß

Kai

Re: Logikbaustein Trigger startet einfache Sequenz

Verfasst: Mo Jan 17, 2022 9:09 pm
von Robert_Mini
Hallo Kai!

Gehen tut fast alles.
Das lässt sich in diesem Fall leicht mit einem Multiplexer realisieren.
Damit kann man mit dem Trigger 0/1 zwischen den Eingangswerten umschalten.

Noch zum Verständnis:
Muss es wirklich der Trigger sein, der umschaltet? Wenn es ein Zustand ist, könnte man am einfachsten einen getrennten Multiplexer anlegen, der abhängig vom Zustand den Wert1 und Wert2 setzt.
Zb. Objekt Tag/Nacht = 1 => Setze Wert1 auf 100%, wenn 0 => Wert1 auf 20%
Das gleiche für den Eingang Wert2.

Das würde dann out of the box gehen oder man erstellt einen Mehrfach-Multiplexer mit 4 Eingängen/2 Ausgängen (das würde ich auch bereitstellen).

Ansonsten kann man den Multiplexer auch in die Logik oben einbauen und abhängig vom Trigger true/false auf den Ausgang durchreichen.
Bräuchte dann eben Wert1_true, Wert1_false, Wert1_Verzögerung und das gleiche nochmal für Wert2.

lg
Robert

Re: Logikbaustein Trigger startet einfache Sequenz

Verfasst: Di Jan 18, 2022 12:22 am
von Zelkin
Hi Robert

In dem Fall handelt es sich um einen zustand!
Mein trigger ist der vewegungsmelder, der eine Bewegung erkannt hat oder eben auch nicht!
Dementsprechend hemd sollte es so gehen mit einem getrennten multiplexer..........wenn ich jetzt wüsste was du damit meinst ;)


Ich muss mir die Funktionsweise nochmal näher anschauen, leider habe ich sie bisher noch nicht durschaut!
Kannst du mir mal zeigen wie das aussehen müsste nach deinem Bsp. Das sollte ich dann adaptieren können

Gruß

Kai