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`.