Одним из видов оборудования, используемого для охлаждения воды, является сухая градирня, в которой охлаждение воды происходит за счёт обдувания системы теплообменников воздухом. Если температура окружающего воздуха не позволяет достичь требуемой температуры воды на выходе из градирни, то для снижения температуры воздуха применяют систему адиабатического охлаждения - в поток воздуха распыляются мелкие капли воды, испарение которых приводит к снижению температуры воздуха.
Адиабатическое охлаждения воздуха достигается за счёт использования тепловой энергии воздуха для испарения воды, при котором явная теплота воздуха переходит в скрытую теплоту парообразования водяного пара. Так как тепловая энергия, переданная от воздуха к воде и затраченная на её испарение, снова возвращается в воздух в виде скрытой теплоты парообразования, энтальпия влажного воздуха в этом процессе остаётся неизменной. При этом количество влажного воздуха увеличивается за счёт поступающего в него водяного пара. Таким образом удельная энтальпия влажного воздуха уменьшается, неизменной остаётся энтальпия отнесённая на килограмм сухого воздуха.
Предельной температурой, до которой можно охладить воздух в процессе адиабатического охлаждения, является температура мокрого термометра.
import numpy as np
RHs = np.array([20, 40, 60, 80]) / 100 # набор значений относительной влажности
ts = np.linspace(30, 40, 21) # набор значений температур
from wetairprops import calc_d, calc_p_st_d, calc_t_s, calc_t_wb_d
# Влагосодержание воздуха, г/(кг сухого воздуха)
ds = np.array([[calc_d(t, RH) for RH in RHs] for t in ts])
I = range(ds.shape[0]); J = range(ds.shape[1])
# Парциальное давление водяного пара, Па
ps_st = np.array([[calc_p_st_d(ds[i,j]) for j in J] for i in I])
# Температура кипения воды при давлении равном парцильному давлению водяного пара, С
ts_s = np.array([[calc_t_s(ps_st[i,j]) for j in J] for i in I])
# Температура мокрого термометра, С
ts_wb = np.array([[calc_t_wb_d(ts[i], ds[i,j]) for j in J] for i in I])
# Влагосодержание воздуха температурой равной температуре мокрого термометра и с RH = 100%
ds_wb = np.array([[calc_d(ts_wb[i, j],1.) for j in J] for i in I])
# Масса впрыскиваемой воды для снижения температуры воздуха до
# температуры мокрого термометра, г/кг
dds = ds_wb - ds
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, axes = plt.subplots(1,2, figsize = (16, 5))
ylabels = ['$t_{м.т.}, \degree C$', '$\Delta d,\ г/кг$']
#data = [dts, dds]
data = [ts_wb, dds]
titles = ['Температура мокрого термометра',
'Масса распыляемой воды для охлаждения воздуха\nдо температуры мокрого термометра']
for i, ax in enumerate(axes):
ax.set_xlabel('$t, \degree C$'); ax.set_ylabel(ylabels[i])
ax.plot(ts, data[i]); ax.grid()
ax.legend(np.int8(RHs*100 + 0.1), title = '$RH,\ \%$');
ax.set_xlim(ts[0], ts[-1]); ax.set_ylim(0,data[i].max())
ax.set_title(titles[i])
axes[0].set_ylim(15, 40);
Так как массовый расход распыляемой воды составляет менее 1% от массового расхода воздуха, то при построении приведённых выше графиков влияние температуры воды не учитывалось. Принималось, что между водой и воздухом существует только одно взаимодействие - от воздуха к воде передаётся теплота, которая тратится исключительно на преобразование воды в пар.
Но всё же для полноты картины рассмотрим каким образом температура воды влияет на процесс адиабатического охлаждения воздуха.
Испарение воды происходит при температуре насыщения, соответствующей парциальному давлению пара во влажном воздухе.
fig, axes = plt.subplots(1,2, figsize = (16, 5))
ylabels = ['$p_{пар},\ Па$', '$t_{кип}, \degree C$']
data = [ps_st, ts_s]
titles = ['Парциальное давление водяного пара', 'Температура насыщения водяного пара (кипения воды)']
for i, ax in enumerate(axes):
ax.set_xlabel('$t, \degree C$'); ax.set_ylabel(ylabels[i])
ax.plot(ts, data[i]); ax.grid()
ax.legend(np.int8(RHs*100 + 0.1), title = '$RH,\ \%$');
ax.set_xlim(ts[0], ts[-1]); ax.set_ylim(0,data[i].max())
ax.set_title(titles[i])
Если температура воды ниже температуры кипения (насыщения водяного пара), соответствующей парциальному давлению пара во влажном воздухе, то сначала теплота от воздуха полностью идёт на нагрев воды до температуры кипения. Потом начнётся следующий циклический процесс:
Испарение воды и нагрев образовавшегося водяного пара до температуры воздуха за счёт теплоты воздуха -> увеличение влагосодержания воздуха -> увеличение парциального давления пара в воздухе -> увеличение температуры кипения -> нагрев воды до температуры кипения за счёт теплоты воздуха -> в начало процесса.
Чем ниже температура воды, тем в большей степени воздух охладится до начала процесса адиабатического охлаждения. При снижении температуры воздуха с постоянным влагосодержанием температура мокрого термометра уменьшается (см. [1]), а значит, можно достичь более низкой температуры воздуха за счёт его адиабатического охлаждения.
Если температура воды выше температуры кипения (насыщения водяного пара), то вода начнёт испаряться за счёт собственной тепловой энергии. Влагосодержание воздуха, парциальное давление пара и температура кипения будут увеличиваться при неизменной температуре воздуха, температура воды будет уменьшаться. Данный процесс будет идти до тех пор пока температура воды не сравняется с температурой насыщения водяного пара в воздухе. После этого запустится описанный выше циклический процесс.
Попробуем количественно оценить влияние высокой температуры воды на эффективность процесса адиабатического охлаждения для случая $t_{воздуха} = 40\,^\circ C,\, RH_{воздуха} = 20\,\%,\,t_{воды} = 40 ^\circ C $.
t = 40; RH = RHs[0] # t = 40 C, RH = 20% - параметры воздуха
ind = list(ts).index(t) # индекс в массиве ts элемента со значением температуры 40 С
dd = dds[ind, 0] # расход распыляемой воды
t_кип = ts_s[ind, 0] # температура кипения (насыщения)
t_воды = t # примем температуру распыляемой воды равной температуре окружающего воздуха
dt = t_воды - t_кип
d = ds[ind, 0]
d, t_кип, dt
(9.179599211715017, 12.78313810711064, 27.216861892889362)
Сделаем оценку (верхнюю) количества воды, испаряющейся за счёт теплоты распылённой воды.
$$\delta d\cdot r = c_{воды}(\Delta d - \delta d) \Delta t \Rightarrow \delta d = \frac{c_{воды} \Delta t \Delta d}{r + c_{воды} \Delta t}$$где $\delta d$ - расход распыляемой воды, испаряющийся за счёт тепловой энергии воды и её охлаждения, г/кг; $\Delta d$ - расход распыляемой воды, кг/с; $r$ - удельная теплота парообразования, Дж/кг; $\Delta t$ - разница между температурой воды и температурой кипения при данном парциальном давлении водяного пара в воздухе, C; $c_{воды}$ - удельная теплоёмкость воды, Дж/кг/К.
r = 2500 # удельная теплота парообразования, кДж/кг
c_вода = 4.2 # удельная теплоёмкость воды, кДж/кг/К
# Количество испарившейся за счёт собственной теплоты воды составит, г/кг
dd_исп = c_вода * dt * dd/ (r + c_вода * dt)
dd_исп, dd_исп /dd * 100
# г/кг, %
(0.3192421191567164, 4.3725030351332)
# Увеличение температуры мокрого термометра от эффекта испарения воды за счёт теплоты воды, %
dt_wb = calc_t_wb_d(t, d + dd_исп) - ts_wb[ind, 0]
dt_wb, dt_wb / ts_wb[ind, 0] * 100
# C, %
(0.22347530847904906, 1.0227205033344542)
В реальности влияние эффекта испарения воды за счёт теплоты воды будет ещё меньше, т.к. в процессе испарении воды увеличивается влагосодержание воздуха, а значит увеличивается парциальное давление водяного пара и температура кипения, что приводит к снижению величины $\Delta t$.
Рассмотрем процесс испарения распылённой воды в объёме воздуха.
Процес будет повторятся до тех пока не наступит одно из событий:
В нашем случае два условия достигаются одновременно, т.к. мы используем такое количество рыспыляемой воды, при полном испарении которого относительная влажность охлаждённого воздуха будет составлять 100%.
#Температура воздуха, Относительная влажность, Влагосодержание, Количество распыляемой воды
t, RH, d, dd
# С, доли, г/кг, г/кг
(40, 0.2, 9.179599211715017, 7.301129732594715)
p_пар = calc_p_st_d(d) # парциальное давление водяного пара, Па
t_вода = t_кип = calc_t_s(p_пар) # температура кипения при p_пар, С
t_вода, t_кип, p_пар
(12.78313810711064, 12.78313810711064, 1476.692001797224)
# Испарившееся количество воды на i-ом шаге
dms, dm_шаг = np.linspace(0., dd, 1000, retstep=True)
dm_шаг # г/кг
0.00730843817076548
ts_возд = [t]
ts_вода = [t_вода]
c_возд = 1.005 # теплоёмкость сухого воздуха, кДж/кг/К
for dm in dms[1:]:
# r * dm / 1000 = c_возд * dt
dt = r * dm_шаг / 1000 / c_возд
t_возд = ts_возд[-1] - dt
p_пар = calc_p_st_d(d + dm)
t_кип = calc_t_s(p_пар)
dt_вода = t_кип - ts_вода[-1]
ts_вода.append(t_кип)
m = dd - dm # количество неиспарившейся воды, г/кг
# c_вода * dt_вода * m / 1000 = c_возд * dt
dt = c_вода * dt_вода * m / 1000 / c_возд
ts_возд.append(t_возд - dt)
fig, ax = plt.subplots(figsize = (10, 5))
ax.set_xlabel('$d_{исп}, г/кг$');
ax.set_ylabel('$t, \degree C$')
ax.plot(dms, ts_возд, label = 'Воздух'); ax.plot(dms, ts_вода, label = 'Вода')
ax.grid()
ax.set_title("Изменение температуры воздуха и распыляемой воды\n" +
"при испарении воды в процессе адиабатического охлаждения воздуха")
ax.set_xlim(0, dd); ax.set_ylim(10, 40); ax.legend();
from wetairprops import calc_t_wb
ts_возд[-1], ts_вода[-1], calc_t_wb(t, RH)
(21.6877225613052, 21.85106368264195, 21.851063682642067)
В конечной точке температура воздуха оказалось ниже температуры воды (что не может произойти в реальности) из-за принятых в расчётной модели упрощений.
Определим конечную температуру воздуха при условии, что за счёт его теплоты испарилась вся распылённая вода
dt = r * dd / 1000 / c_возд
t - dt
21.837985739814144
Полученный результат почти совпадает со значением, найденным с помощью функции calc_t_wb
.
Определим возможные варианты охлаждения воздуха температурой 30 С и относительной влажности 40%, находящегося в замкнутом объёме (комната). Найдём количество воды, которое необходимо распылить, чтобы охладить воздух, при условии, что его конечная относительная влажность составит заданную величину.
Для этого используем усовершенствованную функцию calc_t_wb
из модуля wetairprops
версии 2.1 (скачать).
help(calc_t_wb)
Help on function calc_t_wb in module wetairprops: calc_t_wb(t, RH, p=101325, RH_target=1.0) Определение температуры мокрого терммометра по относительной влажности t: температура воздуха (сухой термометр), С RH: относительная влажность [0; 1] p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) RH_target: целевое значение относительной влажности при адиабатическом охлаждении воздуха (по умолчанию - 1. (RH=100%)) return: t_wb - температура мокрого термометра, С
t_0 = 30; # начальная температура воздуха в комнате, С
RH_0 = 0.4; # начальная относительная влажность воздуха, доли
d_0 = calc_d(t_0, RH_0) # начальное влагосодержание воздуха, г/кг
RHs_ц = np.linspace(RH_0, 1., 21) # целевые значения относительной влажности, доли
d_0 # г/кг
10.581380345273612
# Температура охлаждённого воздуха с заданной целевой относительной влажностью, С
ts_возд = np.array([calc_t_wb(t_0, RH_0, RH_target = RH_ц) for RH_ц in RHs_ц])
# Влагосодержание воздуха, г/кг
ds = np.array([calc_d(t, RH) for t, RH in zip(ts_возд, RHs_ц)])
dds = ds - d_0 # количество распыляемой воды г/кг
fig, ax = plt.subplots(figsize = (10, 5))
ax.set_xlabel('$\Delta d,\ г/кг$');
ax.set_ylabel('$t_{возд}, \degree C$')
ax.plot(dds, ts_возд, label = 'Температура'); #ax.plot(dms, ts_вода, label = 'Вода')
ax.grid()
ax.set_title("Зависимость температуры воздуха и его относительной влажности \n" +
"от количества распыляемой воды ($t_0=30\ C,\, RH_0=40\,\%$)")
ax.set_xlim(0, dds[-1]); ax.set_ylim(ts_возд[-1], t_0);
ax2 = ax.twinx(); ax2.plot(dds, RHs_ц * 100, label = 'Относительная влажность', color = 'red');
ax2.set_ylim(RH_0 * 100, 100);
ax2.set_ylabel('$RH,\ \%$'); ax.legend(); ax2.legend();
В приведённом выше графике количество распыляемой воды дано в г на кг сухого воздуха.
Определим массу сухого воздуха, содержащегося в 1 м3 влажного воздуха температурой 30 С и относительной влажностью 40%.
from wetairprops import calc_dens
M_св = calc_dens(t_0, RH_0) / (1 + d_0 / 1000) # масса сухого воздуха в 1 м3 влажного воздуха, кг
M_св #кг/м3
1.1463194509031662
Для того чтобы определить сколько воды необходимо распылить в комнате для снижения температуры воздуха в ней до требуемой величины следует:
Инженерные расчёты на Python, С.В. Медведев, 2020-2023
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2023