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

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

Bedingt aufrufen: beqal, bltal & Co.

beqal, bneal, bltal, bgtal, bleal und bgeal rufen ein Unterprogramm nur auf, wenn ein Vergleich stimmt. Sonst geht es in der nächsten Zeile weiter, und ra bleibt, wie es war.

Lektion 13 Min. Woche 19

Das lernst du heute

  • Beqal, bneal, bltal, bgtal, bleal, bgeal
  • Aufruf nur bei Bedingung
  • ra richtig setzen

Der Gastank soll bei Überdruck ablassen und bei Unterdruck nachfüllen. Beide Aufgaben stehen sauber in eigenen Unterprogrammen. Statt erst zu vergleichen und dann jal zu schreiben, geht es in einer Zeile: bedingt aufrufen.

Die Familie

Die al-Befehle (and link) vergleichen wie die bekannten Sprünge. Stimmt der Vergleich, schreiben sie wie jal die nächste Zeile nach ra und springen:

Befehlruft auf, wenn
beqal a b ziela = b
bneal a b ziela ≠ b
bltal a b ziela < b
bgtal a b ziela > b
bleal a b ziela ≤ b
bgeal a b ziela ≥ b
bgtal druck MAXDRUCK zuhoch     # nur bei Ueberdruck
bltal druck MINDRUCK zuniedrig  # nur bei Unterdruck

Das Unterprogramm endet wie gewohnt mit j ra und kehrt hinter den Aufruf zurück.

Aufruf nur bei Bedingung

Wird nicht aufgerufen, läuft der Chip einfach in der nächsten Zeile weiter. Das Unterprogramm tut dann nichts, auch nichts zurücksetzen. Deshalb gehört vor die Aufrufe ein Grundzustand:

move ablass 0          # Grundzustand
move pumpe 0
bgtal druck MAXDRUCK zuhoch
bltal druck MINDRUCK zuniedrig
sbn VENTIL HASH("Ablass") On ablass

Jedes Unterprogramm setzt nur das, wofür es zuständig ist, auf 1. Geschrieben wird erst nach allen Aufrufen, genau einmal.

ra richtig setzen

ra bekommt nur dann einen neuen Wert, wenn der Aufruf wirklich passiert. Wird nicht aufgerufen, steht in ra noch der Wert vom letzten Mal. Solange jedes Unterprogramm nur über seinen eigenen Aufruf betreten wird, stört das nicht. Gefährlich wird es, wenn der Chip in ein Unterprogramm hineinläuft: Dann springt dessen j ra an eine alte Stelle.

Achtung

Bei NaN ruft keiner dieser Befehle auf, außer bneal: NaN ist ungleich jeder Zahl. Ein Unterprogramm „bei Abweichung“ mit bneal wird bei Sensorausfall also aufgerufen.

Tipp

Unterprogramme gehören hinter das j start der Hauptschleife. Dann kann der Chip nicht versehentlich hineinlaufen.

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
Stimmt die Bedingung, wird ra gesetzt und gesprungen. Stimmt sie nicht, läuft der Chip einfach weiter.

Übung

Aufgabe

Rohr-Analysator „Tank“, Digitalventil „Ablass“ (On = offen), Volumenpumpe „Nachfuellung“, Blinklicht „Tankalarm“.

  • Über 5000 kPa: Unterprogramm zuhoch mit bgtal aufrufen – es öffnet das Ventil und setzt den Alarm.
  • Unter 3000 kPa: Unterprogramm zuniedrig mit bltal aufrufen – es startet die Pumpe.
  • Sonst alles aus. Fehlt der Analysator: nichts läuft, Alarm an.

Hinweise

Hinweis 1

Vor den Aufrufen: ablass und pumpe auf 0, alarm mit snan aus dem Druck.

Hinweis 2

bgtal druck MAXDRUCK zuhoch und bltal druck MINDRUCK zuniedrig.

Hinweis 3

Die Unterprogramme setzen nur ihre Register auf 1 und enden mit j ra.

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