Гидравлическая модель сети и формулы

> Кратко. Сеть представляется ориентированным графом: каждый узел раздвоен на «подающий» и «обратный», каждый элемент (труба, задвижка, насос, регулятор, потребитель) — ветвь графа. Для каждого узла пишется баланс расходов (1-й закон Кирхгофа), для каждой ветви — связь перепада напора и расхода (2-й закон), для узлов ЗН — известный напор. Нелинейная система решается методом Ньютона. Ниже — все формулы с примерами.

Источник: движок itwin-api/heatnet — solve/hydraulic.py, solve/subnet.py (Ньютон, сходимость), solve/regulators.py, physics/resistance.py, io/reader.py; исходный десктопный sety — w_calc.py, sopr.py. Отличия веба от десктопа — Расчётный движок.

6.1. Граф сети

  • Каждый узел сети id даёт две вершины графа: (id, 1) — на подающем трубопроводе и (id, 2) — на обратном.
  • Участок с признаком 1 (общий) порождает две ветви: подающую (n1,1)→(n2,1) и обратную (n1,2)→(n2,2). Признаки 2/3 — по одной ветви; 4/5 — переходы подача↔обратка.
  • Потребитель соединяет подающую и обратную вершины своего узла.
  • Отключённые элементы (состояние «закрыт», отключённые трубы) в граф не включаются.
  • Расчёт выполняется по каждой связной подсети отдельно. Подсеть, в которой нет ни одного узла с заданным напором, не считается — в протоколе появится сообщение «Подсеть из N узлов…» в категории «Подсети без узла с ЗН».

Неизвестные системы: напор H в каждой вершине (полный, с учётом отметки), расход G в каждой ветви и вспомогательная переменная для каждого узла ЗН.

6.2. Уравнения

1-й закон Кирхгофа (баланс узла):

Σ G(входящих ветвей) − Σ G(выходящих ветвей) = Gузл

Gузл — отбор (или подкачка) в узле: расход потребителя, утечка, подпитка. Для потребителя в плановом режиме:

  • в подающем узле отбирается Gз + Gп (закрытая часть + открытый водоразбор из подачи);
  • в обратный узел возвращается Gз − Gо (минус водоразбор из обратки).

2-й закон (ветвь n1 → n2):

H1 − H2 = S · G · |G|

Узел с заданным напором:

H = Hзад + z      (z — отметка верха трубы)

6.3. Метод Ньютона

  1. Начальное приближение: напоры = отметкам, расходы = 10 т/ч.
  2. На каждой итерации строится матрица Якоби и невязка, решается линейная система (разреженный решатель), решение уточняется: x ← x + Δx.
  3. Чтобы матрица не вырождалась при нулевом расходе, вместо |G| используется сглаженное sqrt(G² + ε²), ε = 10⁻⁶ т/ч. Производная потерь: −S·(2G² + ε²)/sqrt(G² + ε²).
  4. Значения |x| < 10⁻⁵ обнуляются.
  5. Критерий сходимости: шаг max|Δx| / max(1, |x|) < 10⁻⁷ и невязка уравнений < 10⁻⁴ (т/ч, м). Не более 100 итераций Ньютона на один проход. Если не сошлось — в протоколе красное сообщение «Гидравлический расчет подсети … не сошелся за 100 итераций: шаг …, невязка …; результат приближенный». В десктопе (и в профиле legacy) критерий другой — Σ|Δx| < 0,001 без проверки невязки и без сообщения.

Внешние циклы (вложенность):

для m = 1 … n_potr      (n_potr = 4 при расчёте по графику с теплопотерями, иначе 1)
  для j = 1 … 5          (регуляторы расхода и обратные клапаны: до 5 проходов)
     регуляторы давления — уравнениями в системе Ньютона (до 10 проходов)
     [если не сошлось — старый метод: подбор сопротивлений, до iter = 20 итераций]
     проверка регуляторов расхода и обратных клапанов → при смене состояния пересборка матрицы
  тепловой расчёт (температуры), пересчёт расходов потребителей с учётом потерь
финальный тепловой расчёт при заданной tн, нагрузки участков

Если состояние клапанов и регуляторов не установилось за 5 проходов, в протоколе: «Обратные клапаны и регуляторы расхода: состояние не установилось за 5 проходов, взято последнее».

6.4. Сопротивление участка трубопровода

Формула ТГИД (по умолчанию)

Коэффициент трения — квадратичная зона (формула Прандтля–Никурадзе):

λ = 1 / (4 · (lg(3,715 · d / kэ))²)        d — внутренний диаметр, мм; kэ — шероховатость, мм (0 → 0,5)

