2026-04-22 12:19:26 +02:00
|
|
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2026-04-22 13:00:16 +02:00
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 660" font-family="Arial, sans-serif" font-size="13" content="<mxfile host="app.diagrams.net" modified="2026-04-22T12:00:00.000Z" agent="Claude Code placeholder" etag="initial" version="22.0.0" type="device">
|
|
|
|
|
<diagram name="control-zones" id="controlZones">
|
|
|
|
|
<mxGraphModel dx="1000" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="700" pageHeight="800" math="0" shadow="0">
|
|
|
|
|
<root>
|
|
|
|
|
<mxCell id="0" />
|
|
|
|
|
<mxCell id="1" parent="0" />
|
|
|
|
|
<mxCell id="title" value="levelbased mode — three zones" style="text;html=1;fontSize=16;fontStyle=1;align=center;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="100" y="20" width="500" height="30" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="axis" value="" style="endArrow=classic;html=1;strokeColor=#000;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="280" y="600" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="280" y="80" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="axis_label" value="level" style="text;html=1;fontSize=13;fontStyle=1;align=left;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="240" y="60" width="50" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="overflow" value="heightOverflow — weir crest (spill → measure)" style="text;html=1;fontSize=12;align=left;fontColor=#B22222;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="130" width="380" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="overflow_tick" value="" style="endArrow=none;html=1;strokeColor=#B22222;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="270" y="140" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="290" y="140" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="run_band" value="RUN — linear 0 → 100 %" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#1E8449;fontSize=12;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="160" width="220" height="110" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="maxflow" value="maxFlowLevel — 100 % demand" style="text;html=1;fontSize=12;align=left;fontColor=#D68910;fontStyle=1;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="265" width="300" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="maxflow_tick" value="" style="endArrow=none;html=1;strokeColor=#D68910;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="265" y="275" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="295" y="275" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="ramp_label" value="(ramp — demand scales linearly with level)" style="text;html=1;fontSize=11;align=left;fontStyle=2;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="300" width="320" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="startlevel" value="startLevel — 0 % demand (ramp starts)" style="text;html=1;fontSize=12;align=left;fontColor=#1E8449;fontStyle=1;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="335" width="340" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="start_tick" value="" style="endArrow=none;html=1;strokeColor=#1E8449;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="265" y="345" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="295" y="345" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="dead_band" value="DEAD ZONE — hysteresis, keep last cmd" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF8E1;strokeColor=#F57C00;fontSize=12;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="360" width="220" height="80" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="inlet" value="heightInlet — inflow pipe" style="text;html=1;fontSize=12;align=left;fontColor=#1F4E79;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="395" width="300" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="inlet_tick" value="" style="endArrow=none;html=1;strokeColor=#1F4E79;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="270" y="405" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="290" y="405" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="stoplevel" value="stopLevel — unconditional STOP" style="text;html=1;fontSize=12;align=left;fontColor=#6C3483;fontStyle=1;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="440" width="300" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="stop_tick" value="" style="endArrow=none;html=1;strokeColor=#6C3483;strokeWidth=2;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="265" y="450" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="295" y="450" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="stop_band" value="pumps OFF (MGC shutdown)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F4ECF7;strokeColor=#6C3483;fontSize=12;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="465" width="220" height="80" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="outlet" value="heightOutlet — outflow pipe (dry-run trip here)" style="text;html=1;fontSize=12;align=left;fontColor=#B22222;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="510" width="360" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
<mxCell id="outlet_tick" value="" style="endArrow=none;html=1;strokeColor=#B22222;" edge="1" parent="1">
|
|
|
|
|
<mxGeometry relative="1" as="geometry">
|
|
|
|
|
<mxPoint x="270" y="520" as="sourcePoint" />
|
|
|
|
|
<mxPoint x="290" y="520" as="targetPoint" />
|
|
|
|
|
</mxGeometry>
|
|
|
|
|
</mxCell>
|
|
|
|
|
|
|
|
|
|
<mxCell id="floor" value="0 (floor)" style="text;html=1;fontSize=11;align=left;" vertex="1" parent="1">
|
|
|
|
|
<mxGeometry x="300" y="580" width="60" height="20" as="geometry" />
|
|
|
|
|
</mxCell>
|
|
|
|
|
</root>
|
|
|
|
|
</mxGraphModel>
|
|
|
|
|
</diagram>
|
|
|
|
|
</mxfile>">
|
2026-04-22 12:19:26 +02:00
|
|
|
<title>levelbased mode — three zones</title>
|
|
|
|
|
<defs>
|
|
|
|
|
<marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
|
|
|
|
<path d="M 0 0 L 10 5 L 0 10 z" fill="#000" />
|
|
|
|
|
</marker>
|
|
|
|
|
</defs>
|
|
|
|
|
|
|
|
|
|
<text x="350" y="30" text-anchor="middle" font-weight="bold" font-size="16">levelbased mode — three zones</text>
|
|
|
|
|
|
|
|
|
|
<!-- Vertical level axis -->
|
|
|
|
|
<line x1="280" y1="600" x2="280" y2="80" stroke="#000" stroke-width="2" marker-end="url(#arr)" />
|
|
|
|
|
<text x="260" y="75" text-anchor="end" font-weight="bold" font-size="13">level</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightOverflow -->
|
|
|
|
|
<line x1="270" y1="140" x2="290" y2="140" stroke="#B22222" stroke-width="2" />
|
|
|
|
|
<text x="300" y="144" fill="#B22222" font-size="12">heightOverflow — weir crest (spill → measure)</text>
|
|
|
|
|
|
|
|
|
|
<!-- RUN band -->
|
|
|
|
|
<rect x="300" y="160" width="240" height="110" fill="#E8F5E9" stroke="#1E8449" />
|
|
|
|
|
<text x="420" y="220" text-anchor="middle" font-size="13" fill="#1E8449" font-weight="bold">RUN</text>
|
|
|
|
|
<text x="420" y="238" text-anchor="middle" font-size="12" fill="#1E8449">linear 0 → 100 %</text>
|
|
|
|
|
|
|
|
|
|
<!-- maxFlowLevel -->
|
|
|
|
|
<line x1="265" y1="275" x2="295" y2="275" stroke="#D68910" stroke-width="3" />
|
|
|
|
|
<text x="305" y="279" fill="#D68910" font-size="12" font-weight="bold">maxFlowLevel — 100 % demand</text>
|
|
|
|
|
|
|
|
|
|
<!-- Ramp label -->
|
|
|
|
|
<text x="305" y="314" font-size="11" font-style="italic">(ramp — demand scales linearly with level)</text>
|
|
|
|
|
|
|
|
|
|
<!-- startLevel -->
|
|
|
|
|
<line x1="265" y1="345" x2="295" y2="345" stroke="#1E8449" stroke-width="3" />
|
|
|
|
|
<text x="305" y="349" fill="#1E8449" font-size="12" font-weight="bold">startLevel — 0 % demand (ramp starts)</text>
|
|
|
|
|
|
|
|
|
|
<!-- DEAD ZONE band -->
|
|
|
|
|
<rect x="300" y="360" width="240" height="80" fill="#FFF8E1" stroke="#F57C00" />
|
|
|
|
|
<text x="420" y="390" text-anchor="middle" font-size="13" fill="#B78200" font-weight="bold">DEAD ZONE</text>
|
|
|
|
|
<text x="420" y="408" text-anchor="middle" font-size="12" fill="#B78200">hysteresis — keep last cmd</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightInlet (inside dead zone) -->
|
|
|
|
|
<line x1="270" y1="405" x2="290" y2="405" stroke="#1F4E79" stroke-width="2" />
|
|
|
|
|
<text x="550" y="409" fill="#1F4E79" font-size="12">heightInlet</text>
|
|
|
|
|
|
|
|
|
|
<!-- stopLevel -->
|
|
|
|
|
<line x1="265" y1="450" x2="295" y2="450" stroke="#6C3483" stroke-width="3" />
|
|
|
|
|
<text x="305" y="454" fill="#6C3483" font-size="12" font-weight="bold">stopLevel — unconditional STOP</text>
|
|
|
|
|
|
|
|
|
|
<!-- STOP band -->
|
|
|
|
|
<rect x="300" y="465" width="240" height="80" fill="#F4ECF7" stroke="#6C3483" />
|
|
|
|
|
<text x="420" y="500" text-anchor="middle" font-size="13" fill="#6C3483" font-weight="bold">pumps OFF</text>
|
|
|
|
|
<text x="420" y="518" text-anchor="middle" font-size="12" fill="#6C3483">(MGC shutdown)</text>
|
|
|
|
|
|
|
|
|
|
<!-- heightOutlet -->
|
|
|
|
|
<line x1="270" y1="540" x2="290" y2="540" stroke="#B22222" stroke-width="2" />
|
|
|
|
|
<text x="305" y="544" fill="#B22222" font-size="12">heightOutlet — outflow pipe (dry-run trip)</text>
|
|
|
|
|
|
|
|
|
|
<!-- floor -->
|
|
|
|
|
<line x1="265" y1="600" x2="295" y2="600" stroke="#000" stroke-width="2" />
|
|
|
|
|
<text x="305" y="604" font-size="11">0 (floor)</text>
|
|
|
|
|
</svg>
|