BlockWerk Documentatie
<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

Voer aangepaste JavaScript- of Python-logica uit binnen de simulatielus. Definieer uw eigen invoer- en uitvoerpoorten — deze worden dynamische variabelen in uw script.

🚦 Wanneer te gebruiken: voor niet-lineaire regelwetten, waarnemers (observers), fuzzy logic, swing-up controllers of aangepaste wiskunde. Gebruik standaardblokken (Sum, Integrator, Gain, etc.) voor procesmodellen en lineaire dynamica — deze zijn sneller en visueel eenvoudiger te debuggen.

Runtime-variabelen

Elke scriptstap ontvangt:

NaamTypeOmschrijving
tnumberHuidige simulatietijd (seconden).
dtnumberBemonsteringstijd van deze stap (seconden).
proparobjectHardware-bridge — zie _Hardware-aansturing_ hieronder.
numberEén variabele per invoerpoort die in het Interface-tabblad is opgegeven.

Wijs waarden toe aan uw uitvoerpoortnamen als gewone variabelen — de runtime leest deze na elke stap uit. Uitgangen worden vóór elke stap op 0 gezet; een waarde die geen eindig getal is, wordt teruggezet naar 0.

Voorbeeld — JavaScript

// Ingangen: setpoint, measurement
// Uitgangen: torque
const error = setpoint - measurement;
torque = 0.5 * error;

Voorbeeld — Python (Pyodide)

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

numpy is vooraf geladen (np). scipy wordt op aanvraag automatisch geïnstalleerd als het script import scipy of from scipy … bevat. Overige pakketten: installeer via import micropip; await micropip.install("…") in een async-blok.

Poortregels

Poort-identifiers moeten geldige JavaScript / Python identifiers zijn en mogen niet botsen met:

  • De geïnjecteerde variabelen t, dt, propar.
  • Gereserveerde trefwoorden van de taal (for, while, class, def, import, …).
  • Andere gedeclareerde poort-id's op hetzelfde blok.

Hardware-aansturing via ProPar

Wanneer uw simulatie communiceert met een Bronkhorst MFC (of ander ProPar-apparaat):

JavaScript:

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

Python:

propar.instrument(1).fSetpoint = 50.0
# of
propar.write(1, 206, 50.0)   # 206 = DDE nummer

Externe Script URL — beveiligingsopmerking

Het veld External Script URL wordt nooit automatisch opgehaald. U moet op Pull... klikken en bevestigen om het lokale script te overschrijven. Opgehaalde code draait met volledige worker-rechten. Haal alleen code op van betrouwbare bronnen.

Hot-reload

Terwijl een simulatie actief of gepauzeerd is, herlaadt het opslaan van het script (Ctrl+S of de knop Opslaan) direct de gecompileerde functie binnen de worker — herstarten is niet nodig.

Console & foutafhandeling

Het console-tabblad toont live uitvoer van de worker — inclusief print() / console.log(), compilatiefouten en uitzonderingen. Bij fouten kleurt het blok rood en toont het de laatste foutmelding.

Simuleren in BlockWerk

Interactieve sandbox direct in je browser — geen installatie, aangedreven door WebAssembly.

Simuleren in BlockWerk →

Wiskundig Model

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

Parameters

Parameters Label Type Standaard Beschrijving
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.

Gebruiksvoorbeelden

  • Niet-lineaire toestandsregelaar of quaternion-transformaties.
  • Zie de ingebouwde voorbeelden in de handleiding voor een demonstratie van dit blok.

Opmerkingen & Best Practices

  • JavaScript vs Python: JS draait native en supersnel; Python draait via Pyodide (~2–4 s initiële laadtijd).
  • Hot-reload: Wijzigingen in scripts worden tijdens het draaien direct overgenomen bij opslaan.
  • Hardware-toegang: Biedt directe integratie met ProPar- en Bronkhorst-hardware.

Gerelateerde Componenten