Зоны водоучёта и утечки

Зоны водоучёта (DMA) модели водопровода: сеть делится трубами с расходомерами, по каждой зоне — подача и минимальный ночной расход; расчёт с утечкой показывает, заметят ли её расходомеры зоны.

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Расчёты и диагностика → «Водопровод: расчёт сети» → модель в списке → раздел «Зоны водоучёта (DMA)». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
смотреть зоны — все, кто вошёл; расходомеры — право «Справочники и шаблоны карточек»; расчёт с утечкой — право «Запуск расчётов» и работающий расчётный движок водопровода.
Функция показана в сквозном сценарии:Водопровод: модель, зоны DMA, отключение задвижками
Читаю как

Возможности

  • «Трубы с расходомерами» — отметить трубы, на которых стоят расходомеры (вводы зон), и «Сохранить»: сеть делится на зоны водоучёта (DMA).
  • Таблица зон по выбранному расчёту: «Зона» с цветом и видом («район водоучёта», «источник», «без потребителей», ёмкости внутри), «Узлы», «Подача, л/с», «МНР, л/с» с часом минимума, «МНР / средн.».
  • «Зоны на карте» — сеть на карте окрашивается по зонам: трубы с расходомерами — толстые чёрные, прочие границы (насосы, арматура, закрытые трубы) — серые.
  • «Утечка в узле» и «Отверстие, см²» → «Рассчитать с утечкой» — расчёт суток с утечкой; он появляется в списке «Расчёт» как «№21 · утечка 105 (10 см²)» и сразу выбирается.
  • Для расчёта с утечкой в таблице добавляются «Утечка, л/с», «Рост МНР» с порогом и «По расходомерам» — «заметна» или «не заметна»; под таблицей — расход и объём утечки за сутки, вывод по её зоне и показания каждого расходомера против базового расчёта.

Как это работает

Зоны. Зона — связная часть сети, если разрезать её по границам: трубам с расходомерами, насосам, арматуре EPANET (редукционные, регулирующие клапаны и т. п.) и закрытым трубам. Номер зоны — по числу узлов с отбором: «Зона 1» — крупнейшая. Вид: «район водоучёта» — в зоне есть отбор; «источник» — отбора нет, но есть резервуар или бак; «без потребителей» — ни того, ни другого. Отбор узла для этого — средний за сутки по графикам отбора модели. Столбец «Узлы» — число узлов с отбором (без резервуаров и баков). На карте районы водоучёта получают цвета по порядку (до восьми), девятый и дальше и зоны-источники — серые.

Расходомеры. Это только отметка трубы в модели: список хранится в модели (tgid_water_model.meters), до 500 труб; насос или узел расходомером не отмечается. Зоны и баланс пересчитываются при каждом открытии по текущему списку, поэтому после смены расходомеров баланс старых расчётов тоже считается по новым зонам.

Баланс. По каждому шагу расчёта: подача в зону = расход через её границы внутрь (минус наружу) + вода, которую отдали резервуары и баки зоны; потребление = отбор узлов зоны (вместе с утечкой). В расчёте EPANET подача равна потреблению — расхождение показывает неполные границы. «Подача, л/с» — среднее за расчёт, «МНР» (минимальный ночной расход) — наименьшая подача за шаги и час, когда он был, «МНР / средн.» — его доля от средней подачи (только у районов водоучёта). Высокая доля значит, что в подаче много расхода, не зависящего от режима потребления, — признак утечек или крупного абонента с ровным отбором.

Утечка. Утечка моделируется истечением из отверстия в узле (излучатель EPANET): Q = Cd · A · √(2g) · √P, Cd = 0,75, A — площадь отверстия, P — давление в узле; при отрицательном давлении утечки нет. Площадь — больше 0 и до 500 см², узел — только узел с отбором (Junction). Окно считает одну утечку за раз, сутки с шагом 1 ч (API принимает до 20 утечек). «Утечка, л/с» — средний расход утечки за расчёт, объём «за период» — сумма по часам.

Заметна ли. Расчёт с утечкой сравнивается с базовым — последним расчётом той же модели без утечек и отключений с тем же числом шагов (его номер — в строке «Расходомеры (…изменение против расчёта №18)»). Для каждой зоны — рост МНР; утечка «заметна», если рост больше max(0,1 л/с; 5 % базового МНР зоны) — с запасом над погрешностью учёта ~2 %. Вывод делается только для районов водоучёта. Если утечка не заметна, зону стоит разделить дополнительными расходомерами.

