Ich würde mich freuen, wenn der Eine oder Andere hier mitmacht und mitdenkt ... denn es soll ja ein universeller Baustein werden. Ich habe sicher auch nicht alles perfekt gemacht (ist ja mein erster Custom-Versuch). Und vielleicht kann ElabNet das Ergebnis ja später in die Bibliothek aufnehmen.
Hier erstmal meine Gedankenskizze (kann ich hier irgendwo Powerpoint-Dateien hinterlegen, damit man in einer gemeinsamen Datei arbeiten könnte?):
[hsimg]ext/dmzx/imageupload/files/96da7f1957d3 ... 551f28.jpg[/hsimg]
Soweit mein Code:
Code: Alles auswählen
/**
* RTR V1.0
*/
{
"Level":[
["$Switch","bool",false],
["$CompSwitch","bool",false],
["$Alarm_Temp", "bool",false],
["$dummyTrue","bool",true],
["$dummyFalse","bool",false],
["$VAR<TempIn!>","float",15],
["$watchdogTime","integer",360],
["$Status","bool",false],
["$internStatus","bool",false],
["$TempCompInaktiv","float",18],
["$Reference","float",20],
["$Controlled","float",20],
["$Manipulate","float",0],
["$Kp","float",0],
["$Ki","float",0],
["$Kd","float",0],
["$Konst50","float",50],
["$Konst1","float",1],
["$Out","float",0]
],
"Module":[
["Comparator","$Reference","$CompSwitch","$TempCompInaktiv"],
["And",["$CompSwitch","$Switch"],"$internStatus"],
["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
["Break",["-$Status"]],
["Monoflop","$VAR<TempIn!>",0,"$internStatus","$watchdogTime",1],
["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
["Multiplexer",["$dummyTrue",0],"$Alarm_Temp","$internStatus"],
["Break",["-$Status"]],
["Statistic",["$VAR<TempIn!>"],0,0,"$Controlled",0],
["PID controller","$Reference","$Controlled","$Manipulate","$Kp","$Ki","$Kd"],
["Limiter","$Manipulate","$Manipulate",0,["-$Konst50","$Konst50"]],
["Polynomial","$Manipulate","$Out",["$Konst50","$Konst1"]],
["Comparator","$Out","$internStatus",0],
["Multiplexer",["$internStatus","$dummyTrue"],"$Status","$internStatus"]
],
"Input":[
["Sw","Schalter","$Switch","c"],
["TempIn","Temperatur Messung","$VAR<TempIn!>","a"],
["Const_TempInaktiv","Schwellwert ob Regelung notwendig","$TempCompInaktiv","u"],
["watchdogTime","Überwachungszeit","$watchdogTime","u"],
["Soll","Soll-Wert","$Reference","c"],
["Kp","Proportional-Term","$Kp","u"],
["Ki","Integral-Term","$Ki","u"],
["Kd","Diverential-Term","$Kd","u"]
],
"Output":[
["Stell","Stellgröße","$Out","a"],
["FuehlerAlarm","bei 1 kein Temperaturwert innerhalb der Überwachungszeit","$Alarm_Temp","c"],
["Status","HK aktiv oder inaktiv","$Status","a"]
]
}
Aber sobald ich einen zweiten Temperatureingang wähle, lässt sich die Logik nicht mehr ausführen (Ich habe einige Räume, in denen ich das gerne nutzen würde).
Noch ein Hinweis: Der Ausgang Heizkreis-"Status" soll bewusst nicht einfach nur eine Rückmeldung zum Ausführen des Eingang "Schalter" sein. Der Status soll unterm Strich anzeigen, ob das Ventil offen ist oder nicht. In einer weiteren Logik würde ich dann z.B. über ein OR-Baustein aus allen Heizkreis-Stati ermitteln, ob die Umwälz-Pumpe der Fußbodenheizungen laufen muss oder nicht.
Was mir auch noch fehlt sind gute Initial PID-Werte für eine
- Luft-Temperatur-Regler
- Estrich-Temperatur-Regler