Redraw basin + control-zone diagrams
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) <noreply@anthropic.com>
@@ -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 % ─┐
|
||||
level
|
||||
▲
|
||||
│
|
||||
┼── heightOverflow ═══ overfill trip ─► upstream STOP
|
||||
│
|
||||
│ ┐
|
||||
│ │ RUN
|
||||
│ │ (linear scaling)
|
||||
│ │ linear 0 → 100 %
|
||||
│ │
|
||||
startLevel ──●─── 0 % ─┘
|
||||
┼── maxFlowLevel ═══ ┴ 100 % demand
|
||||
│
|
||||
┼── heightInlet ─── inflow pipe
|
||||
│
|
||||
┼── startLevel ═══ 0 % demand (ramp starts)
|
||||
│ ┐
|
||||
│ │ DEAD ZONE
|
||||
│ │ (hysteresis: keep last command)
|
||||
│ │ hysteresis — keep last cmd
|
||||
│ │
|
||||
stopLevel ──●─── stop ─┘
|
||||
│ ┐
|
||||
│ │ STOP
|
||||
│ │ (unconditional MGC shutdown)
|
||||
│ │
|
||||
floor ──● ┘
|
||||
┼── 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`.
|
||||
|
||||
Reference in New Issue
Block a user