Удельное сопротивление (на 1 м трубы):

s = 6,94988·10⁶ · λ / d⁵        [м / (т/ч)² на 1 м], d в мм

Коэффициент 6,94988·10⁶ соответствует формуле Дарси–Вейсбаха при плотности воды ≈ 958 кг/м³.

Если в участке n параллельных труб (truba): s = s / n².

Полное сопротивление с местными потерями — два способа (как задано в паспорте):

если задана «доля местных потерь» δ:   S = s · L · (1 + δ)
иначе по сумме коэффициентов Σξ:        S = s · (L + d · Σξ / (λ · 1000))

Второе слагаемое — эквивалентная длина местных сопротивлений Lэкв = d·Σξ/(λ·1000), м.

Если в паспорте задано готовое сопротивление участка sopr > 0, оно используется как есть.

Пример 1. Участок Ду300

d = 309 мм, kэ = 0,5 мм, L = 125,4 м, G = 300 т/ч, местных сопротивлений нет.

lg(3,715·309/0,5) = lg(2295,9) = 3,3609
λ = 1 / (4 · 3,3609²) = 0,02213
s = 6,94988·10⁶ · 0,02213 / 309⁵ = 5,460·10⁻⁸
S = 5,460·10⁻⁸ · 125,4 = 6,847·10⁻⁶
ΔH = S·G² = 6,847·10⁻⁶ · 300² = 0,616 м
R = ΔH / L · 1000 = 4,91 мм вод. ст./м ≈ 48 Па/м
v = 353,86 · 300 / 309² = 1,11 м/с

С местными сопротивлениями Σξ = 2,0: Lэкв = 309·2,0/(0,02213·1000) = 27,9 м, S = 8,372·10⁻⁶, ΔH = 0,753 м. С долей местных потерь δ = 0,3: S = 8,901·10⁻⁶.

Ориентиры удельных потерь (kэ = 0,5 мм)

Dвн, мм G, т/ч λ R, мм/м v, м/с
100 20 0,0303 8,4 0,71
207 80 0,0246 2,9 0,66
309 300 0,0221 4,9 1,11
512 1000 0,0195 3,9 1,35

Альтернативные формулы трения (параметр сервера sopr)

При sopr ≠ 0 сопротивление участка пересчитывается на каждой итерации по текущему расходу, скорости и числу Рейнольдса при температуре источника (подача — t1_r, обратка — t2_r; если источник неизвестен — 150/70 °C):

v  = скорость, м/с;   ν = μ(t)/ρ(t) — кинематическая вязкость;   Re = v·d/ν
1 — Альтшуль:      λ = 0,11 · (kэ/d + 68/Re)^0,25
2 — Никурадзе:     λ = 1 / (2·lg(d/kэ) + 1,14)²
3 — Шифринсон:     λ = 0,11 · (kэ/d)^0,25
4 — Колбрук–Уайт:  1/√λ = −2·lg( (kэ/d)/3,7 + 2,51/(Re·√λ) )   (итерации от λ Шифринсона)

Плотность: постоянная ρп = ρо = 0,975 т/м³ (подача при t > 79 °C, иначе обратка) либо полином по температуре (-ro_temp): ρ = 1,0004 − 2,757·10⁻⁵·t − 4,761·10⁻⁶·t² + 8,247·10⁻⁹·t³.

6.5. Задвижка

Сопротивление по условному диаметру Ду (мм) и степени открытия:

Fпр = π/4 · (Ду² / 100) · 0,95                 [см²], 0,95 — поправка на проходное сечение
ξ   = 0,35                                      (открыта)
ξ   = ξ(%открытия) по таблице                    (частично открыта)
kv  = 5,04 · Fпр / √ξ
S   = 10 / kv²

Таблица ξ по проценту открытия:

% 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95–100
ξ 1300 433,7 80,2 23,8 17,9 13,1 9,4 6,55 4,45 3,0 2,05 2,05 1,5 1,25 1,1 1,0 0,8 0,35

Правило выбора: берётся значение ближайшей табличной точки, меньшей заданного процента (консервативно): при 30 % — ξ точки 25 % (23,8), при 31 % — ξ точки 30 % (17,9). При ≥ 100 % — 0,35, при ≤ 10 % — 1300. Если диаметр задвижки не задан — сопротивление считается нулевым (10⁻²⁰).

