Имеются два атмосферных бака: А и Б. Из бака А необходимо периодически перекачивать воду в бак Б.
Перекачка начинается при достижении в баке А уровня воды $z_A^{max}$ и заканчивается при уровне $z_A^{min}$. Входной штуцер бака Б находится на высоте $z_Б^{max}$, $z_A$, $z_Б$ - отметки (например, относительно уровня моря) дна бака А и Б соответственно, м.
Примем:
z_А = 25 # отметка дна бака А относительно уровня моря, м
z_Б = 27 # отметка дна бака Б относительно уровня моря, м
z_А_max = 10 # уровень воды в баке А при котором начинается откачка, м
z_А_min = 1 # уровень воды в баке А при котором заканчивается откачка, м
z_Б_max = 17 # отметка входного штуцера бака Б, м
Производительность насоса $Q$ выбирается исходя из времени, за которое необходимо откачать воду из бака А в бак Б. Примем:
Q = 50 # производительность насоса, м3/ч
Баки соединяются трубопроводом. Внутренний диаметр трубопровода выбирается таким образом, чтобы скорость потока внутри трубопровода находилась в диапазоне [1,5; 3,0] м/с. Чем больше диаметр трубопровода (меньше скорость потока) тем выше капитальные затраты, но тем ниже потери давления в трубопроводе, а значит, меньше потребление электроэнергии электродвигателем насоса.
Т.к. откачка воды будет производиться периодически, то пойдём по пути снижения капитальных затрат и из рекомендуемого диапазона скоростей возьмём верхнее значение.
from math import pi, sqrt
w = 3 # целевое значение скорости потока, м/с
F = Q / 3600 / w # целевое значение площади внутреннего сечения трубы
d = sqrt(4 * F / pi) # внутренний диаметр трубы (м) при котором скорость потока составит w при объёмном расходе Q
d
0.07677647766029677
Толщина стенки трубы выбирается исходя из соображений сохранения прочности в течение всего срока эксплуатации трубопровода в заданных условиях.
Диаметры труб и толщины стенок не могут быть произвольными, а выбираются из номенклатурного ряда, предлагаемого производителями труб. В нашем случае выберем трубу 89х3,5.
D = 89; h = 3.5 # внешний диаметр трубопровода и толщина стенки, мм
d = (D - 2 * h) * 1e-3 # внутренний диаметр, м
d
0.082
Примем, что трубопровод, соединяющий бак А и Б состоит из следующих элементов: 150 м трубы, 16 отводов 90 градусов, 4 отвода 45 градусов, два запорных вентиля перед и за насосом.
L = 150 # обшая длина труб, м
n_elb90 = 16 # количесто отводов 90 градусов
n_elb45 = 4 # количесто отводов 45 градусов
n_sv = 2 # количесто отводов запорных вентелей
Для выбора параметров насоса необходимо определить граничные условия, при которых насос будет эксплуатироваться в течение всего срока его службы. Зададимся следующими величинами:
Delta_new = 0.1e-3 # шероховатость внутренних стенок новых труб, м
Delta_old = 0.3e-3 # шероховатость внутренних стенок старых труб, м
dz_max = (z_Б + z_Б_max) - (z_А + z_А_min) # максимальная высота подъёма воды (бак А пустой)
dz_min = (z_Б + z_Б_max) - (z_А + z_А_max) # минимальная высота подъёма воды (бак А полный)
dz_max, dz_min
(18, 9)
Для нахождения потерь давления в трубопроводе воспользуемся модулем hydrcalc
[1].
import sys
sys.path.append("../0026_Гидр_расч_трубопровода")
from hydrcalc import ppln_get_defs, ppln_calc_dH
def get_elems():
#Формируем список элементов трубопровода
enter = {'type': 'lrc', 'value': 0.5} #вход в трубопровод из бака
pipe = {'type': 'pipe', 'qty': L} # труба суммарной длиной L
elbow90 = {'type': 'elbow', 'qty': n_elb90} # отвод 90 градусов
elbow45 = {'type': 'elbow', 'deg': 45, 'qty': n_elb45} # отвод 45 градусов
stop_valve = {'type': 'Kv', 'value': 120, 'qty': n_sv} # запорный вентиль, Kv = 120 м3/ч
exit = {'type': 'lrc', 'value': 1} #выход из трубопровода
elems =[enter, pipe, elbow90, elbow45, stop_valve, exit]
return elems
defs = ppln_get_defs(d)
defs
{'D': 0.082, 'Delta': 0.0002, 'kvisc': 1e-06, 'deg': 90, 'RD': 1.5, 'qty': 1}
elems = get_elems()
defs['Delta'] = 0.1e-3 # шероховатость 0,1 мм - новые трубы
dHs_new = ppln_calc_dH(Q, elems, **defs)
dHs_new # потери давления в каждом элементе нового трубопровода
[0.1763271418625483, 14.043254095479462, 2.240215934995174, 0.3287970080898642, 3.5406812950622597, 0.3526542837250966]
dH_new = sum(dHs_new)
dH_new # суммарные потери давления в новом трубопроводе
20.681929759214405
elems = get_elems()
defs['Delta'] = 0.3e-3 # шероховатость 0,3 мм - старые трубы
dHs_old = ppln_calc_dH(Q, elems, **defs)
dHs_old # потери давления в каждом элементе старого трубопровода
[0.1763271418625483, 18.215840943834177, 2.326208142316697, 0.3395460340050545, 3.5406812950622597, 0.3526542837250966]
dH_old = sum(dHs_old)
dH_old # суммарные потери давления в старом трубопроводе
24.951257840805834
Теперь построим характеристики трубопровода (гидравлической сети) для различных условий работы. Для нахождения характеристики трубопровода используем класс Pipeline
(см. [2])
from pipeline import Pipeline
ppln_new = Pipeline(Q, dH_new) # характеристика нового трубопровода
ppln_old = Pipeline(Q, dH_old) # характеристика старого трубопровода
Самый благоприятный режим работы насоса (максимальная производительность): новые трубы, бак А полон.
Самый неблагоприятный режим работы насоса (минимальная производительность): старые трубы, бак А пустой.
# точки для построения левой границы (самый неблагоприятный режим работы насоса)
Qs_l, Hs_l = ppln_old.get_curve(0, 70, dz_max)
# точки для построения правой границы (самый благоприятный режим работы насоса)
Qs_r, Hs_r = ppln_new.get_curve(0, 70, dz_min)
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
ax.grid(); ax.set_xlim(0,70); ax.set_ylim(0,60)
ax.plot(Qs_l, Hs_l, label = "Мин. уровень в баке А + старые трубы")
ax.plot(Qs_r, Hs_r, label = "Макс. уровень в баке А + новые трубы")
ax.set_xlabel('$Q,\, м^3/ч$'); ax.set_ylabel('$H,\, м$')
ax.legend();
Рабочая точка насоса в середине срока его службы должна находиться посредине между границами. Значение подачи насоса нам известно: 50 $м^3/ч$, необходимо определиться с его напором, найдя значения $H$ для обеих кривых при $Q = 50\, м^3/ч$ и расчитав среднее значение.
H_l = ppln_old.dH_Q(Q, dz_max) # напор при Q = 50 для левой границы
H_r = ppln_new.dH_Q(Q, dz_min) # напор при Q = 50 для правой границы
H_m = (H_r + H_l) / 2
H_m # напор насоса в середине срока его службы при среднем уровне воды в баке А
36.316593800010125
С течением времени рабочая (напорная) характеристика насоса деградирует. Если новый насос при подаче $Q$ развивает напор $H$, то насос в конце срока своей службы при подаче $Q$ развивает напор $deg \cdot H$, где $deg$ - степень деградации рабочей характеристики насоса. Для нашего случая примем, что степень деградации рабочей характеристики насоса к концу срока его службы составляет 0,9. Значит в середине срока службы насоса степень деградации составит 0,95. Таким образом, напор нового насоса должен быть равен:
H = H_m / 0.95
H
38.22799347369487
Для надёжности за границы допустимого рабочего диапазона насоса примем линии, полученные из характеристик сети для рассмотренных крайних случаев, смещённые по оси производительности на 10% влево и вправо соответственно.
import numpy as np
Qs_l = np.array(Qs_l) * 0.9
Qs_r = np.array(Qs_r) * 1.1
fig, ax = plt.subplots(figsize = (10,5))
ax.grid(); ax.set_xlim(0,70); ax.set_ylim(0,60)
ax.plot(Qs_l, Hs_l, label = "Левая граница рабочего диапазона насоса")
ax.plot(Qs_r, Hs_r, label = "Правая граница рабочего диапазона насоса")
ax.plot(Q, H, 'o', label = "Рабочая точка насоса")
ax.set_xlabel('$Q,\, м^3/ч$'); ax.set_ylabel('$H,\, м$')
ax.legend();
Рабочая характеристика насоса должна проходить через точку $Q = 50\,м^3/ч$, $H = 38\,м$ и рабочий диапазон характеристики должен пересекать обе границы. В этом случае рабочая точка насоса будет находиться внутри рабочего диапазона в течение всего срока службы насоса при любом уровне воды в баке А и средняя скорость перекачки жидкости составит около 50 $м^3/ч$. Если рабочая характеристика пройдёт выше заданной рабочей точки, то средняя скорость перекачки воды в течение всего срока службы насоса будет больше 50 $м^3/ч$, если ниже - то меньше 50 $м^3/ч$.
Следует заметить, что если рабочий диапазон насоса не доходит до правой границы, то при новых трубах и максимальном уровне в баке А электродвигатель насоса будет потреблять электрическую мощность больше допустимого значения, что приведёт к его перегреву.
Так же не стоит забывать о проверке располагаемого кавитационного запаса системы [3].
Инженерные расчёты на Python, С.В. Медведев, 2020
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020