BlockWerk Dokumentation
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="7 8 3 12 7 16"/><polyline points="17 8 21 12 17 16"/><line x1="14" y1="5" x2="10" y2="19"/></svg>

Script

Advanced

Führt benutzerdefinierte JavaScript- oder Python-Logik direkt innerhalb der Simulationsschleife aus. Definieren Sie eigene Eingangs- und Ausgangsports — diese stehen als Variablen im Skript zur Verfügung.

🚦 Einsatzbereich: Für nichtlineare Regelgesetze, Beobachter (Observer), Fuzzy-Logik, Aufschwing-Regler (Swing-up) oder komplexe Mathematik. Verwenden Sie für lineare Dynamik und Streckenmodelle Standardblöcke (Sum, Integrator, Gain usw.) — diese rechnen schneller und sind im Schaltplan intuitiver zu debuggen.

Laufzeitvariablen

Jeder Berechnungsschritt erhält:

NameTypBeschreibung
tnumberAktuelle Simulationszeit (Sekunden).
dtnumberAbtastschrittweite dieses Zeitschritts (Sekunden).
proparobjectHardware-Bridge — siehe _Hardwaresteuerung_ unten.
numberEine Variable pro deklariertem Eingangsport im Interface-Tab.

Weisen Sie Ihren Ausgangsport-Namen Werte wie gewöhnlichen Variablen zu — die Laufzeitumgebung liest diese nach jedem Zeitschritt aus. Ausgänge werden vor jedem Schritt auf 0 initialisiert; nicht-endliche Werte werden auf 0 zurückgesetzt.

Beispiel — JavaScript

// Eingänge: setpoint, measurement
// Ausgänge: torque
const error = setpoint - measurement;
torque = 0.5 * error;

Beispiel — Python (Pyodide)

# Eingänge: setpoint, measurement
# Ausgänge: torque
error = setpoint - measurement
torque = 0.5 * error
if t % 1 < dt:
    print(f"[ctrl] t={t:.2f}s | err={error:+.3f}")

numpy ist vorinstalliert (np). scipy wird bei Bedarf automatisch nachgeladen, sobald das Skript import scipy oder from scipy … enthält. Weitere Pakete: über import micropip; await micropip.install("…") innerhalb eines async-Blocks installierbar.

Port-Regeln

Port-Bezeichner müssen gültige JavaScript-/Python-Bezeichner sein und dürfen nicht kollidieren mit:

  • Den injizierten Systemvariablen t, dt, propar.
  • Schlüsselwörtern der jeweiligen Sprache (for, while, class, def, import, …).
  • Anderen deklarierten Port-IDs desselben Blocks.

Hardwaresteuerung über ProPar

Wenn Ihre Simulation mit einem Bronkhorst Massendurchflussregler (oder einem anderen ProPar-Gerät) kommuniziert:

JavaScript:

propar.write(/* node */ 1, /* procNr */ 1, /* paramNr */ 21, 50.0); // Sollwert

Python:

propar.instrument(1).fSetpoint = 50.0
# oder
propar.write(1, 206, 50.0)   # 206 = DDE-Nummer

Externe Skript-URL — Sicherheitshinweis

Das Feld External Script URL wird niemals automatisch geladen. Sie müssen explizit auf Pull... klicken und bestätigen. Geladener Code wird mit vollen Worker-Rechten ausgeführt. Laden Sie Code nur aus vertrauenswürdigen Quellen.

Hot-Reload

Während eine Simulation läuft oder pausiert ist, bewirkt das Speichern des Skripts (Strg+S oder Klick auf Speichern) einen sofortigen Hot-Reload der Funktion im Worker — kein Neustart erforderlich.

Konsole & Fehleranzeige

Der Tab Konsole zeigt Ausgaben des Workers in Echtzeit — inklusive print() / console.log(), Compiler- und Laufzeitfehlern. Bei Fehlern färbt sich die Blockoberfläche rot und visualisiert die letzte Fehlermeldung.

In BlockWerk simulieren

Interaktive Sandbox direkt im Browser — keine Installation, WebAssembly-Engine.

In BlockWerk simulieren →

Mathematisches Modell

y(t)=fscript(u(t),t)y(t) = f_{\text{script}}(u(t), t)

Parameter

Parameter Label Typ Standardwert Beschreibung
language Language select javascript Scripting language. Switching language replaces the default starter code if the editor is untouched.
script Script code // Available variables: t, dt, propar, and your custom input names // Assign values to your custom output names out = input * 2; Script executed every simulation step. Use the dedicated Script editor (double-click the block) for syntax highlighting and live console output.
customInputs Input Ports text [{"id":"input","label":"Input","dataType":"number"}] JSON array of input ports. Each entry: { id, label, dataType }. Edit via the Interface tab in the script editor.
customOutputs Output Ports text [{"id":"out","label":"Output","dataType":"number"}] JSON array of output ports. Each entry: { id, label, dataType }. Edit via the Interface tab in the script editor.
scriptUrl External Script URL text Optional URL. Click 'Pull' in the editor to fetch and replace the local script — never auto-fetched.

Anwendungsbeispiele

  • Nichtlineare Mehrgrößenregelung oder Zustandsschätzer.
  • Siehe die integrierten Beispiele im Handbuch für eine Demonstration dieses Blocks.

Hinweise & Best Practices

  • JavaScript vs. Python: JS läuft nativ und extrem schnell; Python läuft via Pyodide (~2–4 s Kaltstartzeit).
  • Hot-Reload: Ermöglicht schnelles interaktives Entwickeln und Parameteranpassen zur Laufzeit.
  • Hardware-Zugriff: Ermöglicht direkte Anbindung von ProPar-Geräten im Regelkreis.

Verwandte Blöcke