Das lernst du heute
- Schwingen erkennen
- Verstärkung schrittweise
- Werte im Stack mitschreiben
Die Heizung im Gewächshaus hat jetzt einen PI-Regler, aber sie pendelt: zehn Minuten zu warm, zehn Minuten zu kalt. Liegt es an KP? An KI? Raten kostet Stunden, weil jede Änderung erst nach Minuten zu sehen ist. Miss lieber, was der Regler tut.
Schwingen erkennen
Ein Regler, der schwingt, schießt abwechselnd über und unter das Soll. Die Abweichung e wechselt also immer wieder ihr Vorzeichen. Genau das zählt der Chip:
sgtz vz e # 1 = zu kalt, 0 = zu warm
sne tmp vz vzAlt # anders als beim letzten Mal?
add wechsel wechsel tmp
move vzAlt vz
Ein paar Wechsel pro Stunde sind normal, der Regler sucht den Sollwert. Viele Wechsel in gleichmäßigem Abstand, und jedes Mal ähnlich weit daneben – das ist Schwingen.
Ein Haken: Rund um den Sollwert zittert der Messwert immer ein wenig. Ohne Gegenmaßnahme zählt jedes Zittern als Wechsel. Deshalb bekommt der Zähler ein Totband: Liegt der Betrag von e unter BAND, wird das Vorzeichen gar nicht neu bewertet.
Verstärkung schrittweise
- KI = 0 und KD = 0. Nur KP, und zwar klein.
- KP verdoppeln, warten, Wechsel zählen. So lange, bis der Regler zu schwingen beginnt.
- KP auf die Hälfte dieses Werts zurück.
- Jetzt KI klein dazu und langsam erhöhen, bis die bleibende Abweichung in annehmbarer Zeit verschwindet. Schwingt es wieder, KI zurück.
Immer nur einen Wert auf einmal ändern und lange genug warten – ein großer Raum braucht Minuten, bis eine Änderung zu sehen ist. Damit du dafür nicht jedes Mal den Chip neu beschreiben musst, liest der Regler KP aus einem Logikspeicher (StructureLogicMemory, Setting lesen und schreiben). Fehlt der Speicher, gilt der Wert aus dem define:
lbn kp SPEICHER HASH("Kp") Setting Average
snan tmp kp
select kp tmp KP_STD kp # ohne Speicher: Standardwert
Werte im Stack mitschreiben
Eine Anzeige zeigt nur den Moment. Für den Verlauf legst du die Abweichung in einen Ringpuffer im Stack: poke schreibt an eine feste Adresse, ohne sp zu verändern. Mit 60 Plätzen und einem Eintrag alle 10 Takte hast du die letzten fünf Minuten im Speicher:
add zaehler zaehler 1
blt zaehler TAKTE weiter # nur jeden 10. Takt
move zaehler 0
poke idx e
add idx idx 1
mod idx idx PLAETZE # nach dem letzten Platz wieder vorn
weiter:
Mit get wert db adresse liest du einen Eintrag zurück, etwa um die größte Abweichung der letzten Minuten zu finden. Auch ein zweiter Chip kann den Puffer mit get auslesen.
Ohne das mod läuft idx über die 512 Plätze des Stacks hinaus, und poke hält den Chip mit einem Fehler an. Der Regler steht dann still, mitten im Betrieb.
Übung
Aufgabe
Ein Wächter-Chip beobachtet die Temperatur im Labor (Gas-Sensor „Labor“) und zählt, wie oft der Regler über das Soll schießt.
- e = SOLL − Temperatur
- Liegt der Betrag von e unter BAND, wird das Vorzeichen nicht neu bewertet
- Sonst:
vz= 1 bei e > 0, sonst 0. WeichtvzvonvzAltab, zähltwechsel(r4) eins hoch. Beim allerersten Vorzeichen (vzAlt= −1) wird nicht gezählt - Jeden Takt kommt e in den Ringpuffer:
poke idx e,idx(r5) läuft von 0 bis 59 und beginnt dann wieder bei 0 - Die Anzeige „Wechsel“ zeigt die Zahl der Wechsel, ohne Sensor −1
Hinweise
Hinweis 1
abs tmp e und blt tmp BAND mitschreiben überspringen das Zählen im Totband.
Hinweis 2
sgtz vz e, dann bltz vzAlt merken für den ersten Durchlauf, sne tmp vz vzAlt und add wechsel wechsel tmp. Unter merken: steht move vzAlt vz.
Hinweis 3
Unter mitschreiben: folgen poke idx e, add idx idx 1 und mod idx idx PLAETZE.
Quiz
5 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.
Tag abschließen
- Übung im Simulator bestanden
- Quiz mit mindestens 60 % bestanden
Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.
Fehler in dieser Lektion melden
Zum Melden bitte anmelden. Anmelden