Локализация аварий

Локализация аварии: укажите повреждённый участок — программа найдёт задвижки, которые нужно закрыть, и потребителей, которые останутся без тепла.

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Эксплуатация → «Локализация аварий». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
доступно всем, кто вошёл.
Короткое видео: как это выглядит в системе
Функция показана в сквозном сценарии:Авария: от нарушения до наряда
Читаю как

Возможности

  • Зона аварии по трубопроводу или узлу: какие участки окажутся отсечены задвижками.
  • Список задвижек для бригады: сначала обязательные, затем те, что можно не закрывать, и стоящие внутри зоны; кнопка «К задвижке» приближает карту.
  • «Не держит» у задвижки — зона пересчитывается до следующих задвижек; вернуть задвижку в расчёт — крестик на её метке над сводкой.
  • Сводка: отсекающие задвижки, отключённые потребители (в зоне и ниже задвижек), недоотпуск тепла в Гкал/ч, длина и объём труб в зоне.
  • Предупреждение, если в зону попал источник или узел заданного напора.
  • Выгрузка задвижек и потребителей в CSV.
  • Зона на карте: «Показать на карте», «Оставить на карте», «Снять подсветку с карты».
  • Открыть окно сразу для участка — кнопка с задвижкой в карточке объекта («Анализ отключения: какие задвижки закрыть»).

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

Расчёт — оценка по связности сети, без гидравлики: напор и расход по обходным путям не проверяются. В десктопе ТГИД такой функции нет.

Граф сети. В расчёт идут магистральные участки: не удалённые, с двумя узлами, не из внутренних схем узлов. Участок, у которого отключены обе трубы (для однотрубного — его труба), воду не проводит. Длина и диаметр берутся из первой записи паспорта участка. Если паспорта нет, участок считается длиной 10 м и Ду 100. Граф хранится в памяти API 60 секунд: правка сети попадает в расчёт не позже чем через минуту.

Зона. Обход начинается с концов повреждённого участка (или с самого узла) и идёт по соседним участкам:

  • участок с исправной задвижкой — граница: обход дальше не идёт, задвижка попадает в список; уже закрытая — в счётчик «Уже закрыты и не требуют действий»;
  • участок без задвижки входит в зону вместе с дальним узлом;
  • узел с задвижками во внутренней схеме (камера, ТРП, насосная) — тоже граница: все его задвижки попадают в список, а сам узел в зону не входит;
  • авария в узле: его внутренние задвижки не помогают, зона отсекается снаружи.

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

Потребители. В зоне — включённые потребители узлов зоны, обобщённые и реальные. Нагрузка = отопление + вентиляция + ГВС + технология, Гкал/ч. «Ниже задвижек» — узлы вне зоны, которые были связаны с питанием, а после отключения связь потеряли. Питание — источники (heatsources) и узлы заданного напора (setpressnodes). Кольца учитываются: есть обходной путь — потребитель остаётся с теплом.

Какие задвижки обязательны. Задвижка обязательна («обязательна»), если за ней после отключения остаётся питание: без неё вода пойдёт в зону. «Можно не закрывать» — за задвижкой питания нет, вода в зону не придёт; закрыть её стоит, чтобы не сливать системы потребителей. «В зоне» — задвижка на самом повреждённом участке или между узлами зоны, зону не ограничивает. На карте обязательные — жёлтые круги с красной обводкой, необязательные — серые.

Питающая точка в зоне. Если источник или узел заданного напора оказался внутри зоны, окно предупреждает: задвижками такую зону не отсечь, отключать нужно на источнике или на вводе из магистрали.

Цифры сводки. «Отключено зданий» — число записей потребителей в зоне и ниже задвижек; обобщённый потребитель может объединять несколько домов. Длина труб двухтрубного участка считается дважды. Объём = π/4 × d² × L по внутреннему диаметру.

CSV. В строке потребителя вид записан словами: «Потребитель (Реальный)» или «Потребитель (Обобщенный)», для потерявших питание ниже задвижек — «Потребитель (…, ниже задвижек)». Так же вид подписан и в таблице окна.

Карта. Участки зоны выделены красным, участки ниже задвижек — оранжевым пунктиром, задвижки — кругами. Потребители на карте не отмечаются — они в таблице, у каждого кнопка перехода. После расчёта карта перелетает к первой задвижке списка.

