Здесь приведена расчётная часть статьи о гидравлическом разделителе. Расчёты выполнены для схемы без гидравлического разделителя.
К - котёл, Н - насос, КП - коллектор прямой воды (горячая), КО - коллектор обратной воды (холодная), РБ - расширительный бак, Р - регулятор, П - потребитель тепловой энергии.
Так как гидравлический разделитель разделяет систему на изолирование участки, то для схемы с гидравлическим разделителем расчёт параметров каждого изолированного участка сводится к применению формулы (более подробно см. [1]):
$$\Delta p = RQ^2,$$где $\Delta p$ - ротери давления теплоносителя на границах участка; $R$ гидравлическое сопротивление участка; $Q$ - расход теплоносителя через участок.
import numpy as np
Q_п_0 = 1000 # Максимальная тепловая мощность одного потребителя, Вт
c_p = 4200 # Теплоёмкость воды, Дж/кг/К
t_пр = 80 # Температура прямой воды, С
t_обр = 60 # Температура обратной воды, С
dt = t_пр - t_обр
G_п_0 = Q_п_0 / c_p / dt # Максимальный расход через одну ветвь потребителя, кг/с
G_п_0, G_п_0 * 60, G_п_0 / 1000 * 3600 # кг/с, л/мин, м3/ч
(0.011904761904761904, 0.7142857142857142, 0.04285714285714285)
# Набор функция для получения начальных значений
# Возвращается список. Индекс 0 - котёл, 1, 2, 3 - потребители
def getGs_0():
# Максимальные расходы в ветках котла и потребителей, кг/с
Gs_0 = np.array([3 * G_п_0, G_п_0, G_п_0, G_п_0], dtype = float)
return Gs_0
def getdps_0():
# Потери давления в ветви котла и потребителей при максимальных расходах, м
# Совпадают со значениями напоров насосов в ветви котла и потребителей, м
dps_0 = np.array([5, 10, 10, 10], dtype = float)
return dps_0
def getRs_0():
# Гидравлические сопротивления веток котла и потребителей, м/((кг/c)^2)
Rs_0 = getdps_0() / getGs_0()**2
return Rs_0
Gs_0 = getGs_0() # расходы
Gs_0 # кг/с
array([0.03571429, 0.01190476, 0.01190476, 0.01190476])
Rs_0 = getRs_0() # гидравлические сопротивления
Rs_0 # м/(кг/с)^2
array([ 3920., 70560., 70560., 70560.])
R_к = Rs_0[0] # Сопротивление котла
Hs_0 = getdps_0() # Напоры насосов
Hs_0 # м
array([ 5., 10., 10., 10.])
#Функция для передачи в процедуру root.
#Возвращающает результат вычисления входящих в систему уравнений выражений
#для переданных значений расходов Gs. Если Gs - решение системы уравнений,
#то функция возвращает список из четырёх нулей.
def calcGs(Gs):
res=[]
for i in range(1, len(Gs)):
res.append(Hs[0] - Rs[0] * Gs[0] * Gs[0] + Hs[i] - Rs[i] * Gs[i] * Gs[i])
res.append(Gs[0] - sum(Gs[1:]))
return res
#Функция для передачи в процедуру root.
#Возвращающает результат вычисления входящих в систему уравнений выражений
#для переданных значений гидравлических сопротивлений потребителей Rs_п.
#Если Rs_п - решение системы уравнений,то функция возвращает список из трёх нулей.
def calcRs(Rs_п):
res=[]
for i in range(1, len(Rs_п)+1):
res.append(Hs[0] - R_к * Gs[0] * Gs[0] + Hs[i] - Rs_п[i-1] * Gs[i] * Gs[i])
return res
from scipy.optimize import root
Hs = getdps_0()
Rs = getRs_0()
# Увеличим сопротивление ветви первого потребителя в четыре раза
Rs[1] *= 4
sol = root(calcGs, Gs_0) # поиск решения
sol.x/Gs_0 # Относительные значения расходов G/G0
array([0.87931557, 0.52758934, 1.05517869, 1.05517869])
Найдём значения гидравлических сопротивлений ветвей потребителей при которых расход через первую ветвь будет в два раза меньше максимального, а расходы в остадьных двух ветвях не изменятся.
Rs_п = getRs_0()[1:] # Первое приближение сопротивлений
Gs = getGs_0()
Gs[1] *= 0.5 # расход в ветви 1 составляет 50% от максимального
Gs[0] = sum(Gs[1:]) # расход через котёл (суммарный расход через потребителей)
sol = root(calcRs, Rs_п)
sol.x/Rs_0[1:] # значения относительных сопротивлений
array([4.61111111, 1.15277778, 1.15277778])
# Относительный расход в ветви потребителей 1 должен быть 50%, в остальны двух - 100%.
Rs = [R_к] + list(sol.x)
sol = root(calcGs, getGs_0())
sol.x/Gs_0
array([0.83333333, 0.5 , 1. , 1. ])
2.5/3 # относительный расход через котёл при относительных расходах через потребители [0.5, 1, 1]
0.8333333333333334
Hs = getdps_0() # корректные напоры нассосов, м
Rs = getRs_0() # начальные значения гидравлических сопротивлений
Hs[1] *= 4 # увеличиваем напор насоса в ветви потребителя 1 в 4 раза
sol = root(calcGs, Gs_0)
sol.x/Gs_0 # Относительные значения расходов G/G0
array([1.22354117, 1.93687209, 0.86687571, 0.86687571])
Hs = getdps_0() # корректные напоры нассосов, м
Hs[1] /= 4 # уменьшаем напор насоса в ветви потребителя 1 в 4 раза
sol = root(calcGs, Gs_0)
sol.x/Gs_0 # Относительные значения расходов G/G0
array([0.89571638, 0.59063194, 1.0482586 , 1.0482586 ])
# Предполагается, что отключённый насос имеет нулевое гидравличекское сопротивление
Hs[1] = 0
sol = root(calcGs, Gs_0)
sol.x/Gs_0 # Относительные значения расходов G/G0
array([0.84119102, 0.38235956, 1.07060676, 1.07060676])
Hs = getdps_0() # корректные напоры нассосов, м
Rs[1] *= 1e20 # отключение ветки 1 путём задания огромного значения гидравличкого сопротивления
sol = root(calcGs, Gs_0)
sol.x/Gs_0 # Относительные значения расходов G/G0
array([7.38548916e-01, 1.10782342e-10, 1.10782333e+00, 1.10782342e+00])
где $P$ - электрическая мощность, потребляемая насосным агрегатом (насос + электродвигатель), Вт; $\rho$ - плотность теплоносителя, $м^3/ч$; $g = 9.81\ м/с^2$ - ускорение свободного падения; $q$ - расход теплоносителя, $м^3/с$; $H$ - напор, м; $\eta$ - КПД насосного агрегата.
dens = 1000 # плотность воды, кг/м3
g = 9.81 # ускорение свободного падения, м/с2
КПД = 0.4 # КПД насосного агрегата
Hs = getdps_0()
Hs # напор насосов, м
array([ 5., 10., 10., 10.])
Gs = getGs_0()
qs = Gs / dens # перевод кг/с в м3/с
qs
array([3.57142857e-05, 1.19047619e-05, 1.19047619e-05, 1.19047619e-05])
# Электрическая мощность насосного агрегата
Ps = dens * g * Hs * qs / КПД
Ps # Вт
array([4.37946429, 2.91964286, 2.91964286, 2.91964286])
sum(Ps) # Суммарная электрическая мощность насосных агрегатов, Вт
13.138392857142854
Инженерные расчёты на Python, С.В. Медведев, 2020-2022
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2022