Что нужно для работы

  • Модель водопровода и хотя бы один её расчёт: без расчёта таблица показывает только зоны.
  • Смотреть зоны и баланс — любой вошедший; расходомеры без прав видны, но не меняются.
  • «Сохранить» расходомеры — право «Справочники и шаблоны карточек» и включённая запись на сервере (MUTATIONS_ENABLED).
  • «Рассчитать с утечкой» — право «Расчёты» и работающий расчётный движок водопровода.
  • Для вывода «заметна / не заметна» — базовый расчёт без утечки («Рассчитать сутки»).

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Водопровод: расчёт сети» — пункт выделен рамкой.

    Пункт «Водопровод: расчёт сети» в панели «Инструменты»

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

    Окно «Водопровод: расчёт сети»

  3. Выберите модель (на снимке — учебная Net3 с расходомерами 129, 171, 204, 229, 238) и в списке «Расчёт» — расчёт с утечкой. Таблица «Зоны водоучёта (DMA)»: по каждой зоне — подача, минимальный ночной расход (МНР) с часом и его доля от средней подачи; у расчёта с утечкой — расход утечки, рост МНР против базового расчёта с порогом и вывод «заметна» или «не заметна». Расходомеры меняют в поле «Трубы с расходомерами» и кнопкой «Сохранить»; «Зоны на карте» окрашивает сеть по зонам.

    Зоны водоучёта и утечки: шаг 3

  4. Под таблицей — итог по утечке: её расход и объём за сутки, на сколько вырос ночной расход её зоны и заметят ли её расходомеры; ниже — показания каждого расходомера против базового расчёта. Новый расчёт: «Утечка в узле», «Отверстие, см²» и «Рассчитать с утечкой» — он появится в списке «Расчёт» и сразу выберется.

    Зоны водоучёта и утечки: шаг 4

Примеры

Копия Алматы, своя копия Net3: расходомеры 129, 171, 204, 229, 238. Сеть разбилась на 6 зон: «Зона 1» — 49 узлов, бак 1; «Зона 2» — 21 узел, бак 2; «Зона 3» — 14 узлов, бак 3; «Зона 4» — 7 узлов; «Зона 5» и «Зона 6» — источники River и Lake. Базовый расчёт №18: «Зона 1» — подача 305,3 л/с, МНР 200,8 в 4 ч (66 %); «Зона 4» — 304,8 л/с, МНР 290,9 в 19 ч (95 %). Доля 95 % в «Зоне 4» — не утечка: в ней узел 203 с почти ровным отбором около 290 л/с круглые сутки.

Та же модель: утечка заметна. «Утечка в узле» 105, «Отверстие» 10 см² → расчёт №21 за 2 с: «Утечка в узле 105 (Зона 1): 20,9 л/с, 1 807,1 м³ за период. Ночной расход зоны вырос на 22 л/с при пороге 10 — расходомеры зоны её заметят.» В строке «Зона 1»: подача 326,2, МНР 222,8 в 4 ч, «+22, порог 10», «заметна»; в остальных районах — «не заметна».

Модель «Net3» на той же копии: утечка не заметна. Сохранённые расчёты: узел 105, 2 см² (№4) — 4,2 л/с, МНР «Зоны 1» вырос на 4,5 л/с при пороге 10 — не заметна: зона слишком велика. Узел 207, 3 см² (№5) — 6,4 л/с в «Зоне 4», рост 6,4 при пороге 14,5 — тоже нет: порог задаёт крупный ночной отбор узла 203. Узел 141, 5 см² (№3) — 11,3 л/с в «Зоне 3», рост 11,3 при пороге 0,8 — заметна.

Если не получается

  • «Нет базового расчёта без утечек с тем же периодом…» — сравнивать не с чем: сначала «Рассчитать сутки» без утечки.
  • «Нет базового расчёта без утечек с тем же периодом — сравнивать не с чем: рассчитайте сутки без утечки.» — нет расчёта для сравнения: нажмите «Рассчитать сутки» и повторите расчёт с утечкой (или выберите его в «Расчёт» — сравнение строится при открытии).
  • «Рассчитать с утечкой» неактивна — не выбран узел, площадь вне 0…500 см², идёт другой расчёт или движок недоступен.
  • «Зоны водоучёта не загрузились», «Баланс по зонам не посчитан», «Расходомеры не сохранены», «Расчёт с утечкой не выполнен» — с текстом ответа сервера.
  • «Некорректные параметры запроса: Не трубы модели: …» — расходомер поставлен не на трубу (через API).
  • В таблице одна большая зона — расходомеров нет или они не замыкают границу: у закольцованной сети зону отделяют несколько расходомеров сразу.

Для администратора

  • Расходомеры — колонка meters в tgid_water_model (миграция sql/migrations/20261101_water_zones.sql). Баланс не хранится: считается по сохранённым результатам расчёта при каждом запросе.
  • Порог заметности (DETECT_SHARE = 5 %, DETECT_MIN_LS = 0,1 л/с) и предел расходомеров (500) — константы database/water_zones.py.

Для разработчика

  • API (routers/water.py, логика — database/water_zones.py): GET /api/v1/water/models/{id}/zones, PUT /api/v1/water/models/{id}/meters (links), GET /api/v1/water/models/{id}/runs/{run}/balance?baseline= (без baseline — последний подходящий базовый расчёт), расчёт с утечкой — POST /api/v1/water/models/{id}/runs с leaks: [{node, area_cm2}].
  • Движок: утечки — add_leaks в water_engine/engine.py (излучатель EPANET), расход утечки по шагам — summary.leaks[].flow_ls расчёта.
  • Веб: components/WaterZonesPanel.vue (внутри WaterDialog.vue), utils/water.ts (zoneColors, zoneFrame, ZONE_KIND_LABEL, runLabel).
  • Тесты: API — tests/test_water_zones.py; веб — tests/utils/water.spec.ts («зоны водоучёта»); e2e — e2e/functions/water.spec.ts («зоны водоучёта: расходомеры, баланс по зонам и утечка — как в API»).
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо