Doe Logik ist damit eigentlich fertig.
Code: Alles auswählen
//================ Schritt 8 =====================
//Warnung + zyklisches Senden
{
"Input": [
["Temperatur Rueckspülung","Temperatur gemessen an der Rückspülleitung","$I_Temp","a"],
["Zeitkonstante Glättung","Zeitkonstante der geglätteten Temperatur, gegen die Delta T gemessen wird","$I_Glaettung","c"],
["Delta T Rückspülung","Schwelle zur Erkennung Temperaturabfall bei Rückspülung","$I_DeltaT","c"],
["Dauer Rückspülung","Dauer für Ausgabe Rückspülung aktiv","$I_RS_Dauer","c"],
["Sperrzeit nach Rückspülung","Mindestzeit, bevor wieder eine Rückspülung erkannt wird","$I_Sperrzeit","c"],
["Füllstandsverringerung je Rückspülung","","$I_HoeheRueckspuelung","c"],
["Trigger nachfüllen","Trigger für Nachfüllen je Sack","$I_TriggerNachfuellen","c"],
["Füllstandserhöhung je Sack","","$I_HoeheSack","c"],
["Füllstand Warnung","","$I_Fuellstand_Min","c"],
["Warnung Interval","","$I_WarnungInterval","c"]
],
"Output": [
["Rückspülung Jahr","Anzahl Rückspülungen im aktuellen Jahr","$RS_Anzahl","c"],
["Rückspülung Aktiv","Rückspülung läuft","$RS_Stat?","c"],
["Füllstand aktuell","Aktueller Füllstand","$Fuellstand","c"],
["Säcke Jahr","Anzahl der nachgefüllten Säcke im laufenden Jahr","$Saecke_Anzahl","c"],
["Warnung Füllstand","Trigger GA für Warnung","$Warnung","ct"],
["Temperatur geglättet","Temperatur nach Tiefpassfilter","$TempGeglaettet?","c"]
//["_And_Sperrre_Aktiv","Temperatur nach Tiefpassfilter","$Sperre_Aktiv","c"],
// Debug Ausgänge
//["_Temp_CResult","Vergleich der Temperaturen","$Temp_CResult","c"],
//["_And_RS_Neu","Temperatur nach Tiefpassfilter","$Rueckspuelung_Neu","c"],
],
"Level": [
["$I_Temp","float",20.0],
["$TempGeglaettet","float",20.0],
["$I_DeltaT","float",3.0],
["$I_Sperrzeit","float",3.0],
["$I_RS_Dauer","float",3.0],
["$I_Glaettung","float",36000.0],
["$I_TriggerNachfuellen","bool",false],
["$I_HoeheSack","float",25.0],
["$I_HoeheRueckspuelung","float",2.0],
["$RS_Anzahl","integer",0],
["$RS_AnzahlNeu","integer",0],
["$Fuellstand","float",25.0],
["$FuellstandNeu","float",0.0],
["$Saecke_Anzahl","integer",0],
["$Saecke_AnzahlNeu","integer",0],
["$ResetJahr","string","31 0 0 1 * *"],
["$ResetJahrTrigger","bool",false],
// Zusätzlich
["$I_Fuellstand_Min","float",20.0],
["$Warnung","bool",false],
["$I_WarnungInterval","float",86400.0],
//
["$Temp_Schwelle","float",0.0],
["$Temp_CResult","bool",false],
["$TimerStat","bool",false],
["$RS_Stat","bool",false],
["$Sperre_Aktiv","bool",false],
["$Sperrzeit_Gesamt","float",3.0],
["$Rueckspuelung_Neu","bool",false],
["$KonstTrue","bool",true],
["$KonstFalse","bool",false],
["$Konst0","float",0.0],
["$Konst1","float",1.0]
],
"Module": [
["Cron","$KonstTrue","$ResetJahrTrigger",0,"$ResetJahr"],
// Temperatur Glättung
["Lowpass","$I_Temp","$TempGeglaettet","$I_Glaettung"],
// Vergleich T aktuell < (T geglättet - DeltaT)
["Polynomial", "$Konst1", "$Temp_Schwelle",["$TempGeglaettet", "-$I_DeltaT"]],
["Comparator" , "$I_Temp" , "-$Temp_CResult" , "$Temp_Schwelle"],
// Rueckspuelung erkennen
["And",["$Temp_CResult","-$Sperre_Aktiv"], "$Rueckspuelung_Neu"],
["Polynomial", "$Konst1", "$Sperrzeit_Gesamt",["$I_RS_Dauer", "$I_Sperrzeit"]],
// Fuellstand neu berechnen und merken, wenn Rueckspuelung erkannt
["Polynomial", "$Konst1", "$FuellstandNeu",["$Fuellstand", "-$I_HoeheRueckspuelung"]],
["Latch","$FuellstandNeu","$Fuellstand","$Rueckspuelung_Neu",0],
// Zaehler neu berechnen und merken, wenn Rueckspuelung erkannt
["Polynomial", "$Konst1", "$RS_AnzahlNeu",["$RS_Anzahl", "$Konst1"]],
["Latch","$RS_AnzahlNeu","$RS_Anzahl","$Rueckspuelung_Neu",0],
// Timer Sperre und Rückspülung
["Polynomial", "$Konst1", "$Sperrzeit_Gesamt",["$I_RS_Dauer", "$I_Sperrzeit"]],
["Monoflop","$Rueckspuelung_Neu","$KonstFalse","$RS_Stat","$I_RS_Dauer",0],
["Monoflop","$Rueckspuelung_Neu","$KonstFalse","$Sperre_Aktiv","$Sperrzeit_Gesamt",0],
// Warnung bei Fuelstand <Mindestzeit
["Comparator" , "$Fuellstand" , "-$Warnung" , "$I_Fuellstand_Min"],
["Clocksignal","$Warnung",0,"$I_WarnungInterval"],
// Trigger Nachfuellung => Fuellstand + Sackanzahl erhöhen
["Polynomial", "$Konst1", "$Saecke_AnzahlNeu",["$Saecke_Anzahl", "$Konst1"]],
["Latch","$Saecke_AnzahlNeu","$Saecke_Anzahl","$I_TriggerNachfuellen",0],
["Polynomial", "$Konst1", "$FuellstandNeu",["$Fuellstand", "$I_HoeheSack"]],
["Latch","$FuellstandNeu","$Fuellstand","$I_TriggerNachfuellen",0],
// Triggereingang auf False setzen
["Multiplexer",["$I_TriggerNachfuellen","$KonstFalse"],"$I_TriggerNachfuellen","$I_TriggerNachfuellen"],
// Trigger Reset Jahr => Anzahl Rueckspuelungen auf 0 setzen
["Latch","$Konst0","$RS_Anzahl","$ResetJahrTrigger",0],
["Latch","$Konst0","$Saecke_Anzahl","$ResetJahrTrigger",0]
]
}