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

Tag 101 von 365 · Fortgeschritten · Monat 4: Netzwerk im Detail

Kann das Gerät das? bdnvl und bdnvs

Nicht jedes Gerät kann jeden Wert. bdnvl und bdnvs springen, wenn ein Gerät einen LogicType nicht lesen oder nicht schreiben kann – vor dem Fehler.

Lektion 13 Min. Woche 15

Das lernst du heute

  • Vor dem Lesen prüfen
  • Vor dem Schreiben prüfen
  • IncorrectLogicType vermeiden

Gestern hast du gefragt, ob ein Gerät da ist. Heute fragst du, ob es etwas kann. Ein Gassensor hat keinen Schalter, eine Wandheizung kein Thermometer. Liest du Temperature von einer Heizung, meldet der Chip IncorrectLogicType und bleibt auf der Zeile stehen.

Wann das passiert

Solange du jedes Gerät kennst, kommt der Fehler kaum vor. Er taucht auf, wenn der Chip nicht weiß, was an einem Pin steckt:

  • ein Universal-Chip, den du an verschiedene Geräte hängst
  • eine Schleife über alle Pins mit dr0
  • eine ReferenceId, die jemand anders eingetragen hat

bdnvl: kann es das lesen?

bdnvl geraet Temperature kein_thermo   # springt, wenn nicht lesbar
l temp geraet Temperature

bdnvl steht für branch if device not valid for load: Der Chip springt, wenn das Gerät diesen LogicType nicht lesen kann. Sonst geht es in der nächsten Zeile weiter, und das Lesen ist sicher.

bdnvs: kann es das schreiben?

bdnvs geraet On nicht_schaltbar        # springt, wenn nicht schreibbar
s geraet On 1

bdnvs (not valid for store) prüft das Schreiben. Ein Gassensor kann On nicht schreiben, eine Wandheizung schon.

Befehlspringt, wenn
bdnvl gerät LogicType zieldas Gerät den LogicType nicht lesen kann
bdnvs gerät LogicType zieldas Gerät den LogicType nicht schreiben kann

Beide nehmen ein Gerät wie l und s: einen Pin, db oder ein Register mit ReferenceId. Für lbn gibt es kein Gegenstück. Dort prüft der Chip vor dem Lesen alle passenden Geräte und meldet IncorrectLogicType, sobald eines den Wert nicht hat.

Achtung

bdnvl prüft die Fähigkeit, nicht die Anwesenheit. Fehlt das Gerät ganz, meldet auch bdnvl einen Fehler (DeviceNotFound). Prüf deshalb zuerst mit bdns, dann mit bdnvl.

Tipp

Im Simulator des IC10-Coders gibt es den strengen Modus. Dann gelten nur die LogicTypes, die am Gerät eingetragen sind, und bdnvl springt wie im Spiel. Ohne strengen Modus erlaubt der Simulator jeden LogicType, und der Sprung kommt nie.

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
Erst prüfen, ob das Gerät da ist, dann, ob es den Wert kann, dann lesen oder schreiben.

Übung

Aufgabe

Ein Universal-Chip: Was an den Pins hängt, steht nicht fest.

  • d0: ein Verbraucher. Ist er da und kann er On schreiben, folgt er dem Hebel „Freigabe“ (Open).
  • d1: ein Messgerät. Ist es da und kann es Temperature lesen, zeigt die Anzeige an d2 die Temperatur in °C, sonst −999.
  • Fehlt ein Gerät an irgendeinem Pin, gibt es keinen Fehler.

Hinweise

Hinweis 1

Vor jedem Zugriff zuerst bdns, dann bdnvs bzw. bdnvl – beide springen zum nächsten Abschnitt.

Hinweis 2

Setz c auf KEINWERT, bevor du das Messgerät prüfst. Dann steht −999 da, wenn eine Prüfung springt.

Hinweis 3

Auch die Anzeige an d2 vor dem Schreiben mit bdns prüfen.

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