stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 328

Tag 328 von 365 · Experte · Monat 11: Optimierung und Fehlersuche

Projekt: Eigene Vorlage

Projekt: eine eigene Vorlage für Zweipunktregler – Einstellblock oben, ein Unterprogramm für beliebig viele Kreise, Heizen und Kühlen mit derselben Logik.

Projekt 45 Min. Woche 47

Das lernst du heute

  • Wiederverwendbare Vorlage bauen
  • Einstellblock
  • Dokumentation

Du hast in diesem Jahr Dutzende Zweipunktregler geschrieben: Heizung hier, Kühlung da, jedes Mal fast derselbe Code. Diese Woche baust du die Vorlage, die du ab jetzt kopierst. Eine gute Vorlage hat drei Teile: einen Einstellblock, in dem alles steht, was man anpassen muss, eine Logik, die man nie wieder anfassen muss, und eine Dokumentation, die sagt, wie man sie benutzt.

Die Idee

Ein Unterprogramm regeln erledigt einen Regelkreis. Was es braucht, bekommt es in Registern:

RegisterInhalt
nameName von Sensor und Gerät, z. B. HASH("Wohnraum")
typPrefab des Geräts: Heizung oder Kühler
unten, obenGrenzen in Kelvin
richtung1 = Gerät heizt, 0 = Gerät kühlt

Beim Heizen schaltet „zu kalt“ ein und „zu warm“ aus, beim Kühlen genau umgekehrt. Das Unterprogramm tauscht dafür mit zwei select die Rollen von ein und aus – die eigentliche Hysterese ist danach für beide Richtungen dieselbe Zeile.

Der Zustand steckt im Gerät

Jeder Regelkreis braucht sein eigenes Gedächtnis: War das Gerät an? Statt dafür Register oder den Stack zu verbrauchen, liest das Unterprogramm den Zustand einfach am Gerät zurück:

lbn an typ name On Average      # Zustand steckt im Geraet selbst
snan tmp an
select an tmp 0 an

So kostet jeder weitere Kreis nur sechs Zeilen im Hauptteil, und das Unterprogramm bleibt unverändert.

Sicherer Zustand je Richtung

Fehlt der Sensor eines Kreises, geht eine Heizung aus und ein Kühler an. Die Anzeige „Regler“ zeigt, wie viele Kreise gerade ohne Sensor laufen.

Die Anlage

GerätPrefabName
Gassensor und WandheizungStructureGasSensor, StructureWallHeater„Wohnraum“
Gassensor und WandkühlerStructureGasSensor, StructureWallCooler„Kuehlraum“
LED-AnzeigeStructureConsoleLED5„Regler“

Teilziele

  1. Der Wohnraum heizt mit Hysterese (19/21 °C).
  2. Der Kühlraum kühlt mit Hysterese (6/2 °C).
  3. Sensorausfall: Heizung aus, Kühler an, die Anzeige zählt die ausgefallenen Kreise.
  4. Die Kreise sind unabhängig: Fällt einer aus, regelt der andere weiter.
Tipp

Schreib in den Kopf der Vorlage, wie man einen dritten Kreis anlegt: sechs move-Zeilen und ein jal regeln. Wer die Vorlage übernimmt, muss das Unterprogramm dann gar nicht lesen.

Schaubild

Aufruf und Rücksprung eines Unterprogramms Hauptschleife 2 l r0 d0 Temperature 3 jal celsius 4 s d2 Setting r1 5 l r0 d1 Temperature 6 jal celsius 7 s d3 Setting r1 8 j start celsius: sub r1 r0 273.15 j ra ra = 4 zurück zu Zeile ra
Jeder Kreis übergibt Name, Gerätetyp, Grenzen und Richtung in Registern. Das Unterprogramm regelt und springt mit j ra zurück.

Projektaufgabe

Aufgabe

Bau die Vorlage: Einstellblock, Geräte und Register stehen schon da. Es fehlen die beiden Aufrufe in der Schleife, die Anzeige der ausgefallenen Kreise und das Unterprogramm regeln, das für Heizen und Kühlen dieselbe Hysterese benutzt.

Teilziele

  1. Teilziel 1: Wohnraum heizt mit Hysterese
  2. Teilziel 2: Kühlraum kühlt mit Hysterese
  3. Teilziel 3: Sensorausfall je Richtung
  4. Teilziel 4: Kreise sind unabhängig

Hinweise

Hinweis 1

Pro Kreis: fünf move für name, typ, unten, oben, richtung, dann jal regeln.

Hinweis 2

Im Unterprogramm: slt ein t unten, sgt aus t oben, dann mit select nach richtung tauschen.

Hinweis 3

Hysterese: seqz aus aus, and an an aus, or an an ein. Bei NaN: select an ok an tmp mit tmp = seqz richtung.

Quiz

2 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Alle Teilziele des Projekts 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

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall