Отключение водопровода задвижками
Отключение трубы водопровода: какие задвижки закрыть, какие узлы останутся без воды и какой отбор пропадёт; расчёт с отбором по давлению показывает недоподачу в остальной сети.
Возможности
- «Задвижек в модели: N» с разбивкой по происхождению: «N−1» — расставлены автоматически, «из ГИС» — из слоя задвижек при загрузке сети, «вручную».
- «Расставить «N−1»» — расставить задвижки по правилу «N−1» в модели без задвижек (учебные сети); повторно — заменить расставленные так же, с подтверждением.
- «Труба» → «Найти задвижки» — какие задвижки закрыть, чтобы отключить трубу; какие насосы и арматуру закрыть вместе с ними; сколько узлов останется без воды и какой отбор пропадёт.
- «Рассчитать отключение» — то же с гидравлическим расчётом суток: сколько воды получит остальная сеть и у каких узлов недоподача из-за падения давления. Расчёт сохраняется в модели («№19 · отключение трубы 129») — его можно перематывать по часам.
- «Отключение на карте» — сеть окрашивается по отключению: участок красный и толстый, трубы под закрываемыми задвижками и сами задвижки — чёрные, отрезанные от источников узлы — фиолетовые, узлы с недоподачей — оранжевые, остальная сеть — серая. Включается само после поиска задвижек.
Как это работает
Задвижка стоит на трубе у одного из её концов (пара «труба — узел»); на карте — точка на трубе в 5 м от узла. Задвижки хранятся в tgid_water_valve. Правило «N−1» (Walski): у узла с N ≥ 2 трубами — задвижки на всех трубах, кроме самой крупной по диаметру (магистраль; при равных — с меньшим именем), у тупика — нет, у резервуара и бака — на всех трубах. Повторная расстановка заменяет только задвижки «N−1», остальные остаются.
Отключаемый участок выбранной трубы — всё, до чего от неё можно дойти по трубам, не проходя через задвижку: трубы и узлы. Закрытые трубы участок не продолжают. Насос или арматура EPANET на пути — граница участка, их закрывают («Закрыть насосы и арматуру:»). Закрываемая задвижка перекрывает свою трубу целиком.
Без воды остаются узлы участка и узлы, которые после закрытия участка, задвижек и насосов не связаны ни с одним резервуаром или баком («отрезаны»). Отбор — сумма их среднего суточного отбора, л/с. Если в участок попадает резервуар или бак — жёлтое предупреждение «В отключаемый участок попадают ёмкости: …». В списке задвижек — первые 12, остальные — «и ещё N».
Расчёт отключения. Движок считает сутки с шагом 1 ч с закрытыми участками и отбором по давлению (PDD): полный отбор при давлении 10 м и выше, нулевой — при 0 м. Так отрезанные узлы получают ноль, а не бессмысленное отрицательное давление. Правила управления (controls) закрываемых участков снимаются. «Подано … из … л/с» — средняя за сутки подача всем узлам против нужной по графикам. Недоподача из-за давления — узлы вне участка и не отрезанные, которым подано меньше 90 % нужного и заметно меньше (больше чем на 5 % нужного, не меньше 0,01 л/с), чем в такой же сети без отключения; этот расчёт «без отключения» делается один раз на модель и запоминается. В ответе — до 50 таких узлов, в окне — первые 12. Если EPANET останавливается (сеть без участка не работает), окно показывает причину жёлтой плашкой, расчёт не сохраняется.
Что нужно для работы
- Модель водопровода с задвижками: «N−1» или слой задвижек из ГИС. Без задвижек «Найти задвижки» неактивна.
- «Найти задвижки» — любой вошедший, движок не нужен.
- «Расставить «N−1»» — право «Справочники и шаблоны карточек» и включённая запись на сервере (
MUTATIONS_ENABLED). - «Рассчитать отключение» — право «Расчёты» и работающий расчётный движок водопровода.
Шаги
Откройте «Инструменты» и наберите в поиске «Водопровод: расчёт сети» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

«Расставить «N−1»» ставит задвижки в модели без них (учебные сети): у узла с N трубами — на всех, кроме самой крупной. Рядом — сколько задвижек в модели и откуда они: «N−1», «из ГИС», «вручную».

Выберите «Труба» и нажмите «Найти задвижки»: какие задвижки закрыть, длина отключаемого участка, сколько узлов останется без воды (на участке и отрезанные от источников) и их отбор. Сеть на карте окрашивается по отключению («Отключение на карте»).