Пример 2. Задвижка Ду300, открыта: Fпр = 671,5 см², kv = 5720,7, S = 3,056·10⁻⁷; при 300 т/ч потеря 0,028 м. Открыта на 30 % (ξ = 23,8): S = 2,078·10⁻⁵, потеря 1,87 м.

6.6. Байпас, диафрагма, регулирующая арматура

Байпас — как труба: диаметр d (умолчание 400 мм), длина L (умолчание 1 м), шероховатость (умолчание 0,5 мм), сумма местных сопротивлений:

λ = 1 / (4·(lg(3,715·d/kэ))²);   S = 6,94988·10⁶·λ/d⁵ · (L + d·Σξ/(λ·1000))

Дроссельная диафрагма (шайба) диаметром отверстия d0, мм, количество n:

S = 10⁴ · n / d0⁴                     (если d0 = 0, S = 1)

Это та же зависимость, что в формуле подбора шайбы d = 10·(G²/H)^(1/4) (Калькулятор дросселирования). Пример: шайба 60 мм, 30 т/ч → S = 7,72·10⁻⁴, гасит 0,69 м.

Регулирующая арматура (тип ZD2) — постоянный перепад:

H1 − H2 = r1 · sign(G)

6.7. Насос

Ветвь насоса повышает напор:

H2 − H1 = h                                   (задан постоянный напор h)
H2 − H1 = r0 + r1·G + r2·G²                   (задана характеристика H(Q), если h = 0)

Коэффициенты характеристики берутся из карточки насосного агрегата (реестр «Насосное оборудование»). Если поток через насос идёт против направления установки — в протоколе «Направление потока воды через насос … противоположно заданному»; если расход превышает пропускную способность — «Расход через насос … превышает его пропускную способность».

6.8. Обратный клапан, регуляторы

Обратный клапан:

  • открыт — идеальная ветвь без потерь: H1 = H2;
  • если расход стал отрицательным — клапан закрывается: уравнение G = 0;
  • закрытый клапан открывается снова, если напор перед ним выше, чем за ним, больше чем на 0,01 м;
  • не более 4 переключений одного клапана, далее он остаётся закрытым.

Регулятор давления (РД) поддерживает напор в «узле импульса» (nodeID, подача или обратка):

  • работающий регулятор даёт уравнение H(узла импульса) = Z + z;
  • после решения вычисляется его сопротивление S = (H1 − H2)/(G·|G|);
  • если S вышел за пределы [r1, r2] (r1 — минимальное сопротивление полностью открытого, r2 — максимальное, «протечка» закрытого), регулятор фиксируется на границе и в протоколе появляется «… не может обеспечить давление в узле …»;
  • допуск по напору — delta из карточки, иначе 0,01 м; не более 3 переключений; до 10 проходов.
  • Если регулятор не может управлять узлом (почти нулевой расход), он считается фиксированным сопротивлением.
  • Если новый метод не сошёлся, используется прежний итерационный подбор сопротивлений (сообщение «Регуляторы давления: расчёт с уравнениями регуляторов не сошёлся, использован итерационный подбор сопротивлений»).

Регулятор расхода (РР) поддерживает расход Z:

  • работающий: уравнение G = Z, сопротивление после решения S = (H1 − H2)/(Z·|Z|);
  • начальное состояние — полностью открыт (S = r1); в работу включается, только если открытый регулятор пропускает больше Z;
  • если даже открытый не обеспечивает Z — «… не может обеспечить заданный расход»;
  • допуск по расходу — delta из карточки, не меньше 0,1 % уставки и 0,01 т/ч; не более 4 переключений.

Байпас с заданным узлом импульса (nodeID > 0) работает как регулятор давления, без него — как регулятор расхода.

Сообщения «Не заданы макс. сопр. или относительная протечка регулятора … Значение берётся по умолчанию» означают, что в карточке регулятора не заполнены r1/r2 — заполните их (Частые ошибки и вопросы).

6.9. Узлы с заданным напором (ЗН)

В карточке «Заданный напор» указываются давление (напор) в подающем Pп и в обратном Pо трубопроводах, м. Как это попадает в модель:

задано и Pп, и Pо:  обратная вершина: H = Pо + z
                    между обратной и подающей вершинами — виртуальный насос с напором h = Pп − Pо
                    (это и есть располагаемый напор на выводах источника / в точке присоединения)
задано только Pо:   H(обр) = Pо + z
задано только Pп:   H(под) = Pп + z

Режим «Магистральный фрагмент». В карточке ЗН дополнительно задаются фрагмент магистрали (fragment_resultID), код и наименование узла на магистрали. При флажке Магистральный фрагмент напоры Pп, Pо (и температура подачи) берутся из последнего расчёта магистрального фрагмента в этом узле. Если фрагмент или узел не заданы или не найдены — протокол сообщает об этом, и расчёт идёт по заданному в карточке располагаемому напору.

