Eine Volumenpumpe hat zwei wichtige LogicTypes: On und Setting – die Fördermenge in Litern pro Takt. Statt sie nur an- und auszuschalten, kannst du die Menge stufenlos an den Druck anpassen. Dann rauscht der Tank nicht über das Ziel hinaus.
Proportionalregler
Die Idee: Pumpenleistung = Abstand zum Ziel × Faktor.
sub menge ZIEL druck # wie weit noch?
div menge menge 100 # 100 kPa Abstand = 1 Liter/Takt
clamp menge menge 0 10 # nie unter 0, nie ueber 10
clamp r? wert min max begrenzt einen Wert auf einen Bereich. Ist der Tank leer, wäre menge riesig – clamp macht 10 daraus. Ist er über dem Ziel, wäre sie negativ – clamp macht 0 daraus.
Danach braucht die Pumpe nur noch zu laufen, wenn überhaupt etwas zu tun ist:
sgtz an menge # 1, wenn menge > 0
Sicherung gegen NaN
Fällt der Rohr-Analysator aus, liefert Average NaN, und menge wird NaN. Für eine Pumpe ist das gefährlich – wer weiß, was das Gerät mit „keine Zahl“ macht. Also explizit abfangen:
snan fehlt druck
select menge fehlt 0 menge # bei NaN: 0
Erst rechnen, dann absichern, dann schreiben – in dieser Reihenfolge bekommt das Gerät nie einen Unsinnswert.
Der Prefab-Name des Rohr-Analysators ist StructurePipeAnalysizer – der Schreibfehler steckt so im Spiel.
Schaubild
Übung
Aufgabe
Ein Rohr-Analysator „Tank“ misst den Druck, eine Volumenpumpe „Fuellpumpe“ füllt nach. Zieldruck 5000 kPa.
Settingder Pumpe = (5000 − Druck) / 100, begrenzt auf 0 bis 10On= 1, wenn die Leistung größer als 0 ist, sonst 0- Fällt der Analysator aus (NaN):
Setting0 undOn0
Hinweise
Hinweis 1
Drei Zeilen für die Leistung: sub, div, clamp.
Hinweis 2
NaN abfangen: snan fehlt druck, dann select menge fehlt 0 menge.
Hinweis 3
Zum Schluss sgtz an menge – erst nach der NaN-Sicherung.