
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo Andreas, habe deine Frage erst jetzt gelesen, vielleicht nützt meine Antwort dir noch etwas. Neben der Aufladesteuerung für meine Nachtspeicherheizung, regele ich auch die Vorlauftemperatur meiner Fussbodenheizung durch Ansteuerung eines Mischermotors mit 3-Wege-Mischer über CControl. Wesentliche Aspekte dabei sind - die relativ große Verzögerung des Vorlauffühlers, > 1 min, - die Laufzeit des Mischermotors, 110 sec von ganz zu nach ganz auf. Das kann man natürlich alles regelungstheoretisch berechnen, das einfach und schnell durchzuprobieren ist besser. Klar ist wegen der großen Verzögerungen im Kreis ein D-Anteil im Regler, gepaart mit einem P-Anteil. Hier sind meine CBASIC-Anweisungen: '--------------------------------------------------------------------------------------- 'H E I Z U N G S - E n t l a d u n g 'Vorlauftemp. abhängig von der Aussentemp. steuern 'Wenn die "mischerlaufzeit" (noch) # 0 ist, läuft er noch (kann eigentlich nur "zu" sein), 'daran soll nichts geändert werden, einfach nur weiter laufen lassen. 'Das kann sein, wenn der Mischer ganz zu laufen soll, eine Minute (= Zykluslänge) 'reicht da nicht, er braucht dazu ca. 110 sek if mischerlaufzeit > 0 then goto mischer_ende 'zunächst Mischer stoppen, um klare Verhältnisse zu schaffen da_misch_auf = LO da_misch_zu = LO 'Nachtabsenkung prüfen ' if hour >= NACHTABSENKUNG_EIN or hour < NACHTABSENKUNG_AUS then goto mischer_zu 'Bei Auskommentierung auch in 'print_status' anpassen 'Prüfen, ob Aufladebeginn, dann Mischer zu wg. des heißen Kesselvorlaufs und 'die übliche Berechnung überspringen if da_sh and (not sh_vorher) then goto mischer_zu 'TA vom Entladefühler bestimmen gosub konv_ra_ta_e 'i1 = TA * 10 if i1 > TA_MAX then goto mischer_zu 'oberhalb TAmax keine Heizung mehr, d.h. Mischer zu 'Mischerlaufzeit abhängig von der Soll-/Ist-Temp.differenz berechnen. 'Die Mischerlaufzeit wird im Sekundenzyklus heruntergezählt und bei Erreichen von Null 'wird 'da_misch_...' wieder auf LO gesetzt, d.h. der Mischer wieder ausgeschaltet. 'ACHTUNG: Integerrechnung, da der Zahlenbereich von Byte überschritten wird! gosub konv_ta_tvsoll 'i2 = TVsoll * 10 gosub konv_rv_tv 'i1 = TV-Ist * 10 m_stellgroesse = (i2 - i1)*P_MLZ 'Stellgroesse P-Anteil i2 = i1 'TV-Ist retten, da konv_rv_tv_b1 i1 verändert b2_i1 = tv_vorher gosub konv_rv_tv_b1 'i1 = TV-Ist-vorher * 10 m_stellgroesse = m_stellgroesse - (i2 - i1)*D_MLZ 'Stellgroesse mit P- und D-Anteil mischerlaufzeit = (abs(m_stellgroesse)+5)/10 'runden und Faktor 10 weg 'Die Mischerlaufzeit ist immer positiv! 'Die Laufrichtung wird durch das Vorzeichen von m_stellgroesse gegeben if mischerlaufzeit <= MLZ_TOTZONE then goto mlz_kleiner_totzone if m_stellgroesse > 0 then da_misch_auf = HI else da_misch_zu = HI #mlz_kleiner_totzone goto mischer_ende #mischer_zu da_misch_zu = HI mischerlaufzeit = MLZ_MAX 'Max. Laufzeit setzen, damit der Mischer immer zuläuft, ' sonst wird er im Sek.zyklus wieder ausgeschaltet #mischer_ende tv_vorher = ae_tv 'Merken für den D-Anteil im nächsten Minutenzyklus Zugegeben ein bisschen lang, wenn Fragen sind ... melde dich. Die obige Routine läuft im Minutentakt. Die gross geschriebenen Namen stehen für Konstanten, die im Def-Teil vorgegeben sind. Insbesondere P_MLZ und D_MLZ sind experimentell zu ermitteln, was einfach geht, indem man die Vorlauftemp. minütlich aufzeichnet und einen "Sprung" auf den Regler gibt, z.B. den Mischer von Hand zufährt und dann auf Automatik schaltet. Noch was: Der Mischermotor ist ein 42V~ Motor, die Ansteuerung erfolgt durch Relais, das können ganz kleine sein, da der Motor nur ca. 50 mA aufnimmt. Gruss Laika |
| Antwort schreiben |