From e654a04d8673836edf00810050b9530650d95e3a Mon Sep 17 00:00:00 2001 From: znetsixe Date: Wed, 22 Apr 2026 11:55:55 +0200 Subject: [PATCH] Redraw basin + control-zone diagrams MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Basin model: replaced the three-column geometry/elevation/control grid with a side-view tank cross-section — walls visible, inlet/outlet pipes poke through at their real heights, water ≈≈ vs dead-volume ░░ separate the zones at a glance, control thresholds cut across as dotted horizontal lines with the safety annotations on the right. Control logic: replaced the ●-stack with a single vertical level axis thermometer — elevation markers in the middle, control/safety annotations fanning out to the right. Narrower, less visual noise, easier to scan top-to-bottom. Co-Authored-By: Claude Opus 4.7 (1M context) --- Functional-Description.md | 81 ++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/Functional-Description.md b/Functional-Description.md index 34e06a0..2890481 100644 --- a/Functional-Description.md +++ b/Functional-Description.md @@ -170,25 +170,27 @@ Line-protocol payload for the `telemetry` bucket. Tags stay low-cardinality (sta The basin is modelled as a rectangular prism with constant cross-section. Everything derives from `volume = level × surfaceArea`. ``` - GEOMETRY ELEVATION CONTROL (levelbased) - - ═════════════ ◄─ heightBasin ──── maxVol ≡ volume - (freeboard) - - ─ ─ ─ ─ ─ ─ ─ ◄─ heightOverflow ──── maxVolOverflow ◄── overfill safety - - ╌╌╌╌╌╌╌╌╌╌╌╌╌ ──── ◄── maxFlowLevel (100% demand) - LINEAR SCALING - RANGE - ──●── INFLOW ◄─ heightInlet ──── minVolIn - - ╌╌╌╌╌╌╌╌╌╌╌╌╌ ──── ◄── startLevel (0% demand) - SEWAGE BUFFER - ┄┄┄┄┄┄┄┄┄┄┄┄┄ ──── ◄── stopLevel (unconditional stop) - DEAD ZONE ↑ hysteresis band - ──●── OUTFLOW ◄─ heightOutlet ──── minVolOut ◄── dry-run threshold - DEAD VOLUME - ═════════════ 0 (floor) + ┌─────────────────┐ ◄─ heightBasin (rim) + │ │ + │ freeboard │ + ├─ ─ ─ ─ ─ ─ ─ ─ ─┤ ◄─ heightOverflow ═══► overfill trip + │≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ (upstream stops) + │≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ + ├╌ ╌ ╌ ╌ ╌ ╌ ╌ ╌ ╌┤ ◄─ maxFlowLevel ═══► 100 % demand + │≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ ▲ + │≈≈≈≈≈ RUN ≈≈≈≈≈≈≈│ │ ramp + │≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ │ linearly + INFLOW ═══════►╣≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ ◄─ heightInlet │ + │≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ │ + ├╌ ╌ ╌ ╌ ╌ ╌ ╌ ╌ ╌┤ ◄─ startLevel ═══► 0 % demand + │≈≈ DEAD ZONE ≈≈≈≈│ ─── hysteresis + │≈≈ (keep cmd) ≈≈≈│ + ├╌ ╌ ╌ ╌ ╌ ╌ ╌ ╌ ╌┤ ◄─ stopLevel ═══► unconditional STOP + │≈≈≈≈≈ BUFFER ≈≈≈≈│ + │≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ + OUTFLOW ◄══════╣≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈│ ◄─ heightOutlet ═══► dry-run trip + │░░░ DEAD VOLUME ░│ (downstream stops) + └─────────────────┘ ◄─ 0 (floor) ``` **Typical ordering** (bottom → top): `stopLevel < startLevel = minFlowLevel ≤ heightInlet < maxFlowLevel ≈ heightOverflow`. @@ -241,23 +243,30 @@ flowPositions = { inflow: ['in', 'upstream'], outflow: ['out', 'downstream'] } ### `levelbased` mode — three zones ``` - demand - ───── - maxFlowLevel ──●─── 100 % ─┐ - │ │ RUN - │ │ (linear scaling) - │ │ - startLevel ──●─── 0 % ─┘ - │ ┐ - │ │ DEAD ZONE - │ │ (hysteresis: keep last command) - │ │ - stopLevel ──●─── stop ─┘ - │ ┐ - │ │ STOP - │ │ (unconditional MGC shutdown) - │ │ - floor ──● ┘ + level + ▲ + │ + ┼── heightOverflow ═══ overfill trip ─► upstream STOP + │ + │ ┐ + │ │ RUN + │ │ linear 0 → 100 % + │ │ + ┼── maxFlowLevel ═══ ┴ 100 % demand + │ + ┼── heightInlet ─── inflow pipe + │ + ┼── startLevel ═══ 0 % demand (ramp starts) + │ ┐ + │ │ DEAD ZONE + │ │ hysteresis — keep last cmd + │ │ + ┼── stopLevel ═══ ┴ unconditional STOP + │ + ┼── heightOutlet ─── outflow pipe + │ ═══ dry-run trip ─► downstream STOP + │ + ┴── 0 (floor) ``` - **STOP.** Below `stopLevel` every machine group receives `turnOffAllMachines()` and `percControl` is reset to `0`.