Ich fürchte das ist wieder eine Spezialfrage für @S. Kolbinger, vielleicht fällt aber auch jemand anderem eine Idee zu meinem Problem ein.
Hintergrund: Impulszähler, der eine Leistung ausgibt. Nach dem letzten Impuls (Gerät aus), bleibt aber eine Leistungswert <> 0 stehen. Damit wollte ich ein Timeout ergänzen, nach dem der Ausgang auf 0 gesetzt wird.
Das Monoflop wird mit jedem neuen Wert re-getriggert. Kommt kein Impuls mehr, läuft der Timer dann x sec. ab und triggert auch die Logik nochmal.
Entgegen meinen Erwartungen wird aber beim letzten Aufruf der Ausgang des Timers nicht auf 0 gesetzt (was zeitgleich die Ausgänge Leistung 1/2 auf 0 setzen würde).
Irgendwo hab ich da einen Knopf im Hirn....
Danke für eure Hilfe
Robert
Code: Alles auswählen
/**=====================================================================
Umrechnung von Impulsen in Leistung. - update 22.1.2020
Ausgang 1 wird mit jedem Impuls aktualisiert
Ausgang 2: wird nur nach Überschreitung von Min. Intervall neu
berechnet, kürzere Impulse werden gemessen/gezählt und gemittelt.
======================================================================*/
{
"Level": [
["$In","bool",false],
["$In_Last","bool",false],
["$Delta","bool",false],
["$Output","bool",false],
["$TimeHigh","float",0.0],
["$TimeLow","float",0.0],
["$Time","float",0.0],
["$TimeLast","float",0.0],
["$Umrechnung","float",3600.0],
["$dt_min","float",5.0],
["$Leistung1","float",0.0],
["$Leistung2","float",0.0],
["$Leistung2A","float",0.0],
["$Zaehler","integer",0.0],
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$KonstTrue","bool",true],
["$Timeout","float",30.0],
["$Timeout_Wait","bool",true]
],
"Module": [
["Stopwatch","$In","$TimeHigh"],
["Stopwatch","-$In","$TimeLow"],
// Impuls mit altem Wert vergleichen (anderer Trigger? zB intern)
["Polynomial","-$Konst1","$Delta",["$In", "$In_Last"]],
// Letztes dt übernehmen
["Multiplexer",["$TimeHigh","$TimeLow"],"$Time","$In"],
// Leistung1 berechnen
["Ratio", "$Umrechnung", "$Leistung1", "$Time"],
// Anzahl Impuls erhöhen und Impulsdauer zum gespeicherten Wert addieren
["Polynomial","$Konst1","$Zaehler",["$Zaehler", "$Konst1"]],
["Polynomial","$Konst1","$TimeLast",["$Time", "$TimeLast"]],
// Prüfen, ob dt > dt_min
["Comparator","$TimeLast" ,"$Output" , "$dt_min"],
// Leistung2 berechnen
["Ratio", "$Umrechnung", "$Leistung2A", "$TimeLast"],
["Polynomial","$Zaehler","$Leistung2A",["$Konst0", "$Leistung2A"]],
// Leistung 2 nur übernehmen, wenn dt > dt_min
["Multiplexer",["$Leistung2","$Leistung2A"],"$Leistung2","$Output"],
// Zaehler = 0; Summe Impulsdauer = 0
["Multiplexer",["$Zaehler","$Konst0"],"$Zaehler","$Output"],
["Multiplexer",["$TimeLast","$Konst0"],"$TimeLast","$Output"],
//
// Timeout für Leistung 0, re-trigger mit letztem neuen Impuls
["Monoflop","$Delta","-$KonstTrue","$Timeout_Wait","$Timeout",1],
["Multiplexer",["$Konst0","$Leistung1"],"$Leistung1","$Timeout_Wait"],
["Multiplexer",["$Konst0","$Leistung2"],"$Leistung2","$Timeout_Wait"],
// (In_Last = In)
["Polynomial","$Konst1","$In_Last",["$In"]]
],
"Output": [
["Leistung1","Leistung","$Leistung1","c"],
["Leistung2","Leistung","$Leistung2","c"],
["TimeHigh","Zeit Zustand EIN","$TimeHigh","c"],
["TimeLow","Zeit Zustand AUS","$TimeLow","c"],
["Time","Time","$Time","c"],
["TimeLast","Time","$TimeLast","c"],
["Zaehler","Zaehler","$Zaehler","c"],
["Zaehler","Zaehler","$Zaehler","c"]
],
"Input": [
["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","c"],
["Min. Interval","Minimaler Impulsabstand für Leistungsauswertung und Senden","$dt_min","c"],
["Umrechnungs- Faktor","tbd","$Umrechnung","c"],
["Timeout","Timeout für Leistung 0","$Timeout","c"]
]
}