КУ - котёл-утилизатор, ГТУ - газотурбинная установка
Известные величины:
$G^{уг}$ - массовый расход уходящих газов ГТУ, кг/с;
$t^{уг}_0$ - температура уходящих газов ГТУ (на входе в КУ), С;
$p^{пв}_0$ - давление пара на выходе из КУ, Па.
Задаваемые величины:
$\Delta t_0 = t^{уг}_0 - t^{пв}_0$ - температурный напор на входе (по газам) в КУ, C;
$\Delta t_2 = t^{уг}_2 - t^{пв}_2$ - температурный напор на холодном конце испарителя (пинч поинт), C;
$\delta p_0$, $\delta p_1$, $\delta p_2$ - относительные потери давления в пароводяном тракте в пароперегревателе, испарителе, экономайзере ($p_{i+1} = p_i/(1 - \delta p_i)$, $i=0\dots 2$), Па;
$\phi_{ку}$ - коэффициент сохранения теплоты в КУ;
$c_p^{уг}$ - удельная теплоёмкость уходящих газов при постоянном давлении, кДж/кг/K. При коэффециенте избытка воздуха в камере сгорания ГТУ $\alpha = 3$ удельная теплоёмкость продуктов горения газового топлива $c_p^{уг} = 1037$ Дж/кг/К (см. [1]).
Искомые величины:
$D^{пв}$ - массовый расход генерируемого в КУ пара, кг/с;
$Q^{уг} = Q^{уг}_3$ - тепло, отданное уходящими газами пару/воде в КУ, Вт;
$Q^{пв} = Q^{уг} \phi_{ку}$ - тепло, полученное паром/водой в КУ;
$t^{уг}_3$ - температура уходящих газов на выходе из КУ;
$\eta_{ку}$ - КПД КУ.
import numpy as np
fi_ку = 0.995 # коэффициент сохранения теплоты в КУ
dt_уг = 30 # температурный напор на входе в КУ
dt_и = 10 # температурный напор на холодном конце испарителя
dps = np.array([0., 0., 0.]) # потери давления в долях
Параметры уходящих газов возьмём для ГТЭ-25П (разработчик – АО «ОДК-Авиадвигатель»):
G_уг = 76.7 # массовый расход уходящих газов ГТУ, кг/с
t_уг = 473 # температура уходящих газов ГТУ, C
cp_уг = 1037 # изобарная теплоёмкость уходящих газов ГТУ (к-нт избытка воздуха равен 3, см. [1]), Дж/кг/К
p_пп = 20e5 # давление пара да выходе из пароперегревателя КУ, Па
t_к = 45 # температура конденсата/воды на входе в КУ, C
from hrsg1p import HRSG1p
help(HRSG1p)
Help on class HRSG1p in module hrsg1p: class HRSG1p(builtins.object) | HRSG1p(G_уг, t_уг, p_пп=1000000.0, t_к=45, dt_уг=30.0, dt_и=10.0, cp_уг=1037, dps=[0.0, 0.0, 0.0], fi_ку=0.995) | | Моделирование теплообмена в котле-утилизаторе одного давления | | Methods defined here: | | __init__(self, G_уг, t_уг, p_пп=1000000.0, t_к=45, dt_уг=30.0, dt_и=10.0, cp_уг=1037, dps=[0.0, 0.0, 0.0], fi_ку=0.995) | G_уг: расход уходящих (выхлопных) газов за ГТУ, кг/с | t_уг: температура уходящих газов за ГТУ (на входе в КУ), С | p_пп: давление пара за пароперегревателем КУ, Па | t_к: температура конденсата (воды) на входе в КУ, С | dt_уг: температурный напор на горячем конце пароперегревателя, С | dt_и: температурный напор на холодном конце испарителя, С | cp_уг: среднеинтегральная удельная теплоёмкость уходящих газов, Дж/кг/К | dps: относительные потери давления в пароводяном тракте КУ, доли | fi_ку: коэффициент сохранения теплоты в КУ, доли | | calc(self) | Расчёт параметров КУ | return: None | Результаты расчёта: | self.D_пв: паропроизводительность КУ, кг/с | self.dts[i] i=0,1,2,3: температурные напоры 0 - на горячем конце пароперегревателя | 1 - на холодном конце пароперегревателя (за испарителем), 2 - на холодном конце испарителя, | 3 - на выходе (по газам) из КУ | self.t_уг[i] i=0,1,2,3: температура уходящих газов в различных частях КУ, С | self.ts_пв[i] i=0,1,2,3: температура пара/воды в различных частях КУ, С | self.Qs[i] i=0,1,2,3: тепло, переданное от уходящих газов пару/воде (Q[0]=0, Q[3]-полная тепловая мощность КУ), Вт | Пример использования результатов расчёта - построение графика в matplotlib: | ax.plot(КУ.Qs/1e6, КУ.ts_уг, label = "Уходящие газы", color = 'red') | ax.plot(КУ.Qs/1e6, КУ.ts_пв, label = "Пар/вода", color = 'blue') | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
hrsg = HRSG1p(G_уг, t_уг, p_пп, t_к, dt_уг, dt_и, cp_уг, dps, fi_ку)
hrsg.calc()
import matplotlib.pyplot as plt # библиотека для построения графиков
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
ax.set_xlabel('$Q$, МВт'); ax.set_ylabel('$t$, C')
ax.plot(hrsg.Qs/1e6, hrsg.ts_уг, label = "Уходящие газы", color = 'red')
ax.plot(hrsg.Qs/1e6, hrsg.ts_пв, label = "Пар/вода", color = 'blue')
ax.grid(); ax.set_xlim(0,); ax.set_ylim(0,); ax.legend();
hrsg.D_пв, hrsg.D_пв * 3.6
# Расход пара, (кг/с, т/ч)
(8.148435744310456, 29.33436867951764)
hrsg.ts_уг[-1] # температура уходящих газов
148.41195426108646
ts_к = np.linspace(0, 100, 6, dtype=int)
ps_пп = np.linspace(2e5, 100e5, 51)
Ds_пв = np.zeros((len(ps_пп), len(ts_к)))
ts_уг = np.zeros_like(Ds_пв)
for i, t in enumerate(ts_к):
hrsg.t_к = t
for j, p in enumerate(ps_пп):
hrsg.p_пп = p
hrsg.calc()
Ds_пв[j, i] = hrsg.D_пв * 3.6 # в т/ч
ts_уг[j, i] = hrsg.ts_уг[-1]
fig, axes = plt.subplots(1,2, figsize = (16, 5))
fig.suptitle ("Зависимость паропроизводительности КУ и температуры уходящих газов из КУ от давления\n" +
"пара на выходе из КУ при различной температуре воды на входе в КУ",
fontsize=16)
axes[0].set_ylabel("$D$, т/ч")
axes[0].plot(ps_пп / 1e5, Ds_пв)
axes[1].set_ylabel("$t^{уг}_3,\degree C$")
axes[1].plot(ps_пп / 1e5, ts_уг);
for ax in axes:
ax.grid(); ax.set_xlim(0.,ps_пп[-1] / 1e5); ax.set_xlabel("$p^{пв}_0$, бар")
ax.legend(ts_к, ncol = 2, title="$t^{пв}_3$, $\degree$С")
dts_и = np.linspace(0, 50, 6, dtype=int)
for i, dt_и in enumerate(dts_и):
hrsg.dt_и = dt_и
for j, p in enumerate(ps_пп):
hrsg.p_пп = p
hrsg.calc()
Ds_пв[j, i] = hrsg.D_пв * 3.6 # в т/ч
ts_уг[j, i] = hrsg.ts_уг[-1]
fig, axes = plt.subplots(1,2, figsize = (16, 5))
fig.suptitle ("Зависимость паропроизводительности КУ и температуры уходящих газов из КУ от давления\n" +
"пара на выходе из КУ при различном температурном напоре на холодном конце испарителя КУ",
fontsize=16)
axes[0].set_ylabel("$D$, т/ч")
axes[0].plot(ps_пп/1e5, Ds_пв)
axes[1].set_ylabel("$t^{уг}_3,\degree C$")
axes[1].plot(ps_пп/1e5, ts_уг);
for ax in axes:
ax.grid(); ax.set_xlim(0.,ps_пп[-1]/1e5); ax.set_xlabel("$p^{пв}_0$, бар")
ax.legend(dts_и, ncol = 2, title="$\Delta t_2$, $\degree$С")
dts_уг = np.linspace(0, 50, 6, dtype=int)
for i, dt_уг in enumerate(dts_уг):
hrsg.dt_уг = dt_уг
for j, p in enumerate(ps_пп):
hrsg.p_пп = p
hrsg.calc()
Ds_пв[j, i] = hrsg.D_пв * 3.6 # в т/ч
ts_уг[j, i] = hrsg.ts_уг[-1]
fig, axes = plt.subplots(1,2, figsize = (16, 5))
fig.suptitle ("Зависимость паропроизводительности КУ и температуры уходящих газов из КУ от давления\n" +
"пара на выходе из КУ при различном температурном напоре на входе в КУ",
fontsize=16)
axes[0].set_ylabel("$D$, т/ч")
axes[0].plot(ps_пп/1e5, Ds_пв)
axes[1].set_ylabel("$t^{уг}_3,\degree C$")
axes[1].plot(ps_пп/1e5, ts_уг);
for ax in axes:
ax.grid(); ax.set_xlim(0.,ps_пп[-1]/1e5); ax.set_xlabel("$p^{пв}_0$, бар")
ax.legend(dts_и, ncol = 2, title="$\Delta t_0$, $\degree$С")
dps = np.linspace(0, 0.2, 6)
for i, dp in enumerate(dps):
hrsg.dps = [dp, dp, dp]
for j, p in enumerate(ps_пп):
hrsg.p_пп = p
hrsg.calc()
Ds_пв[j, i] = hrsg.D_пв * 3.6 # в т/ч
ts_уг[j, i] = hrsg.ts_уг[-1]
fig, axes = plt.subplots(1,2, figsize = (16, 5))
fig.suptitle ("Зависимость паропроизводительности КУ и температуры уходящих газов из КУ от давления\n" +
"пара на выходе из КУ при различных значениях потерь давления в пароводяном тракте КУ",
fontsize=16)
axes[0].set_ylabel("$D$, т/ч")
axes[0].plot(ps_пп/1e5, Ds_пв)
axes[1].set_ylabel("$t^{уг}_3,\degree C$")
axes[1].plot(ps_пп/1e5, ts_уг);
for ax in axes:
ax.grid(); ax.set_xlim(0.,ps_пп[-1]/1e5); ax.set_xlabel("$p^{пв}_0$, бар")
ax.legend(np.intc(dps*100), ncol = 2, title="$\delta p$, %")
Инженерные расчёты на Python, С.В. Медведев, 2020-2023
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2023