Ein IC-Gehäuse hat sechs Pins, d0 bis d5. Für eine kleine Steuerung reicht das. Sobald aber zehn Lüftungen, drei Sensoren und ein Display dazukommen, wird es eng. Die Lösung: Geräte über ihren Namen ansprechen. Damit erreichst du jedes Gerät im Datennetz – ganz ohne Pins.
Dieser Artikel fasst das Wichtigste zusammen. Ausführlich und mit Übungen geht es in der IC10-Akademie weiter.
Die zwei Befehle
| Befehl | Aufbau | Wirkung |
|---|---|---|
lbn | lbn r? Gerätehash Namenshash LogicType Batchmodus | liest einen Wert von allen passenden Geräten |
sbn | sbn Gerätehash Namenshash LogicType r? | schreibt einen Wert in alle passenden Geräte |
Passend heißt: gleicher Gerätetyp (Prefab-Hash) und gleicher Name.
Der Gerätehash
Jedes Gerät hat einen festen Prefab-Hash. Für die Aktive Lüftung ist das -1129453144. Du findest den Hash oben auf jeder Geräteseite in diesem Wiki, mit Knopf zum Kopieren, oder in der Hash-Suche.
Der Name
Den Namen gibst du dem Gerät im Spiel mit dem Etikettierer. Im Programm wird daraus mit HASH("…") eine Zahl. HASH wird schon beim Speichern ersetzt, deshalb darf es überall stehen, wo eine Zahl stehen darf – auch hinter define. Namen mit Leerzeichen sind kein Problem:
define NAME HASH("Lueftung Lager")
Gib allen Lüftungen eines Raums denselben Namen. Ein einziges sbn schaltet dann alle gleichzeitig.
Der Batchmodus beim Lesen
Wenn mehrere Geräte passen, entscheidet der Batchmodus, was lbn zurückgibt:
| Modus | Zahl | Ergebnis | wenn kein Gerät passt |
|---|---|---|---|
| Average | 0 | Mittelwert | NaN |
| Sum | 1 | Summe | 0 |
| Minimum | 2 | kleinster Wert | 0 |
| Maximum | 3 | größter Wert | −unendlich |
| Count | 4 | Anzahl | 0 |
Nimm für Messwerte immer 0 (Average). Mit Sum fällt ein Fehler erst auf, wenn ein zweites gleichnamiges Gerät dazukommt: Zwei Sensoren mit je 400 K ergeben dann 800 K.
Average liefert NaN, wenn kein Gerät mit diesem Namen gefunden wird – zum Beispiel nach einem Tippfehler im Namen. NaN zieht sich still durch jede Rechnung. Fang es deshalb direkt ab:
lbn druck SENSOR NSENSOR Pressure 0
bnan druck start
Was du sonst wissen musst
- Batch-Befehle laufen nur über das Datenkabel-Netz, nicht über die Pins.
- Hat das IC-Gehäuse gar kein Datennetz, hält der Chip mit einem Fehler an.
- Kann ein Gerät den LogicType nicht lesen oder schreiben, hält der Chip ebenfalls an. Welche Werte ein Gerät kennt, steht auf seiner Seite unter „IC10 und Logik“.
- Jede Hauptschleife braucht ein
yield. Gerätewerte ändern sich nur einmal pro Takt (0,5 s). - Läuft das Programm hinter die letzte Zeile, bleibt der Chip für immer stehen. Darum endet jede Schleife mit
j start.
Ein vollständiges Beispiel: Raumdruck halten
Ein Gassensor namens „Sensor Lager“ misst den Druck. Fällt er unter 95 kPa, blasen alle Lüftungen namens „Lueftung Lager“ Luft in den Raum, bis 101 kPa erreicht sind.
# Raumdruck halten: Lueftungen per Name
define SENSOR -1252983604 # Gassensor (StructureGasSensor)
define LUEFTUNG -1129453144 # Aktive Lueftung (StructureActiveVent)
define NSENSOR HASH("Sensor Lager") # Name des Sensors
define NLUEFT HASH("Lueftung Lager") # Name der Lueftungen
define DRUCKMIN 95 # kPa, darunter einschalten
define DRUCKMAX 101 # kPa, darueber ausschalten
alias druck r0
alias an r1
alias unter r2
alias ueber r3
# --- 1. Einmal beim Start: Richtung setzen ---
sbn LUEFTUNG NLUEFT Mode 0 # 0 = nach aussen (in den Raum)
start:
yield
# --- 2. Druck lesen und schalten ---
lbn druck SENSOR NSENSOR Pressure 0
bnan druck start # kein Sensor mit diesem Namen
slt unter druck DRUCKMIN
sgt ueber druck DRUCKMAX
select an unter 1 an # zu wenig Druck: einschalten
select an ueber 0 an # genug Druck: ausschalten
sbn LUEFTUNG NLUEFT On an
j start
So liest du das Programm:
- Die
define-Zeilen sammeln alle Zahlen an einer Stelle. Willst du einen anderen Druck, änderst du nurDRUCKMINundDRUCKMAX. - Die
alias-Zeilen geben den Registern lesbare Namen. Modewird nur einmal vor der Schleife geschrieben. Das hat einen Grund: Jedes Schreiben vonModesetzt bei der aktiven Lüftung die Zieldrücke zurück, auch wenn derselbe Wert schon drinsteht. Im Modus 0 heißt dasPressureExternal= 101,325 kPa undPressureInternal= 0. Stünde die Zeile in der Schleife, wäre ein eigener Zieldruck nach einem Takt wieder weg.sltundsgtsetzenunterundueberauf 1 oder 0.- Die beiden
selectbauen eine Hysterese: Zwischen 95 und 101 kPa bleibt der letzte Zustand erhalten. Ohne sie würden die Lüftungen ständig an- und ausgehen.
Eine Lüftung, die du erst nach dem Start des Chips baust, bekommt das Mode aus Abschnitt 1 nicht mehr. Prüf ihre Richtung im Spiel oder starte den Chip neu.
Auf jeder Geräteseite in diesem Wiki findest du außerdem ein kurzes Beispiel im selben Stil, das genau dieses Gerät per Name anspricht.
Weiter in der Akademie
- IC10-Akademie – der ganze Kurs
- IC10-Akademie: Geräte per Name
- IC10-Akademie: Batch-Modi
- IC10-Akademie: define und alias
- Code direkt ausprobieren: IC10-Editor