Seite 1 von 1

[V4.1] Monoflop & SendExplicit

Verfasst: Mi Nov 20, 2024 5:35 pm
von sfrit
Hallihallo,

ich hatte heute mal Zeit etwas mit meinen Logiken zu spielen wobei ich auf folgendes Problem gestoßen bin:
Ich habe 3 Monoflop timer die durch die Variable $active gleichzeitig gestartet werden (testhalber 2,4,6s). Diese sollen den vorher festgelegten Outputwert $o_wert1 auf den gleichen Output senden (damit ich nicht 3 mal verschiedene Outputs verknüpfen muss)

Code: Alles auswählen

{
	"Level":[
		// Inputs
		["$i_dimmstatus","float",0],
		["$Threshold","float",0],
		["$i_verzogerung1","float",2],
		["$i_verzogerung2","float",4],
		["$i_verzogerung3","float",6],
		
		// Outputs
		["$o_wert1","float",100.0],
        // ["$o_wert2","float",100.0],
        
		// Interne Variablen
		["$active","bool",false],
		//["$LastActive","bool",false],
		["$Trigger","bool",false],
		["$timer1","bool",false],
		["$timer2","bool",false],
		["$timer3","bool",false]
	],
	"Module":[
	
		["Comparator","$i_dimmstatus","$active","$Threshold"],                  
                ["Latch","$i_dimmstatus","$o_wert1","$active",1],
        
[b]		["Monoflop","$active",0,"$timer1","$i_verzogerung1",2],               
		["Monoflop","$active",0,"$timer2","$i_verzogerung2",2],                
                ["Monoflop","$active",0,"$timer3","$i_verzogerung3",2],
        
                ["SendExplicit","$timer1","$o_wert1",2],
                ["SendExplicit","$timer2","$o_wert1",2],
		["SendExplicit","$timer3","$o_wert1",2][/b]

	],
	"Input":[
		["Dimmen absolut - Status","Dimmwert der mehrfach gesendet werden soll","$i_dimmstatus","c"],
		["Schwellwert","Vergleichswert","$Threshold","u"],
		["Verzögerung 1","erstes senden nach n Sekunden","$i_verzogerung1","u"],
		["Verzögerung 2","zweites senden nach n Sekunden","$i_verzogerung2","u"],
		["Verzögerung 3","zweites senden nach n Sekunden","$i_verzogerung3","u"]
	],    
	"Output":[
		["Ausgang1","Ausgang sendet nach Verzögerungen 1 und 2","$o_wert1","x"]
	 //    ["timer1","123","$timer1","c"],
	 //    ["timer2","123","$timer2","c"],
	 //    ["timer3","123","$timer3","c"]
	]
}
Resultat: Die Logik sendet nur den am längsten laufenden Timer. Die einzelnen Timer starten und enden richtig (siehe Auskommentierung in der ich es überprüft habe). Wer findet den Fehler?

Schönen Abend euch.

Steffen

Re: [V4.1] Monoflop & SendExplicit

Verfasst: Do Nov 21, 2024 12:18 am
von Robert_Mini
Hallo Steffen!

Du hast dir vermutlich die Antwort hier schon gegeben:
viewtopic.php?f=77&p=59092#p59092
Ist die Sendebedingung erfüllt wird beim (Ausgangs-)Level ein Flag gesetzt, das auf die Sendeoption: X reagiert.
Das lässt sich so erklären, dass SendExplizit erst nach dem Abarbeiten der Logikzelle umgesetzt wird. Damit wird nur das 3. Monoflop berücksichtigt wird => d.h. nur ein SendExplizit je Ausgangsvariable sinnvoll.
Du kannst das testen, in dem du die Reihenfolge der SendExplizit-Zeilen vertauscht.

Lösung:
SendExplizit durch Latch ersetzen (für die Flanke), dann ein OR und zum Schluss ein SendExplizit mit Triggeroption 0.

Code: Alles auswählen

		["Latch","$KonstTrue","$Senden1","$timer1", 2],
                ["Latch","$KonstTrue","$Senden2","$timer2",2],
		["Latch","$KonstTrue","$Senden3","$timer3",2],
		
		["Or" , ["$Senden1" , "$Senden2","$Senden3"], "$SendenGes"],

		["SendExplicit","$SendenGes","$o_wert1",0],
Zusätzlich muss am Beginn der Logik $Senden1... auf false zurückgesetzt werden.

lg
Robert

PS: "Wer findet den Fehler" klingt lustig (und war auch sicher so gemeint), wir sind aber nicht bei einem Suchrätsel....

Re: [V4.1] Monoflop & SendExplicit

Verfasst: Do Nov 21, 2024 7:31 am
von sfrit
Vielen Dank Robert!!

Re: [V4.1] Monoflop & SendExplicit

Verfasst: Do Nov 21, 2024 11:59 am
von StefanW
Hi Robert,

vielen lieben Dank auch von mir für Deinen exzellenten Support für die Nutzer und das Pflegen des Wiki. :bow-yellow:

Das hilft uns allen sehr. :handgestures-thumbupright:

lg

Stefan