В [1] приведён пример использования класса HRSG1p
модуля hrsg1p
для моделирования котла-утилизатора (далее - КУ) одного давления.
Здесь мы рассмотрим пример использования модуля hrsg1p
версии 1.1 (скачать) для моделирования КУ двух давлений.
В котле-утилизаторе двух давлений имеются два контура - контур высокого давления (далее - ВД) и контур низкого давления (далее - НД), которые могут быть представлены как два котла-утилизатора одного давления, стоящие друг за другом по ходу выхлопных газов ГТУ.
КУ НД отличается от КУ ВД тем, что через экономайзер КУ НД проходит и нагревается до температуры воды в барабане КУ НД вода обоих контуров. Из барабана КУ НД вода контура НД подаётся в пароперегреватель КУ НД, а вода контура ВД - в экономайзер КУ ВД.
Зададимся необходимыми для расчёта исходными данными. При этом будем считать, что каждый КУ подаёт пар в свою паровую турбину (КУ ВД в ПТ ВД, КУ НД в ПТ НД).
t_уг_гту = 517 # температура уходящих газов ГТУ, C
G_уг = 370.5 # массовый расход ухдящих газов ГТУ, кг/с
# Температурный напор на горячем конце пароперегревателя КУ ВД и КУ НД разность между температурой
# уходящих газов ГТУ (температура газов на входе в КУ) и температурой пара на выходе КУ), С
dt_уг_вд = dt_уг_нд = 30
# Температурный напор на холодном конце испарителя КУ ВД и КУ НД (разность между температурой
# газов на выходе (по газу) из испарителя и температурой воды на входе (по воде) в испаритель КУ), С
dt_и_вд = dt_и_нд = 9
# Внутренний КПД паровых турбин
КПД_пт_вд = КПД_пт_вд = 0.85
# Давление в конденсаторе паровых турбин, Па
p_к = 4500
# Степень сухости пара на выходе паровых турбин
x_к = 0.87
Первым выполняется расчёт для КУ ВД.
t_0_вд = t_уг_гту - dt_уг_вд
t_0_вд # температура пара перед ПТ ВД, С
487
Давление пара на выходе КУ ВД (здесь и далее абсолютное давление) найдём по методике [2] для степени сухости пара в конденсаторе x = x_к.
from st import ST
ПТ_вд = ST(t_0_вд, None, p_к, КПД_пт_нд) # ПТ ВД
p_0_вд = ПТ_вд.find_p_for_x(x_к)
p_0_вд # давление пара перед ПТ ВД, Па
7291681.527111711
from hrsg1p import HRSG1p
КУ_вд = HRSG1p(G_уг, t_уг_гту, p_0_вд, None, dt_уг_вд, dt_и_вд) # КУ ВД
ПТ_нд = ST(None, None, p_к, КПД_пт_нд) # ПТ НД
Для выполнения расчёта необходимо задаться температурой воды на входе в экономайзер КУ ВД, которая равна температуре воды в барабане КУ НД. Данную температуру можно найти итерационным расчётом.
from scipy.optimize import root_scalar
from wsprops import HSDiag # см. [3]
hs = HSDiag()
t_0_нд = 210 # Первое приближение
def f(t_0_нд):
ПТ_нд.t_0 = t_0_нд
p_0_нд = ПТ_нд.find_p_for_x(x_к)
t_э_вд = hs.t_p(p_0_нд)
КУ_вд.t_к = t_э_вд
КУ_вд.calc()
return КУ_вд.ts_уг[3] - dt_уг_нд - t_0_нд
sol = root_scalar(f, bracket = [t_0_нд * 0.8, t_0_нд * 1.2])
t_0_нд = sol.root; p_0_нд = ПТ_нд.p_0
t_0_нд, p_0_нд # температура (С) и давление (Па) пара перед ПТ НД
(201.88374458202108, 534049.8143059089)
import matplotlib.pyplot as plt # библиотека для построения графиков
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("Котёл-утилизатор высокого давления")
ax.set_xlabel('$Q$, МВт'); ax.set_ylabel('$t$, C')
ax.plot(КУ_вд.Qs/1e6, КУ_вд.ts_уг, label = "Уходящие газы", color = 'red')
ax.plot(КУ_вд.Qs/1e6, КУ_вд.ts_пв, label = "Пар/вода", color = 'blue')
ax.grid(); ax.set_xlim(0,); ax.set_ylim(0,); ax.legend();
КУ_вд.D_пв * 3.6 # паропроизводительность контура ВД, т/ч
144.21387237909184
t_уг_ку_вд = КУ_вд.ts_уг[3]
t_уг_ку_вд # температура уходящих газов из КУ ВД, С
231.8837445820215
ПТ_нд.t_0, t_уг_ку_вд - dt_уг_нд # температура пара перед ПТ НД, С
(201.88374458202216, 201.8837445820215)
Температура воды на входе в экономайзер КУ НД равна температуре конденсации пара в конденсаторе при p = p_к
t_э_нд = hs.t_p(p_к)
t_э_нд # температура воды на входе в экономайзер КУ НД, C
31.01316398643587
КУ_нд = HRSG1p(G_уг, КУ_вд.ts_уг[3], p_0_нд, t_э_нд, dt_уг_нд, dt_и_нд, dD_в_эк = КУ_вд.D_пв) # КУ НД
КУ_нд.calc()
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("Котёл-утилизатор низкого давления")
ax.set_xlabel('$Q$, МВт'); ax.set_ylabel('$t$, C')
ax.plot(КУ_нд.Qs/1e6, КУ_нд.ts_уг, label = "Уходящие газы", color = 'red')
ax.plot(КУ_нд.Qs/1e6, КУ_нд.ts_пв, label = "Пар/вода", color = 'green')
ax.grid(); ax.set_xlim(0,); ax.set_ylim(0,); ax.legend();
КУ_нд.D_пв * 3.6 # Паропроизводительность контура низкого давления, т/ч
42.741700573865366
t_уг_ку_нд = КУ_нд.ts_уг[3]
t_уг_ку_нд
92.62250708890002
fig, ax = plt.subplots(figsize = (10,5))
ax.set_title("Котёл-утилизатор двух давлений")
ax.set_xlabel('$Q$, МВт'); ax.set_ylabel('$t$, C')
ax.plot(КУ_вд.Qs/1e6, КУ_вд.ts_уг, label = "Уходящие газы", color = 'red')
ax.plot(КУ_вд.Qs/1e6, КУ_вд.ts_пв, label = "Пар/вода ВД", color = 'blue')
ax.plot((КУ_нд.Qs+КУ_вд.Qs[3])/1e6, КУ_нд.ts_уг, color = 'red')
ax.plot((КУ_нд.Qs+КУ_вд.Qs[3])/1e6, КУ_нд.ts_пв, label = "Пар/вода НД", color = 'green')
ax.grid(); ax.set_xlim(0,); ax.set_ylim(0,); ax.legend();
Инженерные расчёты на Python, С.В. Медведев, 2020-2023
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2023