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

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

Schnelle Muster

Drei schnelle Muster: ein Batch-Befehl statt einer Schleife über Geräte, Messwerte einmal lesen und merken, und nur schreiben, wenn sich wirklich etwas ändert.

Lektion 18 Min. Woche 44

Das lernst du heute

  • Batch statt Schleife
  • Werte zwischenspeichern
  • Unnötige Schreibzugriffe vermeiden

Gestern hast du gezählt, was ein Takt kostet. Heute geht es darum, weniger zu verbrauchen. Drei Muster bringen am meisten – und zwei davon machen den Code gleichzeitig kürzer.

Batch statt Schleife

Sollen zwölf Flurlampen dasselbe tun, brauchst du keine Schleife über zwölf Namen. Gib ihnen einen Namen, und ein sbn schaltet alle:

sbn LAMPE HASH("Flur") On dunkel     # alle Lampen namens Flur

Ein Befehl statt zwölf Durchläufen mit je fünf Schritten. Eine Schleife lohnt sich nur, wenn jedes Gerät etwas anderes bekommen soll – wie die Tanklampen von vorgestern.

Werte zwischenspeichern

Gerätewerte ändern sich nur einmal pro Takt. Wer denselben Wert dreimal mit lbn liest, bekommt dreimal dieselbe Zahl und bezahlt drei Schritte. Lies ihn einmal in ein Register und arbeite dort weiter. Das spart Schritte und sorgt dafür, dass alle Rechnungen eines Takts mit demselben Wert arbeiten.

Unnötige Schreibzugriffe vermeiden

Viele Chips schreiben jeden Takt denselben Wert an dieselben Geräte. Das kostet Schritte – und bei manchen LogicTypes mehr: Befehls-Typen wie Harvest, Plant oder Activate lösen bei jedem Schreiben ihre Aktion aus. Besser: Den letzten Zustand im Register merken und nur bei einer Änderung schreiben.

beq dunkel zustand start      # nichts geändert: nicht schreiben
move zustand dunkel
sbn LAMPE HASH("Flur") On dunkel

zustand startet mit −1, einem Wert, den dunkel nie annimmt. So wird beim ersten Durchlauf garantiert einmal geschrieben.

Achtung

Wer nur bei Änderungen schreibt, verlässt sich darauf, dass das Gerät den Wert behält. Baut jemand eine Lampe neu oder schaltet sie von Hand um, erfährt der Chip davon nichts. Für Sicherheitsfunktionen schreibst du deshalb lieber jeden Takt.

Tipp

Ein Zähler für die Schaltvorgänge ist eine gute Sonde: Steigt er ständig, flattert irgendwo eine Bedingung – etwa eine fehlende Hysterese.

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.
Ein sbn erreicht alle Lampen mit demselben Namen – ein Befehl statt einer Schleife.

Übung

Aufgabe

Steuere die Flurlampen „Flur“ nach dem Tageslichtsensor „Aussen“:

  • dunkel, wenn SolarIrradiance unter 100 liegt oder der Sensor fehlt
  • alle Lampen mit einem Batch-Befehl schalten
  • nur schreiben, wenn sich dunkel ändert, und jeden Schreibvorgang auf der Anzeige „Schaltungen“ zählen

Hinweise

Hinweis 1

sge dunkel dunkel SCHWELLE, dann seqz – so wird NaN zu „dunkel“.

Hinweis 2

beq dunkel zustand start überspringt alles, wenn sich nichts geändert hat.

Hinweis 3

Bei einer Änderung: zustand merken, sbn, Zähler hoch, Anzeige.

Quiz

3 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