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

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

Zeit in Zuständen

Ein Zähler in Takten misst, wie lange der Automat schon in einem Zustand ist. Damit baust du Wartezeiten und merkst, wenn ein Schritt zu lange dauert.

Lektion 15 Min. Woche 20

Das lernst du heute

  • Wartezeit je Zustand
  • Zeitüberschreitung erkennen
  • Zähler beim Wechsel zurücksetzen

Nach einem Gasunfall im Labor soll eine Taste den Raum leer saugen. Die Lüftung saugt, bis der Druck unter 5 kPa liegt, und läuft dann noch 5 Sekunden nach, damit auch der Rest im Rohr landet.

Zwei Fragen beantwortet dein Automat bisher nicht: Wie lange läuft der Nachlauf schon? Und was, wenn der Druck nie unter 5 kPa fällt – weil eine Tür offen steht oder der Tank hinter der Lüftung voll ist? Dann saugt die Lüftung ewig, und niemand merkt es.

Takte zählen

Ein Takt dauert 0,5 s. Ein Register takte zählt in jedem Takt eins hoch:

define NACHZEIT 10      # Takte = 5 s Nachlauf
define MAXZEIT 40       # Takte = 20 s, dann Stoerung
alias takte r2
add takte takte 1       # ein Takt mehr im Zustand

Schreib die Zeiten als Takte ins define und die Sekunden in den Kommentar. Wer den Wert später ändert, sieht sofort, was gemeint ist.

Wartezeit je Zustand

Der Nachlauf wartet einfach, bis der Zähler groß genug ist:

z_nachlauf:
sge tmp takte NACHZEIT
select neu tmp BEREIT neu
j ausgabe

Zeitüberschreitung erkennen

Beim Absaugen gibt es zwei Ausgänge: Erfolg (Druck unter 5 kPa) und Zeitüberschreitung. Prüf erst die Zeit und dann den Erfolg. Der letzte select überschreibt neu, also gewinnt im selben Takt der Erfolg:

z_saugen:
sgt tmp takte MAXZEIT
select neu tmp STOERUNG neu
slt tmp druck LEER
select neu tmp NACHLAUF neu
j ausgabe

Zähler beim Wechsel zurücksetzen

Jeder neue Zustand muss bei null anfangen. Am sichersten passiert das an einer Stelle, nämlich dort, wo der neue Zustand übernommen wird:

ausgabe:
seq tmp neu zustand        # Zustand gleich geblieben?
select takte tmp takte 0   # sonst Zaehler auf 0
move zustand neu

So kann kein Übergang das Zurücksetzen vergessen, auch keiner, den du nächsten Monat einbaust.

Achtung

Ohne Zurücksetzen erbt der nächste Zustand den alten Zählerstand. Hat das Absaugen 30 Takte gedauert, ist der Nachlauf mit seinen 10 Takten schon im ersten Takt abgelaufen. Und hat die Anlage eine Minute in Bereit gewartet, meldet das Absaugen sofort Zeitüberschreitung, obwohl es gerade erst begonnen hat.

Hinweis

sleep 5 wäre für den Nachlauf die falsche Wahl. Während sleep liest der Chip nichts: Fällt in dieser Zeit der Sensor aus oder drückt jemand die Taste, merkt er es erst danach. Der Zähler wartet, ohne die Hauptschleife anzuhalten.

Schaubild

Takte und yield auf einer Zeitleiste Takt 0 · 0,0 s Takt 1 · 0,5 s Takt 2 · 1,0 s Takt 3 · 1,5 s 5 Befehle yield 5 Befehle yield 5 Befehle yield 128 Befehle ohne yield: Limit Gerätewerte ändern sich nur zwischen zwei Takten.
Ein Takt dauert 0,5 s. Wer Takte zählt, misst Zeit: 10 Takte sind 5 Sekunden, 40 Takte sind 20 Sekunden.

Übung

Aufgabe

Die Absaugung im Labor hat vier Zustände: Bereit (0), Saugen (1), Nachlauf (2), Störung (3). Geräte: Taste „Spuelen“, Gassensor „Labor“ (Pressure), Aktive Lüftung „Labor“ (On, Mode), LED-Anzeige „Status“.

Sprungtabelle, Erfolg beim Saugen und Ausgabe sind fertig. Es fehlt die Zeit:

  • Der Zähler takte zählt jeden Takt eins hoch und steht nach jedem Zustandswechsel wieder auf 0.
  • Saugen dauert länger als 40 Takte (20 s) → Störung.
  • Der Nachlauf endet nach 10 Takten (5 s) → Bereit.

Hinweise

Hinweis 1

Direkt nach move neu zustand: add takte takte 1.

Hinweis 2

Im Block Saugen vor der Erfolgsprüfung: sgt tmp takte MAXZEIT und select neu tmp STOERUNG neu.

Hinweis 3

Nachlauf: sge tmp takte NACHZEIT und select neu tmp BEREIT neu.

Hinweis 4

In der Ausgabe vor move zustand neu: seq tmp neu zustand und select takte tmp takte 0.

Quiz

4 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

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