Порядок: сначала рассчитайте магистраль, затем распределительные фрагменты с флажком «Магистральный фрагмент».

6.10. Утечки (дополнительная опция сервера)

При флаге нормируемых утечек (-zulu_utechki) к отбору каждого узла добавляется:

Gут = 0,25 % · V / 2,     V = Σ L · π · d² / 4    по примыкающим участкам, м³

(деление на 2 — каждый участок делится между двумя узлами). В веб-окне эта опция не выведена.

6.11. Что записывается по участкам (таблица ut_out)

Колонка Величина Формула
a7 Длина, м L
a8 Внутренний диаметр, мм d
a9 Объём воды, м³ V = 0,785·10⁻⁶ · d² · L · n
a10 Скорость, м/с `v = 353,86 ·
a11 Время прохождения, мин t = L / v / 60
a12 Полное сопротивление S
a13 Расход, т/ч G (знак — направление относительно линии)
a14 Удельные линейные потери, мм вод. ст./м R = (ΔHобщ − ΔHмест) / L · 1000
a15 Линейные потери, м ΔHобщ − ΔHмест
a16 Местные потери, м ΔHмест = G² · Sмест, где Sмест = s·L·δ или s·d·Σξ/(λ·1000)
a17 Общие потери, м `ΔHобщ =
a18 Располагаемый напор в конце, м Hп − Hо в конечном узле
a19 Пьезометрический напор в конце, м Hп в конечном узле (напор обратки = a19 − a18)
a20 Отметка в конце, м z
a21 Полный напор в конце, м Hп + z

Константа 353,86 = 4·10⁶/(π·3600): переводит т/ч и мм в м/с. Если |ΔH/(S·G²) − 1| > 0,01, в протокол пишется «Невязка …» — признак несошедшегося участка.

По узлам (us_out) пишутся пьезометрический напор pih и температура t для подающей (признак 1) и обратной (2) вершин, а также источник, от которого пришла вода (ist).

6.12. Типичные причины несходимости

Причина Как проявляется Что делать
Нет узла ЗН в подсети «Подсеть из N узлов…» Назначить ЗН или соединить подсеть
Участок с нулевым диаметром/длиной «Не задан внутренний диаметр в участке…» Заполнить паспорт
Регулятор без пределов r1/r2 «Не заданы макс. сопр. …» Заполнить карточку регулятора
Закрыт единственный путь от источника «Вода не течёт через источник…», нулевые расходы Проверить задвижки и состояния труб
Неверные единицы нагрузки (ккал/ч вместо Гкал/ч) Огромные расходы, «Невязка» Проверка «Качество данных» → нагрузка > 50 Гкал/ч

6.13. Проверка на реальных участках Алматы и Астаны

Чтобы убедиться, что формулы курса совпадают с тем, что считает программа, 24.10.2026 на стендах обоих городов взяты результаты последних расчётов по двум магистральным участкам и пересчитаны вручную:

Величина Астана, Ду 600 (dвн 610 мм, L 369,7 м, kэ 0,5, Σξ 1,0) Алматы, Ду 500 (dвн 518 мм, L 135,6 м, Σξ 4,8)
λ по формуле ТГИД 0,01870 0,01945
s = 6,94988·10⁶·λ/d⁵ 1,5388·10⁻⁹ —
S линейное = s·L 5,689·10⁻⁷ —
S местное = s·d·Σξ/(λ·1000) 5,02·10⁻⁸ 4,633·10⁻⁷
S полное (в карточке) 6,19086·10⁻⁷ 9,54782·10⁻⁷
G, т/ч 719,5 619,3
ΔH = S·G², м 0,3205 (в карточке 0,32049) 0,3662 (0,36617)
ΔH местные, м 0,0260 (0,0259849) 0,1777 (0,177696)
R, мм/м 0,797 (0,796606) 1,390 (1,38993)
v = 353,86·G/d², м/с 0,684 (0,684) 0,817 (0,817)
t = L/v/60, мин 9,005 (9,00522) 2,767 (2,76724)
V = 0,785·10⁻⁶·d²·L, м³ 107,99 (107,989) 28,562 (28,562)

Сумма коэффициентов местных сопротивлений, восстановленная из полного сопротивления, — 1,0 (Астана) и 4,8 (Алматы) — совпадает с полем «Местные сопротивления» паспорта.

Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо