ein modul für eine heizungskennlinie
noch anregungen?
FUNCTION_BLOCK HK_KNL
VAR_INPUT
t_ext : REAL;
enable : BOOL := TRUE;
T1 : TIME := t#1h;
TT : TIME := t#2h;
t_max: REAL;
t_max_ext : REAL;
t_min : REAL;
t_min_ext : REAL;
T_1 : REAL;
T_2 : REAL;
T_3 : REAL;
Anhebung : REAL;
Neigung : REAL;
END_VAR
VAR_OUTPUT
t_out : REAL;
END_VAR
VAR
t_e : REAL;
delay : FT_TN8;
filter : FT_PT1;
END_VAR
(*
version 1.0 1 jan 2007
programmer oscat
tested by tobias
Der Funktionsblock HK_KNL berechnet die vorlauftemperatur in abhaengigkeit von aussentemperatur, 3 fixen temperaturanforderungen (z.B. Boiler) und absenkung und Anhebungsinformationen
t_ext ist der Anschluß der externen Temperatur, es wird empfohlen dort das modul temp_ext zu verwenden, was aber nicht zwingend noetig ist.
wenn temp_ext verwendet wird sollte der ausgang Heat an den Eingang enable gelegt werden.
unabhängig von enable welches die heizung einschaltet, sind 3 eingänge t_1 .. T_3 verfuegbar, wobei hier der hoechste wert verwendet wird und die heizung auf diesen wert gefahren wird unabhaengig vom eingang enable.
dies dient fuer separate verbraucher wie z.B. Boiler oder Schwimmbad u.s.w.
t_max und t_min sind die grenztemperaturen fuer den Ausgang T_out.
T_max_ext und T_min_ext sind die t_ext temperaturen bei denen der knickpunkt fuer t_max und T_min erreicht wird.
z.B. t_min_ext = -18, t_min = 50, t_max_ext = 20, t_max = 35.
unabhaengig von der Einstellung von t_max oder t_max_ext kann jederzeit durch den Eingang enable bereits bei niedrigeren Temperaturen
die Heizung abgeschaltet werden.
der Eingang Absenkung wird zur Kennlinie addiert, also die kennlinie nach oben oder unten entlang der Y achse verschoben,
wobei die Grenztemperaturen t_min und t_max nicht ueberschritten bzw unterschritten werden.
der Eingang Neigung veraendert dabei nur die untere grenztemperatur (t_min) nicht die obere / t_max).
die kurve wird also steiler oder flacher.
Die eingaenge T1 und TT spezifizieren die verzögerung und die Zeitkonstante des Tiefpasses für den eingang t_ext
dadurch kann sowohl eine verzoegerung als auch ein tiefpass für t_ext definiert werden.
per default liegen diese werte bei 2h fuer tt und 1h fuer t1. je nach bauart des gebaeudes sind hier andere werte noetig.
*)
delay(in := t_ext, T := TT);
filter(in := delay.out, T := T1);
t_out := F_Lin2(filter.out, t_min_ext, t_min , t_max_ext, t_max + Neigung) + Anhebung;
IF t_out < t_min THEN
t_out := t_min;
ELSIF t_out > t_max THEN
t_out := T_max;
END_IF;
IF NOT enable THEN t_out := 0; END_IF;
IF max3(T_1,t_2,T_3) > t_out THEN t_out := max3(t_1, t_2, t_3); END_IF;