состав_об = \
{'1': {'H2O': 0.19635295139341327, 'N2': 0.7006349567311828,
'Ar': 0.008391437849185321, 'CO2': 0.0946206540262187, 'O2': 0.0},
'2': {'H2O': 0.10780014949851968, 'N2': 0.7350336981989136,
'Ar': 0.008803428284922896, 'CO2': 0.04977556999482799, 'O2': 0.0985871540228159},
'3': {'H2O': 0.07631811780906911, 'N2': 0.7472630375963242,
'Ar': 0.008949897912942527, 'CO2': 0.03383237761263723, 'O2': 0.13363656906902696},
'4': {'H2O': 0.06018096285074176, 'N2': 0.7535315893480247,
'Ar': 0.009024975757579639, 'CO2': 0.025660167872817653, 'O2': 0.15160230417083634},
'5': {'H2O': 0.050368057799989645, 'N2': 0.7573434572580753,
'Ar': 0.009070630134868675, 'CO2': 0.020690697204736923, 'O2': 0.16252715760232958},
'Воздух': {'N2': 0.772984553428866, 'O2': 0.20735470336361728,
'Ar': 0.009257962047370834, 'CO2': 0.00029965258526530987, 'H2O': 0.010103128574880792}}
вещество = {'N2': 'Азот', 'O2': 'Кислород', 'Ar': 'Аргон',
'CO2': 'Углекислый газ', 'H2O': 'Водяной пар'}
обозначение = {'N2': 'N2', 'O2': 'O2', 'Ar': 'Ar',
'CO2': 'CO2', 'H2O': 'H2O'}
import pandas as pd
from IPython.core.display import HTML
def _format_output(s):
"""
Замена десятичного разделителя '.' на ',' и добавление тэгов для отображения нижних индексов
"""
for x, y in zip(('.', 'N2', 'O2', 'H2O', 'CO2'),
(',', 'N<sub>2</sub>', 'O<sub>2</sub>','H<sub>2</sub>O', 'CO<sub>2</sub>')):
s = s.replace(x, y)
return s
formatters={
'1': '{:.2%}'.format,
'2': '{:,.2%}'.format,
'3': '{:,.2%}'.format,
'4': '{:,.2%}'.format,
'5': '{:,.2%}'.format,
'Воздух': '{:,.2%}'.format
}
data = {'Вещество': вещество,'Обозначение': обозначение}
data.update(состав_об)
df = pd.DataFrame(data, index = ['N2', 'O2', 'Ar', 'CO2', 'H2O'])
output = df.to_html(index = False, formatters=formatters)
output = output.replace('.', ',')
display(HTML(_format_output(output)))
# Состав выхлопных газов (по объёму) при различных значениях коэффициента избытка воздуха (по массе)
# "Воздух" - это воздух при температуре 15 С с относительной влажностью 60%.
Вещество | Обозначение | 1 | 2 | 3 | 4 | 5 | Воздух |
---|---|---|---|---|---|---|---|
Азот | N2 | 70,06% | 73,50% | 74,73% | 75,35% | 75,73% | 77,30% |
Кислород | O2 | 0,00% | 9,86% | 13,36% | 15,16% | 16,25% | 20,74% |
Аргон | Ar | 0,84% | 0,88% | 0,89% | 0,90% | 0,91% | 0,93% |
Углекислый газ | CO2 | 9,46% | 4,98% | 3,38% | 2,57% | 2,07% | 0,03% |
Водяной пар | H2O | 19,64% | 10,78% | 7,63% | 6,02% | 5,04% | 1,01% |
p_прод_сгор = 101320 # давление продуктов сгорания, Па
# Определим упругость водяного пара в продуктах сгорания при различном
# значении коэффициента избытка воздуха
Es_вп = [p_прод_сгор * состав['H2O'] for состав in состав_об.values()]
import numpy as np
for кнт, E in zip(состав_об.keys(), Es_вп):
print(кнт,'\t', np.intc(np.round(E,0)))
# Упругость водяного пара в продуктах сгорания при различных значения коэффициента избытка воздуха, Па
1 19894 2 10922 3 7733 4 6098 5 5103 Воздух 1024
from wsprops import SaturationCurve # Подробнее см. [2]
sc = SaturationCurve()
Температура точки росы - это температура при которой упругость водяного пара в смеси равна упругости насыщенного водяного пара при данной температуре.
ts_точка_росы = [sc.t_p(E_вп) for E_вп in Es_вп]
for кнт, t in zip(состав_об.keys(), ts_точка_росы):
print(кнт,'\t', np.intc(np.round(t,0)))
# Температура точки росы продуктов сгорания при различных значениях коэффициента избытка воздуха, С
1 60 2 48 3 41 4 36 5 33 Воздух 7
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize = (9, 5))
# https://pyprog.pro/mpl/mpl_bar.html
position = np.arange(6)
ax.bar(position, ts_точка_росы)
ax.set_title("Температура точки росы продуктов сгорания газового топлива")
ax.set_xlabel('Коэффициент избытка воздуха'); ax.set_ylabel('Температура точки росы, $\degree C$')
ax.set_xticks(position); ax.set_ylim(0,60)
ax.set_xticklabels(['1', '2', '3', '4', '5', 'Воздух'])
ax.yaxis.grid(True, color = 'grey')
При горении газового топлива кроме CO2 и H2O в продуктах сгорания так же присутствуют NOx и SOx, концентрация которых мала, поэтому они не учитывались при определении теплофизических свойств выхлопных газов. Например, по действующим нормам концентрация NOx в выхлопных газах ГТУ не должна превышать 25 ppm (25 частиц на миллион). Концентрация SOx в выхлопных газах зависит от концентрации соединений серы в газовом топливе.
При конденсации содержащихся в продуктов сгорания водяных паров вместе с ними в жидкое состояние переходят и соединения NOx и SOx, которые, вступая в реакцию с водой, образуют кислоты, разрушительно воздействующие на соприкасающуюся с ними поверхности.
В котле-утилизаторе тепло от продуктов сгорания ГТУ передаётся воде, которая проходит внутри трубок, расположенных в потоке продуктов сгорания. Если температура внешней стенки трубки будет равной или ниже температуры точки росы, то на поверхности трубки образуются кислоты. Чтобы этого не допустить необходимо обеспечить, чтобы температура внешней стенки была выше температуры точки росы выхлопных газов.
Попрубуем оценить как температура внешней стенки трубы зависит от температуры вылопных газов, омывающих трубку, и температуры воды,проходящей внутри трубки.
$$q = k (t_г - t_в)$$$$k = \frac{1}{1/\alpha_г + \delta/\lambda + 1/\alpha_в}$$$q$ - плотность теплового потока, $Вт/м^2$, $k$ - коэффициент теплопередачи, $Вт/(м^2\cdot К)$, $t_г$, $t_в$ - температура выхлопных газов и температура воды соответственно, $^\circ C$; $\alpha_г$, $\alpha_в$ - коэффициент теплоотдачи от выхлопных газов к внешней поверхности трубки и от внутренней поверхности трубки к воде соответственно, $Вт/(м^2\cdot К)$; $\delta$ - толщина стенки трубки, м; $\lambda$ - коэффициент теплопроводности материала трубки, $Вт/(м\cdot К)$.
$$Nu = \frac{\alpha d}{\lambda}$$$$Re = \frac{w d}{\mu}$$$w$ - скорость среды, м/с; $d$ - диаметр трубки (внешний или внутренний в зависимости от рассматриваемого теплоносителя); $\mu$ - кинематическая вязгость теплоносителя, $м^2/с$.
Для воды, движущейся внутри трубы при $Re_в> 10^4$ $$Nu_в = 0.021 Re_в^{0.8} Pr_в^{0.43}\left( \frac{Pr_в}{Pr_{пов}}\right) ^{0.25} \varepsilon_l$$
$$\varepsilon_l = 1.72 \frac{d}{l}^{0.16}$$где $l$ - длина трубы. При $l/d \ge 50$ $\varepsilon_l = 1$.
Для уходящих газов, обтекающих пучёк труб коридорного расположения при $1000<Re_г<2\cdot 10^5$ $$Nu_г = 0.23 Re_г^{0.65} Pr_г^{0.35}\left( \frac{Pr_г}{Pr_{пов}}\right) ^{0.25}$$
ts = np.array([0, 40, 80, 120]) # значения температур для которых будут заданы параметры
Prs_в = np.array([13.46, 4.34, 2.23, 1.44]) # число Прантля для воды
lambdas_в = np.array([562., 628.6, 667., 684.1]) # теплопроводность воды, Вт/м/К
# кинематическая вязкость воды, м2/с
mus_в = np.array([1.792030, 0.657846, 0.364331, 0.246076]) * 1e-6
Prs_г = np.array([0.715, 0.711, 0.708, 0.70]) # число Прантля для выхлопных газов
lambdas_г = np.array([0.0244, 0.0276, 0.0305, 0.0334]) # теплопроводность уходящих газов, Вт/м/К
# кинематическая вязкость выхлопных газов, м2/с
mus_г = np.array([13.337247, 17.030244, 21.051744, 25.382993]) * 1e-6
lambda_тр = 400 # коэффициент теплопроводности материала трубок (меди) Вт/(м2 К)
from scipy.interpolate import interp1d
fPr_в = interp1d(ts, Prs_в,kind = 'linear')
flambda_в = interp1d(ts, lambdas_в,kind = 'linear')
fmu_в = interp1d(ts, mus_в,kind = 'linear')
fPr_г = interp1d(ts, Prs_г,kind = 'linear')
flambda_г = interp1d(ts, lambdas_г,kind = 'linear')
fmu_г = interp1d(ts, mus_г,kind = 'linear')
t_г = 120; t_в = 40 # температура выхлопных газов и воды соответственно, С
# Внешний диаметр трубки, толщина стенки, внутренний диаметр, мм
D = 10.; h = 2.; d = D - h - h
D *= 1e-3; h *= 1e-3; d *= 1e-3 # перевод в метры
mu_г = fmu_г(t_г) # кинематическая вязкость выхлопных газов при t_г, м2/с
mu_в = fmu_в(t_в) # кинематическая вязкость воды при t_в, м2/с
lambda_г = flambda_г(t_г) # коэффициент теплопроводности выхлопных газов при t_г, Вт/м/К
lambda_в = flambda_г(t_в) # коэффициент теплопроводности воды при t_г, Вт/м/К
w_в = 2. # скорость воды в трубке, м/с
w_г = 2. # скорость выхлопных газов, омывающих трубки
Re_в = w_в * d / mu_в; Re_г = w_г * D / mu_г;
t_в_пов = t_в
t_г_пов = t_г
t_г_пов_р = (t_в + t_г) / 2 # температура поверхности трубки со стороны уходящих газов
t_в_пов_р = t_г_пов_р # температура поверхности трубки со стороны воды
err = 1e-3 # допустимая относительная ошибка
dt = (t_г - t_в)
while abs(t_г_пов - t_г_пов_р) / t_г_пов_р > err \
or abs(t_в_пов - t_в_пов_р) / t_в_пов_р > err:
t_г_пов = t_г_пов_р; t_в_пов = t_в_пов_р
Nu_в = 0.021 * Re_в ** 0.8 * fPr_в(t_в) ** 0.43 * (fPr_в(t_в) / fPr_в(t_в_пов)) ** 0.25
alfa_в = Nu_в * lambda_в / d
Nu_г = 0.23 * Re_г ** 0.65 * fPr_г(t_г) ** 0.33 * (fPr_г(t_г) / fPr_г(t_г_пов)) ** 0.25
alfa_г = Nu_г * lambda_г / D
r_г = 1 / alfa_г; r_тр = h / lambda_тр; r_в = 1 / alfa_в
r = r_г + r_тр + r_в
t_г_пов_р = t_г - dt * r_г /r
t_в_пов_р = t_в + dt * r_в /r
# Температура стенок трубки, С
# со стороны газа; со стороны воды
t_г_пов_р, t_в_пов_р
(47.86652153757967, 47.847789815990886)
# Проверка, ищем t_в_пов_р другим способом
t_г_пов_р - dt * r_тр /r
47.847789815990886
# Термические сопротивления, К*м2/Вт
# общее; газы - трубка; трубка; трубка - вода
r, r_г , r_тр , r_в
(0.021354150396908824, 0.01925436434673384, 5e-06, 0.002094786050174985)
# Доли в общем термическом сопротивлении, %
# газы - трубка; трубка; трубка - вода
r_г/r * 100 , r_тр/r* 100 , r_в/r* 100
(90.16684807802541, 0.023414651985984837, 9.809737269988608)
Для того, чтобы приблизительно оценить температуру стенки трубки со стороны выхлопных газов достаточно (для случая обтекания продуктами сгорания пучка труб коридорного расположения) к температуре воды прибавить 10% от разницы между температурами газов и воды.
В нашем примере $t_г = 120\, ^\circ C$, $t_в = 40\, ^\circ C$, тогда температура стенки трубки составит: $t_{тр} = t_в + 0.1 (t_г - t_в) = 48\, ^\circ C$
Если коэффициент избытка воздуха при сжигании газового топлива меньше двух, то данная температура будет ниже точки росы продуктов сгорания, а значит, будет развиваться процесс низкотемпературной коррозии. Для избежания низкотемпературной коррозии необходимо нагреть воду на входе в котёл до температуры гарантирующей, что температура внешней стенки трубки будет превышать температуру точки росы продуктов сгорания.
Инженерные расчёты на Python, С.В. Медведев, 2020-2022
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2022