Пример решения олимпиадных задач по ПАХТ
Задача 9
В ректификационной колонне выделения бутан-изобутановой фракции групповая чистота дистиллята (суммарное содержание пропана, изобутана и н-бутана) равна масс.; кубового продукта – масс., при этом в кубовом продукте полностью отсутствует пропан. Расход сырья 20 т/ч, температура сырья 110 °С, состав сырья приведен в таблице. Давление верха колонны 12 ата.
-
Составьте общий и покомпонентный материальный баланс колонны (точность – до второго знака после запятой, для значения расхода в т/ч).
-
Сравните температуру куба колонны при тарельчатом и насадочном варианте внутренних контактных устройств колонны, считая, что оба варианта обеспечивают одинаковый материальный баланс колонны:
- тарельчатая колонна имеет 40 тарелок с КПД 0,40, подача сырья на 15 тарелку (счеттарелок снизу-вверх), перепад давления на 1 тарелку 6 мм рт. ст.
- насадочная колонна имеет 25 блоков перекрестноточной регулярной насадки с КПД 0,64, подача сырья – на 9 блок (счет блоков насадок снизу-вверх), перепад давления на блок насадки 1,5 мм рт. ст.
Принять 1 ата = 760 мм рт. ст.
Считать, что кубовый продукт отбирается напрямую из куба колонны (применена схема подвода тепла с термосифоном с естественной многопроходной циркуляцией).
Таблица – Состав сырья колонны
| Вещество | Масс. % |
|---|---|
| Пропан | 1 |
| Изобутан | 34 |
| Н-бутан | 24 |
| Изопентан | 22 |
| Н-пентан | 19 |
Исходные данные
xF = [0.01, 0.34, 0.24, 0.22, 0.19] #массовая доля компонентов
∑yD = 0.99 #доля ключевых компонентов дистилята
∑xW = 0.05 #доля ключевых компонентов
TF = 110 + 273.15 #переведем температуру в кельвины
Из материального баланса:
Откуда
F = 20
D = F * (sum(xF[1:3]) - ∑xW) / (∑yD - ∑xW)
W = F - D
Для решения системы уравнений возспользуемся пакетом NLsolve данный пакет позволяет решать системы уравнений. В нашем случае массовые доли должны быть в диапазоне от 0 до 1, поэтому решение ищем с помошью функции mcpsolve.
using NLsolve
Для решения уравнеий с множеством переменных важно использовать хорошее начальное приближение. В качестве начального приближения для паровой фазы можно использовать равновестные значения от исходной смеси (можно использовать несколько ступеней разделения).
Для определения фазового равноесия используем пакет Clapeyron
using Clapeyron; # ; в конце поставил чтобы не отображался длинный лог подключения пакетов
Наша система состоит из углеводородов, а для их описания хорошо подходит уравнение состояния Пенга-Робинсона:
sys = PR(["propane","isobutane", "n-butane","isopentane","n-pentane"])
sys.params.Mw #в базе пакета Clapeyron храянтся основные парамтеры необходимые для расчета
При расчете фазового равновесия обычно используются мольные доли, поэтому запишем функции для перевода из массовых долей в мольные и наоборот
function mass_2_mole(x_mass, sys)
x_mole = similar(x_mass)
mole = collect(x_mass[i] / sys.params.Mw[i] for i = 1:length(x_mass))
x_mole = mole ./ sum(mole)
return x_mole
end
function mole_2_mass(x_mole, sys)
x_mass = similar(x_mole)
mass = collect(x_mole[i] * sys.params.Mw[i] for i = 1:length(x_mole))
x_mass = mass ./ sum(mass)
return x_mass
end
x_mole_F = mass_2_mole(xF,sys) #мольные доли компонентов исходной смеси
В качестве начального приближения возьмем равновесные значения с исходной смеси. Для дистиллята возьмем паровую фазу, равновесную жидкой. Для кубовой жидкости — жидкую, равновесную паровой.
xinit_D = mole_2_mass(bubble_pressure(sys, TF, x_mole_F)[4], sys) #перевод в массовые доли равеновстных знаечний
xinit_W = mole_2_mass(dew_pressure(sys, TF, x_mole_F)[4], sys)
xinit = vcat(xinit_D, xinit_W) #начальные приближения для решения системы уравнений
function fol(out, x) #система для решения
yD = x[1:5]
xW = x[6:10]
out[1] = - F * xF[1] + D * yD[1] + W * xW[1]
out[2] = - F * xF[2] + D * yD[2] + W * xW[2]
out[3] = - F * xF[3] + D * yD[3] + W * xW[3]
out[4] = - F * xF[4] + D * yD[4] + W * xW[4]
out[5] = - F * xF[5] + D * yD[5] + W * xW[5]
out[6] = sum(yD) - 1
out[7] = sum(xW) - 1
out[8] = sum(yD[1:3]) - 0.99
out[9] = xW[1]
out[10] = sum(xW[1:3]) - 0.05
end
r = mcpsolve(fol, fill(0.0,10), fill(1.0,10), xinit) #решаем систему с ограничениями от 0 до 1
yD = r.zero[1:5] #найденные значения масовой доли дистиллята
xW = r.zero[6:10] #найденные значения массовой доли кубовой жидкости
Проведем проверку найденного решения:
sum(yD[1:3]) #доля компонентов 1-3 в дистиляте
sum(xW[1:3]) #доля компонентов 1-3 в кубовой жидкости
sum(yD)
sum(xW)
В решении есть околонулевое значение порядка , но с отрицательным знаком. Для адекватного решения возьмем абсолютное значение.
y_mole_D = abs.(mass_2_mole(yD, sys)) #перевод решения в мольные доли
x_mole_W = abs.(mass_2_mole(xW, sys))
P₁ = (12 * 760 + 40 * 6) * 133.33 #давление в кубе для первого случая
P₂ = (12 * 760 + 25 * 1.5) * 133.33 #давление для второго случая
bubble_temperature(sys, P₁, x_mole_W)[1] #температура куба для первого случая
bubble_temperature(sys, P₂, x_mole_W)[1] #температура куба для второго случая