«Рассчитать отключение» — расчёт суток с закрытым участком и отбором по давлению: сколько воды получит сеть и у каких узлов недоподача из-за падения давления. Расчёт сохраняется в модели и появляется в списке «Расчёт».

Примеры
Копия Алматы, своя копия учебной Net3. «Расставить «N−1»» → «Задвижек в модели: 142 («N−1»: 142)». Труба 129 → «Найти задвижки»: «Закрыть задвижки (3): на трубе 129 у узла 121; на трубе 131 у узла 125; на трубе 169 у узла 125», «Участок: 1 тр., 283,5 м. Без воды 1 узл. (на участке 1, отрезаны 0), отбор 3,1 л/с.» «Рассчитать отключение» (2 с): «Расчёт №19 (сутки, отбор по давлению): подано 687,2 из 690,3 л/с. Остальная сеть давление держит — недоподачи из-за отключения нет.» Разница 3,1 л/с — отбор отключённого узла 125.
Та же модель: труба у насоса. Труба 329 — задвижки на трубе 329 у узла 123 и на трубе 333 у узла 61, «Закрыть насосы и арматуру: 335» (насос от источника River). Без воды 2 узла: 61 на участке и 601 отрезан, отбор 0 л/с — у этих узлов нет потребителей. Расчёт №20: подано 690,3 из 690,3 л/с — сеть держат насос от Lake и баки.
Сеть из ГИС (вымышленный GeoPackage, задвижки из слоя точек). Труба T2: «Закрыть задвижки (2): на трубе T2 у узла J2; на трубе T5 у узла J3». Участок — 4 трубы, 551,1 м: задвижки есть только у J2 и J3, остальные трубы T3-1, T3-2, T6 открыты, а закрытая T7 в обход не ведёт. Без воды 5 узлов (4 на участке, J7 на ветке T5 отрезан), отбор 29,3 л/с из 50 л/с всей сети.
Если не получается
- «Найти задвижки» неактивна — в модели нет задвижек: «Расставить «N−1»» или загрузите сеть из ГИС со слоем задвижек.
- «Найти задвижки» неактивна — не выбрана труба или в модели нет задвижек: нажмите «Расставить «N−1»» или загрузите сеть из ГИС со слоем задвижек.
- «Закрыть задвижки (0): нет — участок ограничен насосами, арматурой или закрытыми трубами» — задвижек на границе нет, участок отключают сами насосы и арматура.
- «Некорректные параметры запроса: Труба «330» и так закрыта» — в модели эта труба закрыта (статус Closed), отключать нечего.
- Жёлтая плашка «Движок водопровода: Расчёт EPANET не выполнен: …» — без участка сеть не считается (часто — «System unbalanced»); узлы без воды и задвижки при этом показаны.
- «Задвижки не загрузились», «Задвижки не расставлены», «Задвижки не найдены», «Отключение не рассчитано» — с текстом ответа сервера.
Для администратора
- Таблица
tgid_water_valve(миграцияsql/migrations/20261101_water_valves.sql), колонкаsource:strategic(«N−1»),gis,user. Кеш подачи без отключения —summary.pdd_baselineвtgid_water_model, считается при первом расчёте отключения модели. - Расчёт отключения пишет обычный расчёт модели в
tgid_water_run(сводкаsummary.isolation).
Для разработчика
- API (
routers/water.py, логика —database/water_isolation.py):GET /api/v1/water/models/{id}/valves(GeoJSON,count,by_source),POST /api/v1/water/models/{id}/valves/generate,POST /api/v1/water/models/{id}/isolation(link_id),POST /api/v1/water/models/{id}/isolation/run(link_id; ответ — то же плюсrun_id,supply,simulation_error). - Движок:
POST /simulateсclosed_linksиdemand_model: "PDD"(water_engine/engine.py:close_links,_supply,halt_reason). - Веб:
components/WaterIsolationPanel.vue(внутриWaterDialog.vue),utils/water.ts(ISOLATION_META,isolationFrame,runLabel). - Тесты: API —
tests/test_water_isolation.py; веб —tests/utils/water.spec.ts(«отключение участка»); e2e —e2e/functions/water.spec.ts(«отключение участка: расстановка «N−1», задвижки и расчёт…», отключение по задвижкам из ГИС).
