Davon trennen kann man noch die Geschichte mit den Rampen und die eigentliche Leistungssteuerung. Damit hat man dann drei Blöcke und es wird übersichtlicher.
Erstmal der Regler. Der einfachste Fall ist ein Proportionalregler (P-Regler):
Das ist Pseudocode. In Realität würde ich das in eine von einem Timer getriggerte Schleife packen und nicht per wait machen.
Code: Alles auswählen
:Start
Regelabweichung = Sollwert - Istwert
P_Anteil = Regelabweichung * kP
Reglerausgang = P_Anteil
wait Zykluszeit
goto Start
Je größer kP ist, desto schneller wird auf die Temperatur hin gesteuert, desto größer wird aber auch der Überschwinger und wenn er zu groß ist, dann schwingt die Kiste dauerhaft.
Mit einem P-Regler wird man aber nie genau die Solltemperatur erreichen. Vielleicht reicht das hier aber auch schon.
Wenn nicht, dann kann man auch noch einen I-Anteil dazu bauen und kriegt einen PI-Regler:
Code: Alles auswählen
:Start
Regelabweichung = Sollwert - Istwert
P_Anteil = Regelabweichung * kP
I_Anteil = I_Anteil + (Regelabweichung * kI)
Reglerausgang = P_Anteil + I_Anteil
wait Zykluszeit
goto Start
Wenn man schnell auf Störgrößen von außen reagieren muss, könnte man noch einen Differentialanteil dazubauen und hätte einen PID-Regler. Das wird bei einem Brennofen aber ziemlich sicher nicht der Fall sein. Das sähe dann so aus:
Code: Alles auswählen
:Start
Regelabweichung = Sollwert - Istwert
Istwert_alt = Istwert
P_Anteil = Regelabweichung * kP
I_Anteil = I_Anteil + (Regelabweichung * kI)
D_Anteil = (Istwert_alt - Istwert) * kD
Reglerausgang = P_Anteil + I_Anteil + D_Anteil
wait Zykluszeit
goto Start
I-Anteile haben den Nachteil, dass wenn der Sollwert lange nicht erreicht wird, sich der I_Anteil auf sehr große Werte aufsummiert, die dann stören, wenn der Sollwert erreicht wird. Da kann man dann noch einen Anti-Windup einbauen, sprich den Wert von I_Anteil auf z.B. 0,1 begrenzen. Das gibt allerdings eine Nichtlinearität, die einem andere Probleme machen kann. (War bei mir noch nicht der Fall.) Und es ist die Frage, ob es den I-Anteil hier überhaupt braucht.
Zum Regler optimieren wäre es ganz gut, wenn man auf jeden Fall die Temperatur und wenn möglich auch die einzelnen Anteile und den Reglerausgang in ein Diagramm plotten könnte. Das hilft (zumindest mir) sehr beim Verständnis und dabei ein Gefühl für die Geschichte zu bekommen.
Dem Regler ist es erstmal egal, ob der einen konstanten oder einen veränderlichen Sollwert bekommt.
Sprich, man kann die Temperaturprofilgeschichte getrennt vom Regler betrachten.
Auch die Leistungsstellung ist unabhängig vom Regler, wie man die ausführt.
Wenn man einen Reglerausgang von 0,2 hat, könnte man:
- 2 Sekunden an, 8 Sekunden aus
- 1 Netzperiode an, 4 aus
- Phasenanschnitt mit Stellgrad, dass 20% Leistung rauskommen
- eines von fünf Heizregistern an
- oder verschiedene andere Leistungsstellvarianten machen
Das ist wiederum dem Regler egal.
Damit hat man drei übersichtlichere Funktionsblöcke und die Aufgabe wird vielleicht etwas weniger abschreckend...