В данной статье приведён пример использования класса ControlValve
(скачать) для расчёта характеристик регулирующего клапана (РК), в котором (в том числе) реализованы расчётные формулы, приведённые в [1], [2], [3].
РК характеризуется значением условной (максимальной) пропускной способности $K_{Vs}$, видом пропускной характеристики и относительной начальной пропускной способностью $\Phi_0$.
В данной методике рассматриваются следующие виды пропускной характеристики:
$Q$ - объёмный расход, $м^3/ч$.
$K_V(\bar{h})$ - пропускная способность, $м^3/ч$ - значение, равное расходу жидкости плотностью 1000 $кг/м^3$, протекающей через клапан при положении штока $\bar{h}$ и перепаде давления на нём 0,1 МПа (1,0 $кгс/см^2$).
$K_{Vs}$ - условная (максимальная) пропускная способность, $м^3/ч$ (при $\bar{h} = 1$).
$\bar{h}$ - относительное положение штока РК, $\bar{h} = [0; 1]$.
$\Phi_0 \equiv \bar{K}_{V0} = K_{V0}/K_{Vs}$ - относительная начальная пропускная способность.
$K_{V0}$ - начальная пропускная способность, $м^3/ч$ - Пропускная способность, задаваемая для построения пропускной характеристики при $\bar{h} = 0$.
$K_{Vmin}$ - минимальная пропускная способность, $м^3/ч$ - Наименьшая пропускная способность, при которой сохраняется пропускная характеристика в допускаемых пределах.
В данной методике принято $K_{V0} \equiv K_{Vmin}$. В этом случае $\Phi_0$ является обратной величиной диапазона регулирования $Д=K_{Vs}/K_{Vmin}$.
from controlvalve import ControlValve # Загрузка класса ControlValve
help(ControlValve.__init__) # Описание входных параметров, передаваемых в конструктор класса ControlValve
Help on function __init__ in module controlvalve: __init__(self, Kv=1.0, fc_type=0, F0=0.0, h=1.0, density=998.2) Kv: требуемая пропускная способность РК (по умолчанию Kv=1) при заданном положении штока h fc_type: flow characteristic type - вид пропускной характеристики 0 - линейная (по умолчанию), 1 - равнопроцентная, 2 - параболическая F0: относительная начальная пропускная способность при положении штока РК h = 0 (F0 = Kv0/Kvs). По умолчанию F0=0. h: относительное положения штока РК (0;1], при котором значение пропускной способности равно Kv. По умолчанию h=1. density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С.
Kvs = 200.; F0 = 1/50; h = 1; density = 998.2;
# Создаём объект класса ControlValve
cv = ControlValve(Kvs, 1, F0, h, density) # выберем равнопроцентную пропускную характеристику
cv.set_h(0.4) # зададим относительное положение штока (при создании объекта задаётся h = 1)
# При вызове метода set_h вычисляются Kv (пропускная способность) и R(гидравлическое сопротивление),
# значения которых можно узнать с помощью методов get_Kv() и get_R() соответственно.
print(f"Kv={cv.get_Kv()} м3/ч; R={cv.get_R()} Па*ч^2/м^6" )
Kv=19.12704999580074 м3/ч; R=272.8485055525451 Па*ч^2/м^6
# Метод h_from_Kv - определение значения h по значению Kv
help(cv.h_from_Kv)
Help on method h_from_Kv in module controlvalve: h_from_Kv(Kv) method of controlvalve.ControlValve instance Определение положения штока h = [0; 1] при котором РК будет иметь заданный Kv Kv: пропускная способность, м3/ч
cv.h_from_Kv(Kvs*F0), cv.h_from_Kv(19.12704999580074), cv.h_from_Kv(Kvs)
(0.0, 0.39999999999999997, 1.0)
help(cv.dp_from_Q)
Help on method dp_from_Q in module controlvalve: dp_from_Q(Q) method of controlvalve.ControlValve instance Возвращает значение перепада давления на РК, Па Q: Расход через РК, м3/ч
cv.dp_from_Q(Kvs)
10913940.222101804
help(cv.Q_from_dp)
Help on method Q_from_dp in module controlvalve: Q_from_dp(dp) method of controlvalve.ControlValve instance Определение объёмного расхода (м3/ч) по перепаду давления на РК (Па) dp: Падение давления на РК, Па
cv.Q_from_dp(10913940.222101804)
200.0
Движение рабочей среды по участку трубопровода возможно только при наличии разницы давления в начале и в конце рассматриваемого участка. Отношение перепада давления на РК к перепаду давления на регулируемом участке (без учёта нивелирной составляющей) называется авторитетом РК.
$m = \Delta p_{рк}/\Delta p$
$m$ - авторитет РК, $\Delta p_{рк}$ - перепад давления на РК, $\Delta p$ - перепад давления (без учёта нивелирной составляющей) на регулируемом участке с учётом потерь давления в РК.
#Получить данные для построения расходную и пропускную характеристик можно с помощью метода get_char
help(cv.get_char)
Help on method get_char in module controlvalve: get_char(Q, m=1, h=1.0, n=51) method of controlvalve.ControlValve instance Расчёт данных для построения расходной характеристики При построении расходной характеристики предполагается, что перепад давления на регулируемом участке не зависит от расхода Q: номинальный расход (м3/ч) при заданных m и h m: авторитет РК при номинальном расходе (по умолчанию m=1) h: положение штока РК (по умолчанию h=1) при котором РК имеет авторитет m и через него проходит расход Q n: количество точек представления характеристики (по умолчанию 51)
Q_nom = 200 # номинальный расход, м3/ч
m = 0.1 # авторитет РК с h=1 с заданным Kvs при номинальном расходе
hs, Qs, ms = cv.get_char(Q_nom, m)
qs = Qs / Q_nom # относительный расход, чтобы отобразить Q и m на одном графике
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("РК с равнопроцентной пропускной характеристикой, $\Phi_0=1/50$")
ax.grid(); ax.set_xlim(0,1); ax.set_ylim(0,1)
ax.plot(hs, qs, label = "Расходная характеристика")
ax.plot(hs, ms, label = "Авторитет РК")
ax.set_xlabel('$\overline{h}$'); ax.set_ylabel('$\overline{Q}$, $m$')
ax.legend();
# Пропускная характеристика - это частный случай расходной характеритики при авторитете РК m=1 и Q = Kvs
hs, Qs_1, _ = cv.get_char(Kvs, 1)
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("РК с равнопроцентной пропускной характеристикой, $\Phi_0=1/50$")
ax.grid(); ax.set_xlim(0,1); ax.set_ylim(0,Kvs)
ax.plot(hs, Qs, label = "Расходная характеристика")
ax.plot(hs, Qs_1, label = "Пропускная характеристика")
ax.set_xlabel('$\overline{h}$'); ax.set_ylabel('$K_V,\ м^3/ч$');
ax.legend();
Предположим, нам нужно подобрать РК для регулирования расхода рабочей среды в линии.
Q = 100 # номинальный расход рабочей среды через рассматриваемый участок, м3/ч
dp = 1e5 # потери давления на рассматриваем участке (Па) при расходе Q без учёта
# нивелирной составляющей и падении давления на РК
Примем следующие параметры РК:
F0 = 1 /50; h0 = 0.9; m = 0.1
С помощью статического метода Kv_from_m_dp_Q
найдём значение $K_V$, при котором при заданных условиях расход через РК будет равен $Q$ при авторитете РК $m$.
help(ControlValve.Kv_from_m_dp_Q)
Help on function Kv_from_m_dp_Q in module controlvalve: Kv_from_m_dp_Q(m, dp, Q, density=998.2) Расчёт Kv для заданных значений авторитета РК, перепада давления на регулируемом участке и объёмного расхода m: авторитет клапана (0; 1], m = dp_cv/(dp + dp_cv), dp_cv - перепад давления на РК, Па dp: перепад давления на регулируемом участке без учёта нивелирной состовляющей и потери давления в РК , Па Q: расход через регулируемый участок, м3/ч density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С
Kv = ControlValve.Kv_from_m_dp_Q(m, dp, Q)
Kv # м3/ч
299.72987839052684
Если бы $\bar{h}_0 = 1$, то на этом можно было бы и остановиться, выбрав РК с $K_{Vs}$ выше найденного $K_{V}$.
Но в нашем случае условия заданы для $\bar{h}_0 = 0.9$. В этом случае следует использовать статический метод Kvs_from_m_dp_Q_h
.
Найдём требуемое значение $K_{Vs}$ РК для заданных условий для всех трёх видов пропускной характеристики.
help(ControlValve.Kvs_from_m_dp_Q_h)
Help on function Kvs_from_m_dp_Q_h in module controlvalve: Kvs_from_m_dp_Q_h(m, dp, Q, h=1.0, fc_type=0, F0=0.0, density=998.2) Вычисление Kvs для заданных значений авторитета РК, перепада давления на регулируемом участке, объёмного расхода и положения штока m: авторитет клапана (0; 1], m = dp_cv/dp, dp_cv - перепад давления на РК, Па dp: перепад давления на регулируемом участке без учёта нивелирной составляющей и потери давления в РК , Па Q: расход через РК, м3/ч h: относительное положение штока РК (0;1] fc_type: вид пропускной характеристики 0 - линейная (по умолчанию), 1 - равнопроцентная, 2 - параболическая F0: относительная начальная пропускной способность, F0 = Kv0 / Kvs density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С
Kvss = []
Kvss.append(ControlValve.Kvs_from_m_dp_Q_h(m, dp, Q, h0, 0, F0))
Kvss.append(ControlValve.Kvs_from_m_dp_Q_h(m, dp, Q, h0, 1, F0))
Kvss.append(ControlValve.Kvs_from_m_dp_Q_h(m, dp, Q, h0, 2, F0))
Kvss
[332.29476539969716, 443.22784659566736, 368.309017437364]
Из результатов расчёта видно, что для достижения заданного условия - расход $Q$ и авторитет РК $m = 0.1$ при $\bar{h} = \bar{h}_0$, РК с различными видами пропускных характеристик должны иметь различные значения $K_{Vs}$.
# Создаём объекты класса ControlValve с различными пропускными характеристиками
# расходная характеристика которых проходит через точку (h = 0,9; Q = 100)
cvs = [ControlValve(Kv, 0, F0, h0), ControlValve(Kv, 1, F0, h0), ControlValve(Kv, 2, F0, h0)]
titles = ["Линейная", "Равнопроцентная", "Параболическая"]
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("Расходные характеристики РК с различными видами пропускных\nхарактеристик"
" при заданной режимной точке ($\overline{h}_0 =$" + f"{h0}" + f", Q={Q}" + " $м^3/ч$)")
ax.grid(); ax.set_xlim(0,1); ax.set_ylim(0,105 )
for i, cv in enumerate(cvs):
hs, Qs, _ = cv.get_char(Q, m, h0)
ax.plot(hs, Qs, label = titles[i])
ax.set_xlabel('$\overline{h}$'); ax.set_ylabel('$Q,\ м^3/ч$')
ax.legend();
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("Пропускные характеристики РК")
ax.grid(); ax.set_xlim(0,1); ax.set_ylim(0,max(Kvss))
for i, cv in enumerate(cvs):
hs, Qs, _ = cv.get_char(Kv, 1, h0)
ax.plot(hs, Qs, label = titles[i])
ax.set_xlabel('$\overline{h}$'); ax.set_ylabel('$K_V,\ м^3/ч$')
ax.legend();
#Kvs РК с линейной, равнопроцентной и параболической пропускными характеристиками
cvs[0].Kvs, cvs[1].Kvs, cvs[2].Kvs
(332.29476539969716, 443.22784659566736, 368.309017437364)
# Полный перечень методов класса ControlValve
help(ControlValve)
Help on class ControlValve in module controlvalve: class ControlValve(builtins.object) | ControlValve(Kv=1.0, fc_type=0, F0=0.0, h=1.0, density=998.2) | | Объект 'Регулирующий клапан (РК)' | РК характеризуется значением Kvs, видом пропускной характеристики и относительной начальной пропускной способностью | Пропускная характеристика может быть: | 1. Линейной Q = Kvs * (F0 + (1-F0)*h) | 2. Равнопроцентной Q = Kvs * F0 * exp(n*h); F0 = 1/exp(n); n = ln(1/F0); Q = Kvs* F0^(1-h) | 3. Параболической Q = Kvs * (F0 + (1-F0)*h*h) | Q - расход, м3/ч | Kv - пропускная способность, м3/ч - значение, равное расходу жидкости плотностью 1000 кг/м3, протекающей | через клапан при положении штока h и перепаде давления на нем 0,1 МПа (1,0 кгс/см2). | h - относительное положение штока, h = [0; 1] | Kvs - условная (максимальная) пропускная способность, м3/ч (при h = 1) | F0 = Kv0/Kvs - относительная начальная пропускная способность | Kv0 - начальная пропускная способность, м3/ч - Пропускная способность, задаваемая для построения пропускной | характеристики при h = 0 | Kvmin - минимальная пропускная способность, м3/ч - Наименьшая пропускная способность, | при которой сохраняется пропускная характеристика в допускаемых пределах. | В данном расчёте принято Kv0 эквивалентно Kvmin | См. так же: | ГОСТ 12893-2005 Клапаны регулирующие односедельные, двухседельные и клеточные. Общие технические условия | | Methods defined here: | | Q_from_dp(self, dp) | Определение объёмного расхода (м3/ч) по перепаду давления на РК (Па) | dp: Падение давления на РК, Па | | __init__(self, Kv=1.0, fc_type=0, F0=0.0, h=1.0, density=998.2) | Kv: требуемая пропускная способность РК (по умолчанию Kv=1) при заданном положении штока h | fc_type: flow characteristic type - вид пропускной характеристики 0 - линейная (по умолчанию), | 1 - равнопроцентная, 2 - параболическая | F0: относительная начальная пропускная способность при положении штока РК h = 0 (F0 = Kv0/Kvs). | По умолчанию F0=0. | h: относительное положения штока РК (0;1], при котором значение пропускной способности равно Kv. | По умолчанию h=1. | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С. | | dp_from_Q(self, Q) | Возвращает значение перепада давления на РК, Па | Q: Расход через РК, м3/ч | | get_Kv(self) | Возвращает значение пропускной способности Kv для текущего h, м3/ч | | get_R(self) | Возвращает значение гидравлического сопростивления РК R=dp/Q/Q для текущего h, Па*ч^2/м^6 | | get_char(self, Q, m=1, h=1.0, n=51) | Расчёт данных для построения расходной характеристики | При построении расходной характеристики предполагается, что перепад давления на регулируемом участке не | зависит от расхода | Q: номинальный расход (м3/ч) при заданных m и h | m: авторитет РК при номинальном расходе (по умолчанию m=1) | h: положение штока РК (по умолчанию h=1) при котором РК имеет авторитет m и через него проходит расход Q | n: количество точек представления характеристики (по умолчанию 51) | | h_from_Kv(self, Kv) | Определение положения штока h = [0; 1] при котором РК будет иметь заданный Kv | Kv: пропускная способность, м3/ч | | h_from_dp_cv_Q(self, dp_cv, Q) | Определение положения штока h = [0; 1] при котором перепад давления на РК будет dp при расходе Q | dp_cv: заданный перепад давления на РК, Па | Q: объёмный расход, м3/ч | | set_h(self, h) | Установка значения положения щтока РК | h: положение штока [0;1] | | ---------------------------------------------------------------------- | Static methods defined here: | | Kv2R(Kv, density=998.2) | Определение гидравлического сопротивления (Па*ч^2/м^6) по пропускной способности Kv | Kv: пропускная способность, м3/ч | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С | | Kv_ep_flow_char(Kvs, F0, h) | Расчёт Kv для равнопроцентной проходной характеристики | Kvs: условная (максимальная) пропускная способность РК, м3/ч | F0: относительная начальная пропускной способность, F0 = Kv0 / Kvs | h: положение штока РК [0;1] | | Kv_from_dp_cv_Q(dp_cv, Q, density=998.2) | Определение Kv для заданных значений падения давления на РК и объёмного расхода | dp_cv: заданный перепад давления на РК, Па | Q: расход через РК, м3/ч | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С | | Kv_from_m_dp_Q(m, dp, Q, density=998.2) | Расчёт Kv для заданных значений авторитета РК, перепада давления на регулируемом участке и объёмного расхода | m: авторитет клапана (0; 1], m = dp_cv/(dp + dp_cv), dp_cv - перепад давления на РК, Па | dp: перепад давления на регулируемом участке без учёта нивелирной состовляющей и потери давления в РК , Па | Q: расход через регулируемый участок, м3/ч | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С | | Kv_lin_flow_char(Kvs, F0, h) | Расчёт Kv для линейной проходной характеристики | Kvs: условная (максимальная) пропускная способность РК, м3/ч | F0: относительная начальная пропускной способность, F0 = Kv0 / Kvs | h: положение штока РК [0;1] | | Kv_par_flow_char(Kvs, F0, h) | Расчёт Kv для параболической проходной характеристики | Kvs: условная (максимальная) пропускная способность РК, м3/ч | F0: относительная начальная пропускной способность, F0 = Kv0 / Kvs | h: положение штока РК [0;1] | | Kvs_from_m_dp_Q_h(m, dp, Q, h=1.0, fc_type=0, F0=0.0, density=998.2) | Вычисление Kvs для заданных значений авторитета РК, перепада давления на регулируемом участке, объёмного | расхода и положения штока | m: авторитет клапана (0; 1], m = dp_cv/dp, dp_cv - перепад давления на РК, Па | dp: перепад давления на регулируемом участке без учёта нивелирной составляющей и потери давления в РК , Па | Q: расход через РК, м3/ч | h: относительное положение штока РК (0;1] | fc_type: вид пропускной характеристики 0 - линейная (по умолчанию), 1 - равнопроцентная, 2 - параболическая | F0: относительная начальная пропускной способность, F0 = Kv0 / Kvs | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С | | R2Kv(R, density=998.2) | Определение значения пропускной способности (м3/ч) по значению гидравлического сопротивления | R: гидравлическое сопротивленияе, Па*ч^2/м^6 | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С | | dH2dp(dH, density=998.2) | Перевод перепада давления из метров столба жидкости в Па | dH: перепад давления, метры столба жидкости | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С. | | dp2dH(dp, density=998.2) | Перевод перепада давления из Па в метры столба жидкости | dp: перепад давления, Па | density: плотность среды, кг/м3. По умолчанию - плотность воды при температуре 20 С. | | dp_from_Kv_Q(Kv, Q, density=998.2) | Расчёт перепада давления на РК (Па) с пропускной способностью Kv при расходе Q | Kv: пропускная способность, м3/ч | Q: объёмный расход, м3/ч | | ep_F02n(F0) | Определение степени равнопроцентной характеристики по значению относительной начальной пропускной способности | F0: относительная начальная пропускной способность, F0 = Kv0 / Kvs | | ep_n2F0(n) | Определение относительной начальной пропускной способности по значению степени равнопроцентной характеристики | n: степень равнопроцентной характеристики | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
Инженерные расчёты на Python, С.В. Медведев, 2020-2021
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2021