Der Benchmark ist deine Freundin
Es geht heute (hoffentlich) noch weiter.
Danke und Lg
Robert
Der Benchmark ist deine Freundin
Code: Alles auswählen
// Dimmgrenzen prüfen
["Comparator", "-$DimmwertNeu", "-$DimmwertMax_CResult", "-$I_DimmwertMax"], // >= daher alles invertiert!
["Comparator", "$DimmwertNeu", "-$DimmwertMin_CResult", "$I_DimmwertMin"], // <= daher nur Ausgang invertiert
// Min/Max. Dimmwert auf Ausgang übernehmen, wenn neuer Wert außerhalb der Grenzen liegt und Dimmenvorgang aktiv
["And" , ["$DimmwertMax_CResult","$Bit3b","$StatusDimmen"], "$LimitMax"],
["Latch","$I_DimmwertMax","$O_Dimmwert","$LimitMax",0],
["And" , ["$DimmwertMin_CResult","-$Bit3b","$StatusDimmen"], "$LimitMin"],
["Latch","$I_DimmwertMin","$O_Dimmwert","$LimitMin",0],
Code: Alles auswählen
// Wenn obere oder untere Grenze erreicht, Dimmvorgang abbrechen (IMMER, daher Latch Triggeroption=0)
["Or" , ["$LimitMin","$LimitMax"], "$DimmenStop"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenStop",0],
Code: Alles auswählen
/**===========================================================
Kommentar
============================================================*/
{
"Level":[
// Eingänge
["$I_DimmbefehlRelativ","integer",0],
["$I_DimmbefehlAbsolut","integer",0],
["$I_RueckmeldungDimmen","float",0.0],
["$I_Schrittweite","float",5.0],
["$I_DauerDimmen","float",10.0],
["$I_DimmwertMax","float",100.0],
["$I_DimmwertMin","float",0.0],
// Ausgänge
["$O_Dimmwert","float",0.0],
["$O_StatusSchalten","bool",false],
["$StatusDimmen","bool",false],
["$DimmRelTouched","bool",false],
["$DimmenRelativStart","bool",false],
["$DimmenRelativStopp","bool",false],
["$DimmwertLast","float",0.0],
["$DimmwertNeu","float",0.0],
["$DimmRichtung","float",0.0],
["$DimmwertMax_CResult","bool",false],
["$DimmwertMin_CResult","bool",false],
["$LimitMax","bool",false],
["$LimitMin","bool",false],
["$DimmenStop","bool",false],
["$Bit0b","bool",false],
["$Bit1b","bool",false],
["$Bit2b","bool",false],
["$Bit3b","bool",false],
["$Konst1","float",1.0],
["$KonstTrue","bool",true],
["$KonstFalse","bool",false],
["$Takt","bool",false],
["$TaktLast","bool",false],
["$ClockTriggered","bool",false]
],
"Module":[
// Werte des letzten Aufrufs abspeichern
["Latch","$O_Dimmwert","$DimmwertLast","$KonstTrue",0],
["Latch","$Takt","$TaktLast","$KonstTrue",0],
// Auswerten, ob Eingang Rel. Dimmen getriggert wurde
["Triggered", "$I_DimmbefehlRelativ", "$DimmRelTouched" ],
// Nur wenn Wert >0 und Dimmen noch nicht aktiv, StatusDimmmen auf True setzen
["And" , ["$DimmRelTouched","$I_DimmbefehlRelativ","-$StatusDimmen"], "$DimmenRelativStart"],
["Latch","$KonstTrue","$StatusDimmen","$DimmenRelativStart",1],
["Latch","$I_RueckmeldungDimmen","$DimmwertLast","$DimmenRelativStart",1],
// Stopp Telegramm auswerten und Dimmen stoppen
["And" , ["$DimmRelTouched","-$I_DimmbefehlRelativ","$StatusDimmen"], "$DimmenRelativStopp"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenRelativStopp",1],
// Bei negativer Flanke auch Takt zurücksetzen, damit nächster Dimmvorgang korrekt erkannt wird
["Latch","$KonstFalse","$TaktLast","$StatusDimmen",2],
// Dimmrichtung aus DPT3 ermitteln
["BinaryDemultiplexer","$I_DimmbefehlRelativ",["$Bit0b","$Bit1b","$Bit2b","$Bit3b"]],
// Dimmrichtung auf -1/+1 setzen und neuen Dimmwert berechnen
["Multiplexer",["-$Konst1","$Konst1"],"$DimmRichtung","$Bit3b"],
["Polynomial", "$DimmRichtung", "$DimmwertNeu",["$DimmwertLast", "$I_Schrittweite"]],
// Dimmgrenzen prüfen
["Comparator", "-$DimmwertNeu", "-$DimmwertMax_CResult", "-$I_DimmwertMax"], // >= daher alles invertiert!
["Comparator", "$DimmwertNeu", "-$DimmwertMin_CResult", "$I_DimmwertMin"], // <= daher nur Ausgang invertiert
// Min/Max. Dimmwert auf Ausgang übernehmen, wenn neuer Wert außerhalb der Grenzen liegt und Dimmenvorgang aktiv
["And" , ["$DimmwertMax_CResult","$Bit3b","$StatusDimmen"], "$LimitMax"],
["Latch","$I_DimmwertMax","$O_Dimmwert","$LimitMax",0],
["And" , ["$DimmwertMin_CResult","-$Bit3b","$StatusDimmen"], "$LimitMin"],
["Latch","$I_DimmwertMin","$O_Dimmwert","$LimitMin",0],
// Wenn obere oder untere Grenze erreicht, Dimmvorgang abbrechen (IMMER, daher Latch Triggeroption=0)
["Or" , ["$LimitMin","$LimitMax"], "$DimmenStop"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenStop",0],
// Taktgeber starten
["Clocksignal","$StatusDimmen","$Takt","$I_DauerDimmen"],
// Taktsignal mit letztem Wert vergleichen: wenn ungleich => Taktgeber hat getriggert => Wert auf Ausgang übernehmen
["Limiter","$Takt",0,"-$ClockTriggered",["$TaktLast", "$TaktLast"]],
["Latch","$DimmwertNeu","$O_Dimmwert","$ClockTriggered",0]
// VORLAGE
//["Polynomial", "$Var_x", "$OutputFloat",["$A0", "$A1"]],
//["Ratio","$Zaehler","$OutputFloat","$Nenner"],
//["Limiter","$Input1","$OutputFloat","$InputInnerhalb",["$Untergrenze", "$Obergrenze"]],
//["Comparator", "$Input1", "$OutputBool", "$Vergleichswert"],
//["Multiplexer",["$Input1","$Input2"],"$OutputFloat","$SelectInput"],
//["Or" , ["$Input1","$Input2"], "$OutputBool"],
//["And" , ["$Input1","$Input2"], "$OutputBool"],
//["Monoflop","$Trigger","$Reset","$TimerStatus","$Dauer",1],
//["Latch","$Input1","$Output","$Trigger",0], // Übernimmt den Wert von $Input1 auf $Output, wenn Trigger = 0, Option 0/1/2/3 = wenn true/pos. Flanke/neg. Flanke/jede Flanke
//["Clocksignal","$Enable","$Takt","$Periode"], // Zyklischer Trigger, $Takt wechselt jeweils nach Ablauf von $Periode zwischen TRUE/FALSE
//["HobbsMeter","$Status","$Time","$Reset"], // Zaehlt bei $Status = TRUE die Zeit in [h]
//["Stopwatch","$Status", "$Time"], // Stoppt die Zeit in [s] ab $Status = TRUE, bei $Status = FALSE wird auf 0 zurückgesetzt
//["CalcFormula",["$Day1Case","$Day2Case","$Day3Case","$Day4Case","$DayEquals"], "$Case", "$Formula3"],
//["Cron","$KonstTrue","$Reset",0,"$CronString"],
//["Wakeup","$Utime_start","$Status"],
//["BinaryMultiplexer",["$In_D","$In_E","$In_F"],"$Output"],
//["Triggered", "$InputVar", "$Touched" ], // Touched = TRUE, wenn der Eingang $InputVar die Logik getriggert hat
//["SendExplicit","$Send","$OutputVar",0], // Sendet Ausgang $OutputVar, abhängig von $Send 0/1/2/3 (Paramter analog Latch), ACHTUNG "x" am Output setzen!
//["Interpolation","$In", "$Out", [ [x1,y1] , [x2,y2] , ... , [xn,yn ] ] ] **/
],
"Input":[
["Relativer Dimmwert","Eingang Dimmbefehlt DPT3","$I_DimmbefehlRelativ","c"],
["Absoluter Dimmwert","Eingang Dimmbefehlt 0-100%","$I_DimmbefehlAbsolut","c"],
["Rückmeldung Dimmwert","Eingang Rückmeldeobjekt Dimmen","$I_RueckmeldungDimmen","c"],
["Schrittweite","Schrittweite","$I_Schrittweite","c"],
["Dauer Dimmvorgang","Dauer Dimmvorgang 0-100%","$I_DauerDimmen","c"],
["max. Dimmwert","max. Dimmwert","$I_DimmwertMax","c"],
["min. Dimmwert","min. Dimmwert","$I_DimmwertMin","c"]
],
"Output":[
["Absolut Dimmwert","Output absoluter Dimmwert 0-100%","$O_Dimmwert","c"],
["Schaltstatus","Status Schalten","$O_StatusSchalten","c"],
["Debug_Out Bit4","Dimmrichtung","$Bit3b","c"],
["Debug_Out DimmwertLast","Startwert","$DimmwertLast","c"],
["Debug_Out DimmwertNeu","Startwert","$DimmwertNeu","c"],
["Debug_Out StatusDimmen","aktiver Dimmvorgang?","$StatusDimmen","c"]
]
}
Code: Alles auswählen
// Schrittweite aus DPT3 umrechnen:
["Multiplexer",["$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1","$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1"],"$Schrittweite","$I_DimmbefehlRelativ"],
Code: Alles auswählen
["Polynomial", "$DimmRichtung", "$DimmwertNeu",["$DimmwertLast", "$Schrittweite"]],
Code: Alles auswählen
// Wert nur übernehmen, wenn Dimmvorgang aktiv und Taktsignal getriggert hat
["And" , ["$ClockTriggered","$StatusDimmen"], "$NewValue"],
["Latch","$DimmwertNeu","$O_Dimmwert","$NewValue",0]
Code: Alles auswählen
/**===========================================================
Kommentar
============================================================*/
{
"Level":[
// Eingänge
["$I_DimmbefehlRelativ","integer",0],
["$I_DimmbefehlAbsolut","integer",0],
["$I_RueckmeldungDimmen","float",0.0],
["$I_Schrittweite","float",5.0],
["$I_DauerDimmen","float",10.0],
["$I_DimmwertMax","float",100.0],
["$I_DimmwertMin","float",0.0],
// Ausgänge
["$O_Dimmwert","float",0.0],
["$O_StatusSchalten","bool",false],
// Interne Variablen
["$StatusDimmen","bool",false],
["$DimmRelTouched","bool",false],
["$DimmenRelativStart","bool",false],
["$DimmenRelativStopp","bool",false],
["$DimmwertLast","float",0.0],
["$DimmwertNeu","float",0.0],
["$DimmRichtung","float",0.0],
["$Schrittweite","float",0.0],
["$DimmwertMax_CResult","bool",false],
["$DimmwertMin_CResult","bool",false],
["$LimitMax","bool",false],
["$LimitMin","bool",false],
["$DimmenStop","bool",false],
["$Bit0b","bool",false],
["$Bit1b","bool",false],
["$Bit2b","bool",false],
["$Bit3b","bool",false],
["$KonstTrue","bool",true],
["$KonstFalse","bool",false],
["$Konst50","float",50.0],
["$Konst25","float",25.0],
["$Konst12_5","float",12.5],
["$Konst6","float",6.0],
["$Konst3","float",3.0],
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$Takt","bool",false],
["$TaktLast","bool",false],
["$ClockTriggered","bool",false],
["$NewValue","bool",false]
],
"Module":[
// Werte des letzten Aufrufs abspeichern
["Latch","$O_Dimmwert","$DimmwertLast","$KonstTrue",0],
["Latch","$Takt","$TaktLast","$KonstTrue",0],
// Auswerten, ob Eingang Rel. Dimmen getriggert wurde
["Triggered", "$I_DimmbefehlRelativ", "$DimmRelTouched" ],
// Nur wenn Wert >0 und Dimmen noch nicht aktiv, StatusDimmmen auf True setzen
["And" , ["$DimmRelTouched","$I_DimmbefehlRelativ","-$StatusDimmen"], "$DimmenRelativStart"],
["Latch","$KonstTrue","$StatusDimmen","$DimmenRelativStart",1],
["Latch","$I_RueckmeldungDimmen","$DimmwertLast","$DimmenRelativStart",1],
// Stopp Telegramm auswerten und Dimmen stoppen
["And" , ["$DimmRelTouched","-$I_DimmbefehlRelativ","$StatusDimmen"], "$DimmenRelativStopp"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenRelativStopp",1],
// Bei negativer Flanke auch Takt zurücksetzen, damit nächster Dimmvorgang korrekt erkannt wird
["Latch","$KonstFalse","$TaktLast","$StatusDimmen",2],
// Schrittweite aus DPT3 umrechnen:
["Multiplexer",["$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1","$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1"],"$Schrittweite","$I_DimmbefehlRelativ"],
// Dimmrichtung aus DPT3 ermitteln
["BinaryDemultiplexer","$I_DimmbefehlRelativ",["$Bit0b","$Bit1b","$Bit2b","$Bit3b"]],
// Dimmrichtung auf -1/+1 setzen und neuen Dimmwert berechnen
["Multiplexer",["-$Konst1","$Konst1"],"$DimmRichtung","$Bit3b"],
["Polynomial", "$DimmRichtung", "$DimmwertNeu",["$DimmwertLast", "$Schrittweite"]],
// Dimmgrenzen prüfen
["Comparator", "-$DimmwertNeu", "-$DimmwertMax_CResult", "-$I_DimmwertMax"], // >= daher alles invertiert!
["Comparator", "$DimmwertNeu", "-$DimmwertMin_CResult", "$I_DimmwertMin"], // <= daher nur Ausgang invertiert
// Min/Max. Dimmwert auf Ausgang übernehmen, wenn neuer Wert außerhalb der Grenzen liegt und Dimmenvorgang aktiv
["And" , ["$DimmwertMax_CResult","$Bit3b","$StatusDimmen"], "$LimitMax"],
["Latch","$I_DimmwertMax","$O_Dimmwert","$LimitMax",0],
["And" , ["$DimmwertMin_CResult","-$Bit3b","$StatusDimmen"], "$LimitMin"],
["Latch","$I_DimmwertMin","$O_Dimmwert","$LimitMin",0],
// Wenn obere oder untere Grenze erreicht, Dimmvorgang abbrechen (IMMER, daher Latch Triggeroption=0)
["Or" , ["$LimitMin","$LimitMax"], "$DimmenStop"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenStop",0],
// Taktgeber starten
["Clocksignal","$StatusDimmen","$Takt","$I_DauerDimmen"],
// Taktsignal mit letztem Wert vergleichen: wenn ungleich => Taktgeber hat getriggert
["Limiter","$Takt",0,"-$ClockTriggered",["$TaktLast", "$TaktLast"]],
// Wert nur übernehmen, wenn Dimmvorgang aktiv und Taktsignal getriggert hat
["And" , ["$ClockTriggered","$StatusDimmen"], "$NewValue"],
["Latch","$DimmwertNeu","$O_Dimmwert","$NewValue",0]
// VORLAGE
//["Polynomial", "$Var_x", "$OutputFloat",["$A0", "$A1"]],
//["Ratio","$Zaehler","$OutputFloat","$Nenner"],
//["Limiter","$Input1","$OutputFloat","$InputInnerhalb",["$Untergrenze", "$Obergrenze"]],
//["Comparator", "$Input1", "$OutputBool", "$Vergleichswert"],
//["Multiplexer",["$Input1","$Input2"],"$OutputFloat","$SelectInput"],
//["Or" , ["$Input1","$Input2"], "$OutputBool"],
//["And" , ["$Input1","$Input2"], "$OutputBool"],
//["Monoflop","$Trigger","$Reset","$TimerStatus","$Dauer",1],
//["Latch","$Input1","$Output","$Trigger",0], // Übernimmt den Wert von $Input1 auf $Output, wenn Trigger = 0, Option 0/1/2/3 = wenn true/pos. Flanke/neg. Flanke/jede Flanke
//["Clocksignal","$Enable","$Takt","$Periode"], // Zyklischer Trigger, $Takt wechselt jeweils nach Ablauf von $Periode zwischen TRUE/FALSE
//["HobbsMeter","$Status","$Time","$Reset"], // Zaehlt bei $Status = TRUE die Zeit in [h]
//["Stopwatch","$Status", "$Time"], // Stoppt die Zeit in [s] ab $Status = TRUE, bei $Status = FALSE wird auf 0 zurückgesetzt
//["CalcFormula",["$Day1Case","$Day2Case","$Day3Case","$Day4Case","$DayEquals"], "$Case", "$Formula3"],
//["Cron","$KonstTrue","$Reset",0,"$CronString"],
//["Wakeup","$Utime_start","$Status"],
//["BinaryMultiplexer",["$In_D","$In_E","$In_F"],"$Output"],
//["Triggered", "$InputVar", "$Touched" ], // Touched = TRUE, wenn der Eingang $InputVar die Logik getriggert hat
//["SendExplicit","$Send","$OutputVar",0], // Sendet Ausgang $OutputVar, abhängig von $Send 0/1/2/3 (Paramter analog Latch), ACHTUNG "x" am Output setzen!
//["Interpolation","$In", "$Out", [ [x1,y1] , [x2,y2] , ... , [xn,yn ] ] ] **/
],
"Input":[
["Relativer Dimmwert","Eingang Dimmbefehlt DPT3","$I_DimmbefehlRelativ","c"],
["Absoluter Dimmwert","Eingang Dimmbefehlt 0-100%","$I_DimmbefehlAbsolut","c"],
["Rückmeldung Dimmwert","Eingang Rückmeldeobjekt Dimmen","$I_RueckmeldungDimmen","c"],
["Schrittweite","Schrittweite","$I_Schrittweite","c"],
["Dauer Dimmvorgang","Dauer Dimmvorgang 0-100%","$I_DauerDimmen","c"],
["max. Dimmwert","max. Dimmwert","$I_DimmwertMax","c"],
["min. Dimmwert","min. Dimmwert","$I_DimmwertMin","c"]
],
"Output":[
["Absolut Dimmwert","Output absoluter Dimmwert 0-100%","$O_Dimmwert","c"],
["Schaltstatus","Status Schalten","$O_StatusSchalten","c"],
["Debug_Out Bit4","Dimmrichtung","$Bit3b","c"],
["Debug_Out StatusDimmen","aktiver Dimmvorgang?","$StatusDimmen","c"]
]
}
Code: Alles auswählen
// Schrittweite aus DPT3 umrechnen:
["Multiplexer",["$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1","$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1"],"$SchrittweiteRel","$I_DimmbefehlRelativ"],
// Nur übernehmen, wenn Rel. Dimmen aktiv
["Latch","$SchrittweiteRel","$Schrittweite","$StatusDimmenRel",0],
["Latch","$I_Schrittweite","$Schrittweite","$StatusDimmenAbs",0],
Code: Alles auswählen
// Auswerten, ob Eingang Abs. Dimmen getriggert wurde
["Triggered", "$I_DimmbefehlAbsolut", "$DimmAbsTouched" ],
["Comparator", "$I_DimmbefehlAbsolut", "$DimmwertGroesser_CResult", "$I_RueckmeldungDimmen"],
["Comparator", "$I_RueckmeldungDimmen", "$DimmwertKleiner_CResult", "$I_DimmbefehlAbsolut"],
["And" , ["$DimmAbsTouched","$DimmwertGroesser_CResult","-$StatusDimmenAbs","-$StatusDimmenRel"], "$DimmenAbsStartGroesser"],
["And" , ["$DimmAbsTouched","$DimmwertKleiner_CResult","-$StatusDimmenAbs","-$StatusDimmenRel"], "$DimmenAbsStartKleiner"],
["Or" , ["$DimmenAbsStartGroesser","$DimmenAbsStartKleiner"],"$DimmenAbsolutStart"],
["Latch","$KonstTrue","$StatusDimmenAbs","$DimmenAbsolutStart",1],
["Latch","$I_Schrittweite","$Schrittweite","$StatusDimmenAbs",0],
["Or" , ["$StatusDimmenAbs","$StatusDimmenRel"],"$StatusDimmen"],
["Latch","$I_RueckmeldungDimmen","$DimmwertLast","$StatusDimmen",1],
Code: Alles auswählen
// Dimmrichtung gesamt ermitteln
["And" , ["$StatusDimmenRel","$Bit3b"], "$DimmRichtungRelHeller"],
["And" , ["$StatusDimmenRel","-$Bit3b"], "$DimmRichtungRelDunkler"],
["And" , ["$StatusDimmenAbs","$DimmwertGroesser_CResult"], "$DimmRichtungAbsHeller"],
["And" , ["$StatusDimmenAbs","$DimmwertKleiner_CResult"], "$DimmRichtungAbsDunkler"],
["Or" , ["$DimmRichtungRelHeller","$DimmRichtungAbsHeller"], "$DimmRichtungHeller"],
["Or" , ["$DimmRichtungRelDunkler","$DimmRichtungAbsDunkler"], "$DimmRichtungDunkler"],
["Latch","$Konst1","$DimmRichtung","$DimmRichtungHeller",0],
["Latch","-$Konst1","$DimmRichtung","$DimmRichtungDunkler",0],
Code: Alles auswählen
// Mit Abs. Sollwert verleichen prüfen
["Comparator", "-$DimmwertNeu", "-$DimmwertAbsGr_CResult", "-$I_DimmbefehlAbsolut"], // >= daher alles invertiert!
["Comparator", "$DimmwertNeu", "-$DimmwertAbsKl_CResult", "$I_DimmbefehlAbsolut"], // <= daher nur Ausgang invertiert
// Sollwert auf Ausgang übernehmen, wenn neuer Wert Sollwert über(unter)schreitet
["And" , ["$DimmwertAbsGr_CResult","$DimmRichtungHeller","$StatusDimmenAbs"], "$SollReached1"],
["And" , ["$DimmwertAbsKl_CResult","$DimmRichtungDunkler","$StatusDimmenAbs"], "$SollReached2"],
["Or" , ["$SollReached1","$SollReached2"], "$SollReached"],
["Latch","$I_DimmbefehlAbsolut","$O_Dimmwert","$SollReached",0],
Code: Alles auswählen
// Wenn obere oder untere Grenze erreicht, Dimmvorgang abbrechen (IMMER, daher Latch Triggeroption=0)
["Or" , ["$LimitMin","$LimitMax","$SollReached"], "$DimmenStop"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenStop",0],
// Auch beide Status-Variablen zurücksetzen
["Latch","$KonstFalse","$StatusDimmenAbs","$DimmenStop",0],
["Latch","$KonstFalse","$StatusDimmenRel","$DimmenStop",0],
Code: Alles auswählen
/**===========================================================
Kommentar
============================================================*/
{
"Level":[
// Eingänge
["$I_DimmbefehlRelativ","integer",0],
["$I_DimmbefehlAbsolut","integer",0],
["$I_RueckmeldungDimmen","float",0.0],
["$I_Schrittweite","float",5.0],
["$I_DauerDimmen","float",2.0],
["$I_DimmwertMax","float",100.0],
["$I_DimmwertMin","float",0.0],
// Ausgänge
["$O_Dimmwert","float",0.0],
["$O_StatusSchalten","bool",false],
// Interne Variablen
["$StatusDimmen","bool",false],
["$StatusDimmenAbs","bool",false],
["$StatusDimmenRel","bool",false],
["$DimmRelTouched","bool",false],
["$DimmenRelativStart","bool",false],
["$DimmenRelativStopp","bool",false],
["$DimmAbsTouched","bool",false],
["$DimmwertGroesser_CResult","bool",false],
["$DimmwertKleiner_CResult","bool",false],
["$DimmenAbsStartGroesser","bool",false],
["$DimmenAbsStartKleiner","bool",false],
["$DimmenAbsolutStart","bool",false],
["$DimmwertLast","float",0.0],
["$DimmwertNeu","float",0.0],
["$DimmenAbsNeu","bool",false],
["$DimmRichtungAbsHeller","bool",false],
["$DimmRichtungAbsDunkler","bool",false],
// ["$DimmRichtungRel","float",0.0],
["$DimmRichtungRelHeller","bool",false],
["$DimmRichtungRelDunkler","bool",false],
["$DimmRichtung","float",0.0],
["$DimmRichtungHeller","bool",false],
["$DimmRichtungDunkler","bool",false],
["$Schrittweite","float",0.0],
["$SchrittweiteRel","float",0.0],
["$DimmwertMax_CResult","bool",false],
["$DimmwertMin_CResult","bool",false],
["$LimitMax","bool",false],
["$LimitMin","bool",false],
["$DimmwertAbsGr_CResult","bool",false],
["$DimmwertAbsKl_CResult","bool",false],
["$SollReached1","bool",false],
["$SollReached2","bool",false],
["$SollReached","bool",false],
["$DimmenStop","bool",false],
["$Bit0b","bool",false],
["$Bit1b","bool",false],
["$Bit2b","bool",false],
["$Bit3b","bool",false],
["$KonstTrue","bool",true],
["$KonstFalse","bool",false],
["$Konst50","float",50.0],
["$Konst25","float",25.0],
["$Konst12_5","float",12.5],
["$Konst6","float",6.0],
["$Konst3","float",3.0],
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$Takt","bool",false],
["$TaktLast","bool",false],
["$ClockTriggered","bool",false],
["$NewValue","bool",false]
],
"Module":[
// Werte des letzten Aufrufs abspeichern
["Latch","$O_Dimmwert","$DimmwertLast","$KonstTrue",0],
["Latch","$Takt","$TaktLast","$KonstTrue",0],
// Auswerten, ob Eingang Rel. Dimmen getriggert wurde
["Triggered", "$I_DimmbefehlRelativ", "$DimmRelTouched" ],
// Nur wenn Wert >0 und Dimmen noch nicht aktiv, StatusDimmmen auf True setzen
["And" , ["$DimmRelTouched","$I_DimmbefehlRelativ","-$StatusDimmenRel","-$StatusDimmenAbs"], "$DimmenRelativStart"],
["Latch","$KonstTrue","$StatusDimmenRel","$DimmenRelativStart",0],
// Stopp Telegramm auswerten und Dimmen stoppen
["And" , ["$DimmRelTouched","-$I_DimmbefehlRelativ","$StatusDimmenRel","-$StatusDimmenAbs"], "$DimmenRelativStopp"],
["Latch","$KonstFalse","$StatusDimmenRel","$DimmenRelativStopp",0],
// Bei negativer Flanke auch Takt zurücksetzen, damit nächster Dimmvorgang korrekt erkannt wird
["Latch","$KonstFalse","$TaktLast","$StatusDimmenRel",2],
// Schrittweite aus DPT3 umrechnen:
["Multiplexer",["$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1","$Konst0","$I_Schrittweite","$Konst50","$Konst25","$Konst12_5","$Konst6","$Konst3","$Konst1"],"$SchrittweiteRel","$I_DimmbefehlRelativ"],
// Nur übernehmen, wenn Rel. Dimmen aktiv
["Latch","$SchrittweiteRel","$Schrittweite","$StatusDimmenRel",0],
// Wenn $I_DimmbefehlAbsolut während laufendem Dimmvorgang überschrieben wird => letzten gesendeten Wert als Rückmeldung übernehmen
["And" , ["$DimmAbsTouched","$StatusDimmenAbs","-$StatusDimmenRel"], "$DimmenAbsNeu"],
["Latch","$DimmwertLast","$I_RueckmeldungDimmen","$DimmenAbsNeu",1],
// Auswerten, ob Eingang Abs. Dimmen getriggert wurde
["Triggered", "$I_DimmbefehlAbsolut", "$DimmAbsTouched" ],
["Comparator", "$I_DimmbefehlAbsolut", "$DimmwertGroesser_CResult", "$I_RueckmeldungDimmen"],
["Comparator", "$I_RueckmeldungDimmen", "$DimmwertKleiner_CResult", "$I_DimmbefehlAbsolut"],
["And" , ["$DimmAbsTouched","$DimmwertGroesser_CResult","-$StatusDimmenAbs","-$StatusDimmenRel"], "$DimmenAbsStartGroesser"],
["And" , ["$DimmAbsTouched","$DimmwertKleiner_CResult","-$StatusDimmenAbs","-$StatusDimmenRel"], "$DimmenAbsStartKleiner"],
["Or" , ["$DimmenAbsStartGroesser","$DimmenAbsStartKleiner"],"$DimmenAbsolutStart"],
["Latch","$KonstTrue","$StatusDimmenAbs","$DimmenAbsolutStart",1],
["Latch","$I_Schrittweite","$Schrittweite","$StatusDimmenAbs",0],
["Or" , ["$StatusDimmenAbs","$StatusDimmenRel"],"$StatusDimmen"],
["Latch","$I_RueckmeldungDimmen","$DimmwertLast","$StatusDimmen",1],
// Dimmrichtung aus DPT3 ermitteln
["BinaryDemultiplexer","$I_DimmbefehlRelativ",["$Bit0b","$Bit1b","$Bit2b","$Bit3b"]],
// Dimmrichtung gesamt ermitteln
["And" , ["$StatusDimmenRel","$Bit3b"], "$DimmRichtungRelHeller"],
["And" , ["$StatusDimmenRel","-$Bit3b"], "$DimmRichtungRelDunkler"],
["And" , ["$StatusDimmenAbs","$DimmwertGroesser_CResult"], "$DimmRichtungAbsHeller"],
["And" , ["$StatusDimmenAbs","$DimmwertKleiner_CResult"], "$DimmRichtungAbsDunkler"],
["Or" , ["$DimmRichtungRelHeller","$DimmRichtungAbsHeller"], "$DimmRichtungHeller"],
["Or" , ["$DimmRichtungRelDunkler","$DimmRichtungAbsDunkler"], "$DimmRichtungDunkler"],
// Dimmrichtung auf -1/+1 setzen
["Latch","$Konst1","$DimmRichtung","$DimmRichtungHeller",0],
["Latch","-$Konst1","$DimmRichtung","$DimmRichtungDunkler",0],
// Neuen Dimmwert berechnen
["Polynomial", "$DimmRichtung", "$DimmwertNeu",["$DimmwertLast", "$Schrittweite"]],
// Dimmgrenzen prüfen
["Comparator", "-$DimmwertNeu", "-$DimmwertMax_CResult", "-$I_DimmwertMax"], // >= daher alles invertiert!
["Comparator", "$DimmwertNeu", "-$DimmwertMin_CResult", "$I_DimmwertMin"], // <= daher nur Ausgang invertiert
// Mit Abs. Sollwert verleichen prüfen
["Comparator", "-$DimmwertNeu", "-$DimmwertAbsGr_CResult", "-$I_DimmbefehlAbsolut"], // >= daher alles invertiert!
["Comparator", "$DimmwertNeu", "-$DimmwertAbsKl_CResult", "$I_DimmbefehlAbsolut"], // <= daher nur Ausgang invertiert
// Min/Max. Dimmwert auf Ausgang übernehmen, wenn neuer Wert außerhalb der Grenzen liegt und Dimmenvorgang aktiv
["And" , ["$DimmwertMax_CResult","$DimmRichtungHeller","$StatusDimmen"], "$LimitMax"],
["Latch","$I_DimmwertMax","$O_Dimmwert","$LimitMax",0],
["And" , ["$DimmwertMin_CResult","$DimmRichtungDunkler","$StatusDimmen"], "$LimitMin"],
["Latch","$I_DimmwertMin","$O_Dimmwert","$LimitMin",0],
// Sollwert auf Ausgang übernehmen, wenn neuer Wert Sollwert über(unter)schreitet
["And" , ["$DimmwertAbsGr_CResult","$DimmRichtungHeller","$StatusDimmenAbs"], "$SollReached1"], // ,"-$DimmAbsTouched"
["And" , ["$DimmwertAbsKl_CResult","$DimmRichtungDunkler","$StatusDimmenAbs"], "$SollReached2"], // ,"-$DimmAbsTouched"
["Or" , ["$SollReached1","$SollReached2"], "$SollReached"],
["Latch","$I_DimmbefehlAbsolut","$O_Dimmwert","$SollReached",0],
// Wenn obere oder untere Grenze erreicht, Dimmvorgang abbrechen (IMMER, daher Latch Triggeroption=0)
["Or" , ["$LimitMin","$LimitMax","$SollReached"], "$DimmenStop"],
["Latch","$KonstFalse","$StatusDimmen","$DimmenStop",0],
// Auch beide Status-Variablen zurücksetzen
["Latch","$KonstFalse","$StatusDimmenAbs","$DimmenStop",0],
["Latch","$KonstFalse","$StatusDimmenRel","$DimmenStop",0],
// Taktgeber starten
["Clocksignal","$StatusDimmen","$Takt","$I_DauerDimmen"],
// Taktsignal mit letztem Wert vergleichen: wenn ungleich => Taktgeber hat getriggert
["Limiter","$Takt",0,"-$ClockTriggered",["$TaktLast", "$TaktLast"]],
// Wert nur übernehmen, wenn Dimmvorgang aktiv und Taktsignal getriggert hat
["And" , ["$ClockTriggered","$StatusDimmen"], "$NewValue"],
["Latch","$DimmwertNeu","$O_Dimmwert","$NewValue",0]
// VORLAGE
//["Polynomial", "$Var_x", "$OutputFloat",["$A0", "$A1"]],
//["Ratio","$Zaehler","$OutputFloat","$Nenner"],
//["Limiter","$Input1","$OutputFloat","$InputInnerhalb",["$Untergrenze", "$Obergrenze"]],
//["Comparator", "$Input1", "$OutputBool", "$Vergleichswert"],
//["Multiplexer",["$Input1","$Input2"],"$OutputFloat","$SelectInput"],
//["Or" , ["$Input1","$Input2"], "$OutputBool"],
//["And" , ["$Input1","$Input2"], "$OutputBool"],
//["Monoflop","$Trigger","$Reset","$TimerStatus","$Dauer",1],
//["Latch","$Input1","$Output","$Trigger",0], // Übernimmt den Wert von $Input1 auf $Output, wenn Trigger = 0, Option 0/1/2/3 = wenn true/pos. Flanke/neg. Flanke/jede Flanke
//["Clocksignal","$Enable","$Takt","$Periode"], // Zyklischer Trigger, $Takt wechselt jeweils nach Ablauf von $Periode zwischen TRUE/FALSE
//["HobbsMeter","$Status","$Time","$Reset"], // Zaehlt bei $Status = TRUE die Zeit in [h]
//["Stopwatch","$Status", "$Time"], // Stoppt die Zeit in [s] ab $Status = TRUE, bei $Status = FALSE wird auf 0 zurückgesetzt
//["CalcFormula",["$Day1Case","$Day2Case","$Day3Case","$Day4Case","$DayEquals"], "$Case", "$Formula3"],
//["Cron","$KonstTrue","$Reset",0,"$CronString"],
//["Wakeup","$Utime_start","$Status"],
//["BinaryMultiplexer",["$In_D","$In_E","$In_F"],"$Output"],
//["Triggered", "$InputVar", "$Touched" ], // Touched = TRUE, wenn der Eingang $InputVar die Logik getriggert hat
//["SendExplicit","$Send","$OutputVar",0], // Sendet Ausgang $OutputVar, abhängig von $Send 0/1/2/3 (Paramter analog Latch), ACHTUNG "x" am Output setzen!
//["Interpolation","$In", "$Out", [ [x1,y1] , [x2,y2] , ... , [xn,yn ] ] ] **/
],
"Input":[
["Relativer Dimmwert","Eingang Dimmbefehlt DPT3","$I_DimmbefehlRelativ","c"],
["Absoluter Dimmwert","Eingang Dimmbefehlt 0-100%","$I_DimmbefehlAbsolut","c"],
["Rückmeldung Dimmwert","Eingang Rückmeldeobjekt Dimmen","$I_RueckmeldungDimmen","c"],
["Schrittweite","Schrittweite","$I_Schrittweite","c"],
["Dauer Dimmvorgang","Dauer Dimmvorgang 0-100%","$I_DauerDimmen","c"],
["max. Dimmwert","max. Dimmwert","$I_DimmwertMax","c"],
["min. Dimmwert","min. Dimmwert","$I_DimmwertMin","c"]
],
"Output":[
["Absolut Dimmwert","Output absoluter Dimmwert 0-100%","$O_Dimmwert","c"],
["Schaltstatus","Status Schalten","$O_StatusSchalten","c"],
["Debug_Out Bit4","Dimmrichtung","$Bit3b","c"],
//["Debug_Out DimmwertLast","Startwert","$DimmwertLast","c"],
//["Debug_Out DimmwertNeu","Startwert","$DimmwertNeu","c"],
["Debug_Out StatusDimmen","aktiver Dimmvorgang?","$StatusDimmen","c"]
]
}