59 lines
1.9 KiB
YAML
59 lines
1.9 KiB
YAML
# Example CONTINUOUS (soak) scenario — pump station endurance run.
|
|
#
|
|
# Demonstrates spec §8: long-duration simulation driven by a CSV
|
|
# inflow dataset IN PARALLEL with logic, degradation, invariants and
|
|
# snapshots. Run:
|
|
#
|
|
# wago-sim run --node config/pump_node.yaml \
|
|
# --scenario scenarios/pump_soak.yaml \
|
|
# --report-jsonl out/pump_soak.jsonl
|
|
|
|
name: pump_soak_8h
|
|
description: "8-hour soak: diurnal inflow, pump wear, level bounds"
|
|
|
|
mode: continuous
|
|
until: 8h # run length (sim time)
|
|
|
|
# datasets: inflow demand replayed from a historian export (optional;
|
|
# logic-only runs are equally valid — see FR-8.2.13)
|
|
datasets:
|
|
inflow:
|
|
file: data/inflow_day.csv
|
|
interpolation: linear
|
|
repeat: 1
|
|
|
|
# aliases (per-type addressing per FR-4.3.11 v1.5)
|
|
inputs:
|
|
tank_level: { type: ai, module: 0, channel: 0, scale: 0.1 } # AI0.0
|
|
inflow_cmd: { type: ai, module: 0, channel: 1, scale: 1.0 } # AI0.1
|
|
|
|
outputs:
|
|
pump_relay: { type: do, module: 0, channel: 0 } # DO0.0
|
|
|
|
# aging plant: capacity decays with pump runtime; maintenance alarm
|
|
# expected from the PLC when capacity drops below 75 %
|
|
degradation:
|
|
pump_capacity:
|
|
observes: pump_relay
|
|
model: linear
|
|
rate: 0.01 # -1% capacity per runtime hour
|
|
from: 1.0
|
|
maintenance_at: 0.75
|
|
diagnosis: { module: 0, channel: 0, value: 0x0001 }
|
|
|
|
# every-tick conditions; breaches fail the run as bounded episodes
|
|
invariants:
|
|
- { alias: tank_level, condition: '>= 0', label: level_floor }
|
|
- { alias: tank_level, condition: '<= 9000', label: level_brim }
|
|
|
|
rate_limits:
|
|
- { alias: tank_level, max_per_hour: 5000 } # level may not race
|
|
|
|
snapshot_every: 30m # periodic state dumps for the report
|
|
|
|
# scheduled discrete events interleave with the datasets (FR-8.4.6)
|
|
sequence:
|
|
- at: 4h
|
|
report: PASS # mid-run milestone check
|
|
- at: 7h
|
|
maintenance_reset: true # service the pump: capacity restored |