Virtual SCADA · physics-honest

Real telemetry. Real protocols. Replayable physics.

Continuous, physics-honest sensor telemetry over Modbus/TCP, OPC-UA, BACnet, MQTT and DNP3. Driven by a deep library of plant templates and a disturbance library, captured to pcapng + parquet + alarms, cryptographically sealed — and ready to feed an IDS, an analytics pipeline, an operator trainer, or an ICS attack mix on top.

Plant templates
67
Protocols (live)
6
Min cycle
2 ms
Streams
Live + sealed
vplc / clarifier-2 · Modbus 502 · OPC-UA 4840live · 2 ms cycle
process trend · last 5 min3 tags
FT-101PT-204TT-309
FT-101 flow
342.7L/min
PT-204 pressure
5.42bar
TT-309 temp
62.1°C
LT-412 level
78.4%
AT-518 pH
6.92
MT-621 motor speed
1462rpm
MT-621 over-speed alarm · ack pending
cycle 482 911

Six things every SCADA run guarantees.

These behaviours aren’t toggles — they’re built into the engine. Every motif, every protocol, every disturbance respects them, so a run from a junior engineer ships with the same evidence quality as a run from the platform team.

Promise · 01

Physics anchors every signal

Every analog tag is driven by a calibrated physics-honest response model; every discrete equipment state is driven by an event-driven state machine with safety interlocks. The result is telemetry that doesn't just look real on a chart; it satisfies the physical constraints your IDS or analytics expect.

Promise · 02

Real protocols on the wire

Six SCADA protocols in the engine today — Modbus TCP, OPC-UA, BACnet/IP, MQTT, DNP3, IEC 61850 (MMS/GOOSE/SCL). Standard Virtual SCADA produces batch frame traces for all six (NDJSON / Parquet / pcapng records of what went on the wire). Enterprise VPLC upgrades the same six protocols to live TCP servers on real ports inside a real-time-capable Docker container on your infrastructure — IDS, operator consoles, and red-team tooling can connect as if it were a production plant.

Promise · 03

Deep plant-template library

A broad library of pre-built plant templates spanning water, power, manufacturing, oil & gas, HVAC, and more. Each template carries the response models and state machines for every loop in the plant, mapped to the right protocol surface for the vertical.

Promise · 04

Realistic disturbance library

Realistic disturbances bake in: storm-surge inflow, blower failure, sensor drift, valve seize, breaker trip — all on a deterministic schedule that replays byte-equal across runs.

Promise · 05

Composable with ICS Security

A Virtual SCADA run is a first-class input to the ICS Security engine. Inject MITRE ATT&CK ICS classes against a live process; the truth file labels the result; one bundle ships both telemetry and adversary ground truth.

Promise · 06

Same evidence chain as the rest

pcapng + signals.parquet + alarms.json + commands.json + asset_inventory.json all hashed and chained with BLAKE3 into a sealed .tar.zst. Verifiable offline, replayable forever.

Six industrial protocols. Live servers, real ports.

Every protocol below runs as a real server on a real TCP/UDP port — not synthetic packet replay. Bind only the ones you need; air-gapped registries supported.

Modbus / TCP

:502

Live server, holding/input registers, coil semantics, function-code coverage 1–6, 15, 16.

OPC-UA

:4840

Anonymous and certificate auth, address space generation per plant motif.

BACnet / IP

:47808

AHU / VAV / chiller object models, COV subscription, Read/WriteProperty round-trip.

MQTT 3.1.1 / 5

:1883

Sparkplug-B compatible payloads; configurable QoS and retained-message behaviour.

DNP3 (IEEE 1815)

:20000

Master/outstation, integrity polls, unsolicited responses, CRC-16 frame integrity.

IEC 61850 MMS

:102

Substation IED scenarios on the Enterprise VPLC tier; report control blocks supported.

How a run unfolds

Six stages from motif to sealed bundle.

Same six stages as the synthetic-data engines, with two domain-specific steps: a wire capture (pcapng) and an optional adversary mix.

scada/run-2841·truth.ndjson
14:30:00 → 14:36:00 UTC
signals.parquet · pump-3.discharge_pressurekPa
MITRE ATT&CK ICS · ground-truth events6 events
T0807Cmd inject
T0830MITM
T0832View spoof
T0836Param modify
T0878Alarm suppress
T0889Modify program
pcapng
42.7 MB · 218 411 frames
truth.ndjson
6 events · sha 5e2c1a…
blake3 root
a4f2…d801
Stage 01

Pick a plant template

Choose from our deep library of pre-built plant templates (water, power, pipeline, buildings, logistics, process-batch). Each template declares its tags, protocol bindings, regime schedule, and disturbance hooks; overrides land as JSON on the run request.

Stage 02

Configure run options

Duration, sample cadence, jitter (p50 + p95), which protocols to bind, where the evidence volume lives. Defaults are sensible; everything is overridable.

Stage 03

Drive the process

The motif schedule plays out: setpoints move, regimes change, Tier 2 disturbances hit on the pinned schedule. Live protocol traffic mirrors the process in real time.

Stage 04

Capture wire + state

pcapng captures the wire exactly as it appeared on the LAN; signals.parquet captures the per-tag time series; alarms.json records what an operator would have seen.

Stage 05

Quality + chain seal

Distribution checks, cycle-time accounting, protocol conformance verified before sealing. BLAKE3-chained .tar.zst lands in your bucket.

Stage 06

Optional ICS attack mix

Compose with the ICS Security engine to inject MITRE ATT&CK ICS classes on the same SCADA run. Truth labels travel inside the same bundle.

Plant templates we ship out of the box.

Each template bundles calibrated response models and event-driven state machines for the full loop set of the plant, mapped to a real protocol surface. Use the stock ones, or hand us a P&ID and we’ll fit a custom pack inside a week.

Water & wastewater

Pumps, clarifiers, blowers, aerators with realistic chemistry — pH, ORP, dissolved oxygen, turbidity.

Power & grid

Substation, breakers, RTU telemetry; SCADA/EMS integration patterns; IEDs on the VPLC tier.

Manufacturing

Conveyor, stamping, robotic-cell motifs with discrete-event behaviour and per-cycle accounting.

Oil & gas midstream

Pipeline, compressor, custody-transfer skids; regulator-grade response dynamics per loop.

Building / HVAC

BACnet AHU, VAV, chiller plant; occupancy and outside-air-driven cycles; trend logging.

Custom plant

Bring your P&ID — we calibrate the response model per loop and ship the pack inside a week.

Physics realism ladder

Six rungs above random-walk telemetry.

Each rung is a published mechanism, not a marketing claim: authorable dwell-time regime scheduler, cross-signal coupling graph with analytic ρ→g inversion, diffusion-form aware integrator dispatch, adaptive dynamics calibration, swing-equation substation load flow, and a unified live/batch integrator that keeps stream and sealed bundle byte-equal.

Rung · 01

Authorable regime scheduler

Per-plant dwell-time distributions (LogNormal/Weibull/Gamma/Deterministic) drive the regime timeline. Setpoints are regime-conditional — DO sags in fault, pumps cycle in high-load, valves lean in maintenance. No geometric-Markov artifacts.

Rung · 02

Cross-signal coupling

Catalogued archetypes wire signal-to-signal influence (flow→pressure, DO→NH₄⁺, P→voltage-sag) through an analytic coupling graph. Target correlation converts to edge gain in closed form — no hand-tuned knobs.

Rung · 03

Diffusion-form aware integrators

Each signal declares its process class (additive, multiplicative, CIR). The integrator dispatcher picks Euler-Maruyama, log-Euler, or Milstein per signal, with Strang splitting when a block is stiff and coupled. Feller-safe CIR keeps dissolved-oxygen, reaction rates, and frequency deviations off boundary pins.

Rung · 04

Adaptive dynamics calibration

A short pre-roll measures observed utilisation per signal; one Newton correction retunes the stochastic scale to the authored target. The same 1-hour substation run reaches realistic coefficient-of-variation without human parameter-fitting.

Rung · 05

Grid-aware substation load flow

Substation V/f/P/Q are driven by a swing equation + AVR + voltage-dependent load block at IEEE C37.010 nominals. Stochastic noise rides on the deterministic load-flow solution — not the other way round.

Rung · 06

Unified live + batch

The same integrator feeds a per-tick SSE stream and the sealed batch bundle. Consumers subscribe at /v1/client/runs/{run_id}/stream; late joiners replay from the ring buffer. A missed frame never silently drops — the sealed transcript is the source of truth.

Privacy-safe historian ingestion

Train on your real plant without shipping raw rows.

Bring a CSV, Parquet, or PI System export; the engine fits a sanitised statistical summary under a differential-privacy budget with Rényi-DP accounting. Multi-site deployments aggregate across facilities under MPC, TEE, or trusted-aggregator modes — the coordinator never sees raw tuples, and every run ships a privacy_evidence.json audit trail.

Bring your historian

Point at a CSV, Parquet, or PI System export; the Differentially-Private Historian Extension fits a sanitised statistical summary under an (ε, δ) budget with Rényi-DP accounting. Raw rows never leave the ingest boundary.

Federate across sites

k-site aggregation runs under MPC additive secret sharing (three-server), SGX/SEV/Nitro TEE, or trusted-aggregator mode. Each site publishes only its sanitised summary; the coordinator sees the aggregate, never the raw tuples.

Privacy evidence travels with the bundle

Every run ships a privacy_evidence.json carrying the epsilon/delta ledger, per-signal sensitivity bounds, aggregation backend, and participant receipts. Audit-ready on the first read.

Where Virtual SCADA earns its keep.

IDS / NDR vendor benchmarking

Generate reproducible, labelled traffic for detection-rule training and regression-testing. Same bundle, different runs, same outputs from your detector — that's the test.

Digital-twin & analytics

Drive your real analytics pipeline against synthetic-but-honest telemetry. Catch the bug before it points at production.

Operator training

A behaviourally-identical plant the trainee can stress, mis-operate, and recover without ever touching the live process.

PLC / vendor PoC sandbox

Stand up a clean SCADA + Virtual PLC environment per vendor evaluation; reset to the sealed baseline between PoCs.

Posture you don’t configure.

Tenant-isolated

Per-tenant Fernet at rest, per-tenant artefact prefix, ORM-level row filtering — same as the rest of the platform.

Real protocols

Live server implementations on real TCP/UDP ports, not synthetic packet replay.

Physics honest

Per-tag calibrated response model; event-driven state machines with safety interlocks for discrete equipment state. No random-walk telemetry.

Sealed by default

Every run produces a BLAKE3-chained .tar.zst; offline verifier flags any in-place mutation.

Bring a P&ID. We’ll ship a sealed run.

45-minute working session: tell us the plant, the protocols, and one disturbance you want to drive. We’ll cut the contract, run the SCADA engine, and walk you through the bundle.

evidence pipeline · job_9b3df1
live
K
Sealed contract
E
Engine run
Q
Quality gates
B
BLAKE3 chain
S
Sealed bundle
rows generated
10 000
qa score
0.957
chain root
a4f2…d801