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.
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.
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
Ü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
taktezä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