Das lernst du heute
- Zustand im Register
- Übergänge mit Bedingungen
- Zustand anzeigen
Ein Tank soll auf Knopfdruck gefüllt werden. Die Pumpe läuft, bis 3000 kPa erreicht sind. Danach bleibt sie aus – auch wenn jemand Gas entnimmt und der Druck auf 2500 kPa fällt. Erst wenn der Tank fast leer ist, ist die Anlage wieder bereit und wartet auf den nächsten Knopfdruck.
Mit „Druck zu niedrig → Pumpe an“ kommst du hier nicht weit. Bei 2500 kPa soll die Pumpe einmal laufen (direkt nach dem Knopfdruck) und einmal nicht (nach dem Füllen). Der Messwert allein reicht nicht – der Chip muss sich merken, was er gerade tut.
Der Zustand ist eine Zahl
Du gibst jedem Abschnitt des Ablaufs eine Nummer und legst sie in ein Register:
| Zustand | Nummer | Pumpe |
|---|---|---|
| Bereit | 0 | aus |
| Füllen | 1 | an |
| Voll | 2 | aus |
define BEREIT 0 # wartet auf Start
define FUELLEN 1 # Pumpe laeuft
define VOLL 2 # Tank voll
alias zustand r0
Die Nummern als define machen den Code lesbar: seq tmp zustand FUELLEN versteht jeder, seq tmp zustand 1 nicht. Zustand 0 ist mit Absicht der sichere Ausgangszustand, denn jedes Register beginnt bei 0.
Übergänge: Zustand und Bedingung
Ein Übergang hat immer zwei Teile: in welchem Zustand du bist und was passieren muss. Erst wenn beides stimmt, wechselt der Zustand.
| von | Bedingung | nach |
|---|---|---|
| Bereit | Taste „Start“ gedrückt | Füllen |
| Füllen | Druck ≥ 3000 kPa | Voll |
| Voll | Druck < 1000 kPa | Bereit |
Jede Zeile der Tabelle wird zu wenigen Zeilen Code:
seq tmp zustand BEREIT # bin ich in Bereit?
and tmp tmp knopf # ... und ist Start gedrueckt?
select neu tmp FUELLEN neu # dann nach Fuellen
Das ist die Kernidee: Jeder Takt liest den Zustand und entscheidet über die Übergänge. Was die Pumpe tut, folgt danach allein aus dem Zustand:
seq pumpAn zustand FUELLEN # an nur im Zustand Fuellen
sbn PUMPE HASH("Fuellpumpe") On pumpAn
Rechne alle Übergänge vom alten Zustand aus und übernimm den neuen erst am Ende: move neu zustand am Anfang, move zustand neu am Schluss. Änderst du zustand direkt, prüft die nächste Zeile schon den neuen Wert. Steht die Zeile für Bereit → Füllen unter der für Voll → Bereit, wird bei gedrückter Taste in einem einzigen Takt aus Voll gleich wieder Füllen.
Den Zustand zeigen
Eine LED-Anzeige mit der Zustandsnummer ist die billigste Fehlersuche, die es gibt. Zeigt sie 1 und die Pumpe läuft nicht, liegt der Fehler bei der Pumpe oder ihrem Namen – nicht in deiner Logik.
sbn ANZEIGE HASH("Status") Setting zustand
Fällt der Analysator aus, ist der Druck NaN. Dann kommt der Automat nie aus Füllen heraus, und die Pumpe läuft ohne Ende. Schick ihn in diesem Fall zurück nach Bereit – snanz ok druck liefert dir dafür eine saubere 0 oder 1.
Übung
Aufgabe
Baue den Tankfüller aus dem Text. Geräte im Datennetz:
- Taste „Start“ (
Activate) - Rohr-Analysator „Tank“ (
Pressure) - Volumenpumpe „Fuellpumpe“ (
On) - LED-Anzeige „Status“ (
Setting= Zustandsnummer)
Übergänge: Bereit → Füllen bei Tastendruck, Füllen → Voll ab 3000 kPa, Voll → Bereit unter 1000 kPa. Ohne Analysator zurück nach Bereit. Die Pumpe läuft nur im Zustand Füllen.
Eingänge und Anzeige sind fertig. Es fehlen die Übergänge und die Pumpe.
Hinweise
Hinweis 1
Jeder Übergang: seq tmp zustand VON, Bedingung nach bed, and tmp tmp bed, dann select neu tmp NACH neu.
Hinweis 2
Für Bereit → Füllen ist knopf schon die Bedingung: and tmp tmp knopf.
Hinweis 3
Ohne Analysator: select neu ok neu BEREIT als letzte Zeile der Übergänge.
Hinweis 4
Pumpe: seq pumpAn zustand FUELLEN und per sbn auf „Fuellpumpe“ schreiben.
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