Расчёт ничего не сохраняет. Чтобы зафиксировать отключение со сроками и списком для уведомления, запланируйте его в окне «Отключения»: там тот же расчёт.

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

  • Данные: топология сети (участки с узлами), задвижки с состоянием «открыта / закрыта», источники и узлы заданного напора. Без паспорта участков длина и объём занижены (10 м на участок), без нагрузок потребителей недоотпуск будет нулевым.
  • Права: доступно любому вошедшему пользователю, включая роль «Просмотр». Расчёт ничего не пишет в базу.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Локализация аварий» — пункт выделен рамкой.

    Пункт «Локализация аварий» в панели «Инструменты»

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

    Окно «Локализация аварий»

  3. Выберите, что повреждено — трубопровод или узел, — и впишите его номер (виден в карточке объекта).

    Локализация аварий: шаг 3

  4. Нажмите «Локализовать аварию». Синяя плашка — оценка зоны: сколько узлов и потребителей отключится и какая нагрузка; ниже — задвижки, которые нужно закрыть, отключённые потребители и изолированные трубы. Если в зону попал источник, программа предупредит: задвижками такую зону не отсечь.

    Локализация аварий: шаг 4

  5. Нажмите «Оставить на карте» — окно закроется, зона аварии останется на карте: отключаемые участки и участки ниже по сети выделены, задвижки, которые нужно закрыть, отмечены. Снять выделение — снова откройте окно и нажмите «Снять подсветку с карты».

    Локализация аварий: шаг 5

Примеры

Участок 133 на копии Алматы. Расчёт отсёк 1712 участков (370 615 м труб, 112 580,55 м³) и 1653 узла. Зону ограничили задвижки во внутренних схемах шести камер: узлы 118, 295, 299, 362, 697, 725. Закрыть нужно 28 задвижек, ещё 2 уже закрыты.

Обязательных задвижек — 0: в зону попали два источника (узлы 713 и 714) и узел заданного напора 726. Окно предупреждает «Зона включает питающие точки». За задвижками камер после отключения питания не остаётся, поэтому все 28 помечены «можно не закрывать». Такую аварию отсекают на источнике.

Без тепла остаются 948 потребителей в зоне (3224,25 Гкал/ч) и ещё 53 ниже задвижек (61,41 Гкал/ч), всего 1001 и 3285,67 Гкал/ч.

Задвижка не держит. Отметим «Не держит» у задвижки 33 в камере 295. Камера уходит в зону целиком: границ становится 5, участков в зоне — 1721, к закрытию — 27 задвижек. В зоне теперь 954 потребителя (3243,75 Гкал/ч), ниже задвижек — 47 (41,92 Гкал/ч). Общий недоотпуск тот же — 3285,67 Гкал/ч: те же дома переходят из «ниже задвижек» в зону.

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

  • «Трубопровод с ID … не найден в базе данных.» — номер набран неверно; номер участка виден в его карточке.
  • «Трубопровод … входит во внутреннюю схему узла …: укажите этот узел или магистральный участок.» — выбран участок схемы камеры; переключитесь на «Узел сети (Node ID)» и укажите камеру.
  • «Трубопровод … не привязан к узлам расчётной схемы (нет nodeid1/nodeid2)…» — линия ГИС без топологии; привяжите её к узлам или выберите соседний участок.
  • «Трубопровод … отключён (обе трубы, pipesectstateid = 2).» — участок и так выведен из сети.
  • «Трубопровод … удалён.», «Узел с ID … не найден в базе данных.»
  • «Задвижки не найдены на границах изолированного сегмента» — вокруг зоны нет задвижек в модели: зона растёт до тупиков или источников.
  • Зона на полгорода и 0 обязательных задвижек — в зону попала питающая точка (см. жёлтое предупреждение) или на магистрали нет задвижек в модели.
  • «Не удалось выполнить анализ отключения» — ошибка сервера; подробности в журнале API.

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

  • Отдельных настроек и очередей нет: расчёт идёт в API синхронно, обычно за секунды.
  • Граф сети кешируется в памяти каждого процесса API на 60 секунд, отдельно для каждого города. Первый запрос после истечения кеша собирает граф заново (на копии Алматы — около 2 секунд).
  • Таблицы: linesobj, heatpipesections (длина, диаметры, состояние труб), dampers и damperarmaturestates, heatsources, setpressnodes, generalizedconsumers, realconsumers, nodes. Расчёт только читает их.

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

  • API: POST /api/analysis/valve-isolation ({line_id | node_id, failed_valve_ids?}, до 500 id), ответ — summary, valves_to_close с required/reason, valves_already_closed, failed_valves, feed_points_in_zone, affected_consumers, downstream_consumers, geojson. Код — routers/analysis.py, database/outage_simulation.py (simulate_outage_isolation, classify_valves, downstream_without_supply, граф — get_outage_network_graph).
  • MCP: инструмент valve_isolation (tgid_mcp/tools.py).
  • Веб: components/OutageSimulationDialog.vue (ключ outageSimulation), порядок и подписи задвижек — utils/valveIsolation.ts, слои карты — MapViewer.vue (outage-isolated-pipes, outage-downstream-pipes, outage-valves-to-close), запрос — services/api/calc.ts (simulateValveIsolation).
  • Тесты: tests/utils/valveIsolation.spec.ts; API — tests/test_outage_simulation.py, tests/test_outage_consequence.py; e2e — e2e/functions.spec.ts («локализация аварии на участке …»).
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо