MiravoMiravo

Smart Factory

A discrete production line with buffers, shifts, faults and production signals, seeded so every run is the same.

Smart Factory template illustration

What's running

Seven assets, six models, fixed seed 20261004. Every asset is served over MQTT, OPC UA and Modbus TCP. The template sets no protocol scopes.

StationModelIdeal cycleBuffer after
cnc-001cnc-spindle45 scapacity 10, initial 2
wash-001belt-conveyor30 scapacity 5, initial 2
press-001hydraulic-press35 scapacity 5, initial 2
test-001belt-conveyor25 sunlimited sink

The wash station is a conveyor that moves parts through the wash. There is no washer model. The test station is an inspection conveyor, and its pass/fail result is its scrap rate, not a simulated measuring instrument. The chiller, compressor and pump are utilities, not stations.

The press is coupled to the utility compressor: press-001's supply_air_pressure input is bound to compressor-001's header_pressure. Inject valve_leak on compressor-001 (miravo inject compressor-001 valve_leak) and the header drops from about 8 bar to about 3.4 bar within seconds. The press regulator loses clamp pressure, press-001 raises air_pressure_loss and goes down_unplanned, the test station starves and the wash station starves or blocks as its buffers fill. The leak lasts 240 simulated seconds, the header recovers in about 45 s, and the press resumes after its 60 s inhibit.

Two shifts run Monday to Friday, 06:00 to 14:00 and 14:00 to 22:00, with 15-minute breaks at 10:00 and 18:00. Every 500 completed CNC parts triggers a 20-minute changeover. Time zero is Monday 06:00.

Launch

miravo start --template smart-factory
miravo status --json

Or use Console ⭢ Catalog ⭢ Smart Factory ⭢ Launch. Asset detail shows the station state badge and the good and scrap counts. Production lines covers the signals and their precedence.

Validate OEE

Run examples/oee-reference/index.ts against the authenticated admin API. A separate seeded fault scenario shows what happens when station two stops: upstream buffers fill, downstream stations starve and sink throughput drops. Counters restart at zero with a new run_id, so do not combine data from different runs.

Was this page useful?

Last updated on