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

Tag 283 von 365 · Experte · Monat 10: Bits und Daten

Hashes zur Laufzeit

Jedes Gerät verrät seinen PrefabHash und NameHash: Geräte an Pins zur Laufzeit erkennen, Namen vergleichen und einen Chip bauen, der sich an seine Verkabelung anpasst.

Lektion 18 Min. Woche 41

Das lernst du heute

  • PrefabHash und NameHash lesen
  • Geräte erkennen
  • Hash vergleichen

Bisher wusste dein Code immer, welches Gerät wo hängt – du hast es ja selbst angeschlossen. Ein Chip, den andere Spieler aus der Bibliothek holen, weiß das nicht. Er kann aber fragen: Jedes logikfähige Gerät meldet, was es ist und wie es heißt.

Drei Kennungen

LogicTypeliefert
PrefabHashden Hash des Prefab-Namens, also den Gerätetyp
NameHashden Hash des Namens, den du mit dem Etikettierer vergeben hast
ReferenceIddie eindeutige Nummer dieses einen Geräts

PrefabHash ist dieselbe Zahl, die HASH("StructureGasSensor") liefert. NameHash dieselbe wie HASH("Raum"). Du vergleichst also einfach mit einem define:

l typ d0 PrefabHash
seq tmp typ SENSOR          # 1 = an d0 hängt ein Gassensor

Geräte an Pins erkennen

Mit dem indirekten Pin dr0 (Tag 102) geht eine Schleife alle sechs Pins durch. bdns überspringt leere Pins, bevor l einen Fehler auslöst:

move pin 0
schleife:
bdns dr0 weiter             # leerer Pin: überspringen
l typ dr0 PrefabHash
weiter:
add pin pin 1
blt pin PINS schleife

So zählt der Chip, wie viele Sensoren und Akkus er hat, und findet das Gerät mit einem bestimmten Namen – egal an welchem Pin es steckt.

Wofür das gut ist

  • Selbsterkennung: Ein Chip prüft beim Start, ob an d0 wirklich ein Gassensor hängt, und meldet sonst einen Fehler, statt Unsinn zu regeln.
  • Universalanzeige: Je nach Gerätetyp liest der Chip Temperature oder Ratio.
  • Namen statt Pins: Der Chip sucht „Haupt“, egal ob jemand den Akku auf d1 oder d3 gesteckt hat.
Achtung

Ein leerer Pin ist kein Gerät. l typ dr0 PrefabHash auf einen leeren Pin hält den Chip mit einem Fehler an. Erst bdns, dann lesen.

Tipp

Im Netz brauchst du das seltener, dort sucht lbn schon nach Typ und Name. Hilfreich ist NameHash aber auch dort: Ein Chip kann so prüfen, ob ein Gerät den Namen trägt, den er erwartet.

Schaubild

Lesen mit l, Schreiben mit s Gas-Sensor (d0) Temperature 293.15 IC10 r0 = 293.15 Wandlampe (d1) On 1 l r0 d0 Temperature Gerät → Register s d1 On 1 Wert → Gerät
Über dr0 liest die Schleife Pin für Pin, PrefabHash sagt den Typ, NameHash den Namen.

Übung

Aufgabe

An den Pins d0–d5 hängen Gassensoren, Akkus oder nichts. Schreibe eine Schleife über alle Pins:

  • Anzeige „Sensoren“: Zahl der Gassensoren
  • Anzeige „Akkus“: Zahl der Stationsbatterien
  • Anzeige „Haupt“: Pin-Nummer des Geräts mit dem Namen „Haupt“, −1 wenn es fehlt

Die Pin-Nummer steht in pin (r0), damit dr0 funktioniert.

Hinweise

Hinweis 1

bdns dr0 weiter überspringt leere Pins.

Hinweis 2

l typ dr0 PrefabHash, dann seq mit SENSOR und AKKU und aufaddieren.

Hinweis 3

Name: l tmp dr0 NameHash, seq tmp tmp HAUPT, select haupt tmp pin haupt.

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