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

Tag 132 von 365 · Fortgeschritten · Monat 5: Speicher und Struktur

Projekt: Mehrraumregler

Projekt der Woche: Ein einziges Unterprogramm regelt drei Räume. Den Raumnamen bekommt es in einem Register, seinen Heizzustand merkt es sich im Stack.

Projekt 40 Min. Woche 19

Das lernst du heute

  • Ein Unterprogramm für alle Räume
  • Namen über Register übergeben
  • Zeilen sparen

Labor, Küche, Lager: drei Räume, dreimal dieselbe Hysterese. Kopiert ergibt das dreimal acht Zeilen und dreimal die Gelegenheit, eine Grenze falsch abzuschreiben. Mit einem Unterprogramm steht die Regel einmal da, und die Räume rufen sie nacheinander auf.

Der Aufbau

RaumGassensorWandheizungStackplatz
LaborLaborLabor0
KücheKuecheKueche1
LagerLagerLager2

Sensor und Heizung eines Raums tragen denselben Namen, der Typ unterscheidet sie. Dazu kommt ein Blinklicht „Heizstoerung“ als Sammelmeldung.

Namen über Register übergeben

lbn und sbn nehmen den Namens-Hash auch aus einem Register. Das Unterprogramm bekommt den Raum also in name:

move name LABOR
move nr 0
jal raum

Im Unterprogramm steht dann lbn temp SENSOR name Temperature Average und sbn HEIZUNG name On heizen. Welcher Raum gemeint ist, entscheidet allein der Inhalt von name.

Den Zustand je Raum merken

Eine Hysterese braucht ein Gedächtnis. Ein Register für alle drei Räume reicht nicht, also bekommt jeder Raum einen Platz im Stack, die Nummer steht in nr:

raum:
get heizen db nr        # Zustand dieses Raums holen
# ... Hysterese ...
put db nr heizen        # und zurueckschreiben
sbn HEIZUNG name On heizen
j ra

Teilziele

  1. Labor heizt mit Hysterese: an unter 19 °C, aus ab 21 °C, dazwischen Zustand behalten.
  2. Drei Räume unabhängig: Jeder Raum regelt nach seinem eigenen Sensor, ohne die anderen zu stören.
  3. Ein Sensor fällt aus: Nur dessen Heizung geht aus, die Sammelmeldung leuchtet.
  4. Alles in Ordnung: Sind alle Sensoren da, ist die Sammelmeldung aus.
Tipp

Ein vierter Raum kostet nur drei Zeilen in der Hauptschleife und ein define. Das ist der Sinn des Ganzen: Zeilen und Zeichen sparen, ohne an Übersicht zu verlieren.

Achtung

Der Stack bleibt im Spiel nach dem Aufspielen erhalten. Ein alter Heizzustand auf Platz 0 bis 2 ist harmlos, weil die Hysterese ihn im nächsten Takt korrigiert. Benutzt du die Plätze aber für etwas anderes, räum sie vor dem Start-Label mit poke auf.

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
Dreimal derselbe Aufruf, jedes Mal mit anderem Namen und anderem Stackplatz. Der Code für einen Raum steht nur einmal da.

Projektaufgabe

Aufgabe

Baue den Mehrraumregler mit einem Unterprogramm raum, das den Namen in name und den Stackplatz in nr bekommt. Räume, Namen und Plätze stehen in der Tabelle. Die Sammelmeldung „Heizstoerung“ leuchtet, sobald ein Sensor fehlt. Die Teilziele stehen über dem Editor.

Teilziele

  1. Teilziel 1: Labor heizt mit Hysterese
  2. Teilziel 2: drei Räume unabhängig
  3. Teilziel 3: ein Sensor fällt aus
  4. Teilziel 4: alles in Ordnung, keine Meldung

Hinweise

Hinweis 1

Je Raum drei Zeilen in der Hauptschleife: move name …, move nr …, jal raum.

Hinweis 2

Im Unterprogramm: Zustand mit get heizen db nr holen, Hysterese, mit put db nr heizen zurück.

Hinweis 3

Fehlende Sensoren zählst du im Unterprogramm mit snan in fehler, die Lampe schaltest du danach mit sgtz.

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