auch wenn ein derartiger Regler aufgrund verfügbarer Aktoren mit Regler nicht unbedingt erforderlich ist. Habe ich aus der Not geboren eine Custom-Logik für einen Raumteperaturregler mit Kühlungsoption erstellt.
Code: Alles auswählen
/**
* FB RTR mit Kühlung V1.0
* Arno Zietz 22.11.22
*
* "Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht."
*/
{
"_Meta": { // Optional
"Description": "FB RTR mit Kühlen",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input":[
["Sw","Schalter","$Switch","c"],
["Cool","Kühlen","$Cool","c"],
["TempIn","Temperatur Messung","$VAR<TempIn!>","a"],
["Const_TempInaktiv","Schwellwert ob Regelung notwendig","$TempCompInaktiv","u"],
["Const_TempMax","Schwellwert, ob Temperatur zu hoch","$TempCompMaxWarm","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_Sensor","c"],
["HitzeAlarm","bei 1 zu Hohe gemessene Temperatur","$Alarm_MaxTemp","c"],
["Status","HK aktiv oder inaktiv","$Status","a"]
],
"Level":[
["$Switch","bool",false],
["$Cool","bool",false],
["$CompSwitch","bool",false],
["$Alarm_Sensor", "bool",false],
["$Alarm_MaxTemp", "bool",false],
["$dummyTrue","bool",true],
["$dummyFalse","bool",false],
["$VAR<TempIn!>","float",15],
["$watchdogTime","integer",360],
["$Status","bool",false],
["$internStatus","bool",false],
["$TempCompInaktiv","float",18],
["$TempCompMaxWarm","float",30],
["$Reference","float",20],
["$Controlled","float",20],
["$Manipulate","float",0],
["$Kp","float",0],
["$Ki","float",0],
["$Kd","float",0],
["$Konst100","float",100],
["$Konst1","float",1],
["$Konst0","float",0],
["$Out","float",0]
],
"Module":[
["Comparator","$Reference","$CompSwitch","$TempCompInaktiv"],
["And",["$CompSwitch","$Switch"],"$internStatus"],
["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
["Break",["-$internStatus"]],
["Statistic",["$VAR<TempIn!>"],0,0,"$Controlled",0],
["Comparator","$Controlled","-$internStatus","$TempCompMaxWarm"],
["Multiplexer",["$dummyFalse",0],"$Out","$internStatus"],
["Multiplexer",["$dummyFalse",0],"$Status","$internStatus"],
["Multiplexer",["$dummyTrue","$dummyFalse"],"$Alarm_MaxTemp","$internStatus"],
["Break",["-$internStatus"]],
["PID controller","$Reference","$Controlled","$Manipulate","$Kp","$Ki","$Kd"],
["Polynomial","$Manipulate","$Manipulate",["$Konst0","$Konst100"]],
["Latch","-$Manipulate","$Manipulate","$Cool",0],
["Latch","$Manipulate","$Manipulate","-$Cool",0],
["Limiter","$Manipulate","$Out",0,["-$Konst0","$Konst100"]],
["Comparator","$Out","$internStatus",0],
["Multiplexer",["$dummyFalse","$dummyTrue"],"$Status","$internStatus"]
]
}
Die Ist-temperaturen kommen per Telegramm aus der KNX-Anlage, die Soll-Temperaturen kommen per Comet-Visu ebenfalls über den KNX. Die Stellgrößen gehen nachdem die Lgik fertiggestellt und gespeichert wurde wie gewünscht raus. Zum Testen habe ich die EIngangswerte "Kühlung", "Soll-Temperatur" entsprechend mit der Visualierung geändert. Die Stellgrößen werden entsprechend auf den KNX gesendet.
Nach jetzt über 2 Monaten Nutzungsdauer ist mir folgemdes aufgefallen:
- Logik gespeichert und getestet
- Nach einiger Zeit (1 Tag?) lässt sich die Stellgröße nicht mehr verändern. Es wir der falsche Wert gesendet, obwohl sich die EIngangswerte entsprechend ändern
- Nach erneuter Speicherung, läuft es wieder
Freue mich über Feedback. Vielleicht hat ja auch jemand eine Idee, was ich übersehen haben.
Arno