Demo plants
The twelve synthetic demo plants, how to start one, switch between them and stage a stop.
BooleX ships with twelve demo plants, one per sector, each with its PLC code, functional specification, manuals and procedures, work orders, spare parts and recorded stops. All plant data is synthetic. They run on the bench stack, never on a customer site.
Start a demo plant
make up # the dairy plant (bench CIP skid, separator, evaporator) on http://127.0.0.1:8080 make up PLANT=food-bev # another plant, by its pack ID make up PROFILES=bench,ollama && make model # with a local language model
Sign in as demo; the password is in deploy/secrets/demo_password, made on the first make up. To switch plants from the Web UI, sign in as an administrator (below). Without a language model the Web UI opens sources and evidence cards but refuses questions with "No language model is configured": it never invents an answer.
Switch plants without a restart
On the bench the Assistant runs with the demo pack switcher. The top bar shows Demo pack: <sector> to everyone. An administrator (docker compose -f deploy/compose.yaml run --rm assistant python -m edge.users add presenter administrator) opens Switch demo pack, picks a pack and presses Load pack: the pack's plant (code, documents, work orders, parts and starter prompts with its headline question) and its headline stop, replayed so it happened two minutes ago, load in the running stack. The top bar shows the loading status, and the error if a pack fails to load. Open sessions are closed so no answer cites the previous plant, the store is not changed, and every switch is in the audit log.
The switcher exists only in the development profile, never on a customer site. Each pack's 10-minute script follows a common storyline (plant/demos/storyline.md).
Stage a stop
make replay F=F16 # the recorded stop, placed two minutes ago make replay F=FB01 PLANT=food-bev make fault F=F02 # the live simulator runs the fault (dairy plant only) make live # back to fault-free cycles
Then ask the scenario's question, for example "Why did the CIP hold on the caustic wash?".
The plants
| Pack ID | Plant | Code |
|---|---|---|
(default) cip | Dairy: CIP skid CIP-100 with separator S-201 and evaporator EV-301 | Bachmann PLCopen, plus Siemens, Rockwell, Omron, Mitsubishi, SLC 500, PLC-5, Schneider, B&R, PACSystems, CODESYS V3.5 and STEP 7 Classic exports of the same logic |
food-bev | Bottling line BL-400 | Rockwell L5X |
medtech | Assembly cell 3: ultrasonic weld, leak test, vision | Siemens TIA |
process-chem | Batch reactor R-501 | Siemens TIA |
packaging | Packaging line 2 (PackML) and extruder EX-100 | Rockwell L5X and CODESYS V3.5 |
automotive | Weld and assembly line A1 | Siemens TIA and Rockwell L5X |
machine-builders | OEM hydraulic press HP-800 at a customer site | Beckhoff (PLCopen) |
water | Sewage pumping station PS-14 with its outstation | Siemens TIA |
energy | Wind turbine WTG-07 pitch system | Bachmann PLCopen |
data-centres | Data centre DC1 power and cooling | Rockwell L5X |
marine | Vessel power management | Siemens TIA |
pharma | SIP skid SIP-2 on a media preparation vessel, non-GMP (no GMP, Annex 11, Annex 22 or Part 11 claim) | Siemens TIA |
The same answer from another vendor's code
make vendor VENDOR=siemens # or rockwell, omron, mitsubishi, slc500, plc5, schneider, br, pacsystems, codesys, step7 make vendor VENDOR=bachmann # back make vendor VENDOR=codesys PLANT=packaging # packaging line 2 from its CODESYS export make vendor VENDOR=rockwell PLANT=automotive # line A1 from its Rockwell export
The answer is the same and cites that vendor's code, as project <project>-<vendor> (cip-siemens, l2-codesys).