Script
AdvancedVoer 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:
| Naam | Type | Omschrijving |
|---|---|---|
t | number | Huidige simulatietijd (seconden). |
dt | number | Bemonsteringstijd van deze stap (seconden). |
propar | object | Hardware-bridge — zie _Hardware-aansturing_ hieronder. |
| number | Eé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.
Wiskundig Model
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
- Constant: Eenvoudige signaalbron
- Gain: Eenvoudige schaling
- MathFunction: Voor elementaire wiskundige bewerkingen