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

Tag 310 von 365 · Experte · Monat 11: Optimierung und Fehlersuche

Stille Fehler finden

Fehler ohne Fehlermeldung: NaN und −inf aus Batchbefehlen verfolgen, das stille Programmende erkennen und falsche Einheiten finden.

Lektion 18 Min. Woche 45

Das lernst du heute

  • NaN und −inf verfolgen
  • Programmende
  • Falsche Einheiten

Laute Fehler sind die netten: Das Gehäuse nennt Namen und Zeile, du reparierst, fertig. Gefährlich sind die Fehler, bei denen der Chip zufrieden weiterläuft und trotzdem Unsinn macht. Die Tankkühlung springt nie an, die Anzeige zeigt 320 statt 47, und nirgends leuchtet etwas.

NaN und −inf verteilen sich

QuelleErgebnis
lbn … Average, kein Gerät passtNaN
lbn … Maximum, kein Gerät passt−inf
lbn … Minimum oder Sum, kein Gerät passt0
define mit 1e5 oder mit einem anderen define als WertNaN
div durch 0inf, bei 0 / 0 NaN

Jede Rechnung mit NaN ergibt wieder NaN, und jeder Vergleich mit NaN ergibt 0. sgt an t GRENZE ist also 0, die Kühlung bleibt aus. Mit −inf ist es tückischer: sgt ergibt 0, aber slt ergibt 1. Eine Heizung, die „unter der Grenze“ einschaltet, läuft dann für immer.

Eine Zeile fängt beides ab, wenn der Wert eine Temperatur in Kelvin ist:

lbn tmax ANALYSE HASH("Tank") Temperature Maximum
sgt ok tmax 0      # Kelvin ist immer ueber 0, NaN und -inf nie
Achtung

select prüft nur „ungleich 0“. NaN ist ungleich 0, also nimmt select r0 r1 10 20 mit NaN in r1 die 10. Wer select mit einem ungeprüften Messwert füttert, schaltet im Fehlerfall in die falsche Richtung.

Das stille Programmende

Läuft der Chip hinter die letzte Zeile, steht er für immer. Kein Fehler, kein Licht. Typische Ursachen: das j start am Ende vergessen, ein bedingter Sprung auf ein Label ganz unten, hinter dem nichts mehr kommt, oder ein Label in einem relativen Sprung. Der Prüfer im IC10-Coder warnt davor, im Spiel merkst du es nur daran, dass die Anlage nicht mehr reagiert.

Falsche Einheiten

GrößeEinheit im Chiptypischer Fehler
TemperatureKelvin40 statt 313,15
PressurekPa101325 statt 101,325
Ratio…0 bis 121 statt 0,21
sleepSekundensleep 10 wartet 20 Takte
sin, cosBogenmaßGrad ohne deg2rad

Eine Grenze von 40 „Grad“ ist für den Chip 40 Kelvin, also −233 °C. Jeder Tank ist wärmer, die Kühlung läuft immer. Solche Fehler sieht man erst, wenn man sich den Wert neben der Grenze anschaut.

Schaubild

Drei Messwerte, fünf Batchmodi Sensor „Raum“ 300 K Sensor „Raum“ 310 K Sensor „Raum“ 250 K lbn Average 286.67 Sum 860 Minimum 250 Maximum 310 Count 3 Sum bei Temperaturen: 860 K – die Heizung hält das für einen Brand.
Passt kein Gerät, liefert Average NaN, Maximum −inf und Minimum, Sum und Count 0. Keiner dieser Werte löst einen Fehler aus.

Übung

Aufgabe

Die Tankkühlung im Startcode hat drei stille Fehler. Repariere sie: Der Wandkühler „Tankkuehlung“ läuft, wenn der heißeste Tank (Rohranalysatoren „Tank“) über 40 °C ist. Die Anzeige „TankMax“ zeigt die höchste Temperatur in °C. Fehlen alle Analysatoren, kühlt die Anlage sicherheitshalber, die Lampe „Warnung“ geht an und die Anzeige zeigt -999. Der Chip muss dauerhaft weiterlaufen.

Hinweise

Hinweis 1

Die Grenze muss in Kelvin stehen: 40 °C sind 313,15 K.

Hinweis 2

Unten fehlt j start – ohne Sprung bleibt der Chip nach einem Durchlauf stehen.

Hinweis 3

sgt ok tmax 0 ist 0 bei NaN und −inf. Danach mit select die Kühlung erzwingen und den Fehlwert zeigen.

Quiz

5 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