畢秋艷,馬 麗
(青海大學化工學院,青海 西寧 810016)
分離工程貫穿于化工生產的全過程,涉及到設計、建造、生產、儲運、分離等化工過程全生命周期的各個環節,廣泛應用于醫藥、材料、冶金、食品、生化、原子能與環境治理等領域。化工分離工程是一個覆蓋面極廣的綜合交叉學科,是理論性、實踐性和探索性很強的一門課程。其具有綜合性強、內容廣泛、工程應用背景強、計算過程復雜、多采用計算機編程求解等特點。如果只采用課堂教學的形式,難以將分離過程的工藝設計和平衡計算講解透徹,這也就將不利于實現課程教學與工程實際的緊密聯系,不能很好的適應現代化工技術的迅猛發展[1]。計算機輔助結合實踐教學則是加深、鞏固理論知識的有效途徑,是培養學生創新能力、科學思維方法、研究科學問題能力、處理工程問題能力以及提高學生綜合素質的載體。將理論知識結合計算機軟件輔助模擬計算,掌握、了解實際化工分析與分離過程、提純技術理論的轉化與應用,強化了學生將化工分離工程所學理論在實際化工生產中的應用,對化工技術的進步與發展起著至關重要的作用。
C語言是一門面向過程、抽象化的通用程序設計結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,程序調試方便,且相較于其它編程語言其兼顧了高級匯編語言的優點,這使得C語言的處理能力和表現能力都具有較大優勢[2]。化工分離工程課程中單級平衡蒸餾、液液平衡、多組分相平衡計算和多組分多級分離的嚴格計算公式多且復雜,而且變量之間的關系往往是非線性的,經常需要進行迭代計算,手算很難完成[3]。這時可以通過C語言模塊程序編寫簡捷、快速的完成計算過程。平衡分離過程的計算既是教學的重點,也是教學的難點,本文以平衡分離過程的計算為例介紹C語言在化工分離工程教學中的應用。
閃蒸是連續單平衡級的蒸餾過程,等溫閃蒸計算是求解在一定的溫度和壓力下,混合物分相后汽液兩相的組成和數量[4]。
閃蒸過程如圖所示, 流率為F(kmol/h)、組成為zi(摩爾分數)的混合物經換熱器進入汽液分離罐, 在罐中經閃蒸分離出互成平衡的汽液兩相。汽相流率為V,組成為yi; 液相流率為L,組成為xi。閃蒸過程中壓力為P, 溫度為T。
計算示例:組成為60%(mol)苯,25%甲苯和15%對二甲苯的100 kmol/h的液體混合物,在101.325 kPa和100 ℃下閃蒸。通過C語言程序模塊編寫計算液相和汽相產物的流率和組成。假設物系為理想溶液。用安托尼方程計算蒸汽壓。

圖1 計算示例附圖
假設系統中存在C個組分,由每個組分的物料衡算可知:
Fzi=Lxi+VKixii=1,2,…c
(1)

(2)
又因為:L=F-V
(3)
(4)

(5)
(6)
ψ的取值范圍在0到1.0之間
(7)

(8)

(9)
Rachford-Rice方程:
(10)
牛頓迭代法計算方程:
(11)
導數方程:
(12)
源程序代碼如下:
#include "stdarg.h"
#include"math.h"
#include "stdio.h"
#define T (100+273.15)//溫度定義,攝氏度轉換開爾文//
static double Z[3]={0.60,0.25,0.15},K[3];/各組分組成定義//
int main()//主函數//
{int i,now;
double p[3];
double f,f1,x,y,a,b,s,e;
double V,F,L,PO;
static double l[3]={20.7936,20.9065,20.9891},//安托尼方程中的常數A//
m[3]={2788.51,3096.52,3346.65},//安托尼方程中的常數B//
n[3]={52.36,53.67,57.84};//安托尼方程中的常數C//
//clrscr();
PO=101.3; //大氣壓//
printf("各組分的相平衡常數如下: ");
for(i=0;i<3;i++)
{p[i]=exp(l[i]-(m[i]/(T-n[i])));
K[i]=(p[i]/PO)/1000;
printf("K%d=%f ",i+1,K[i]);
} /*s,f,f1*/
printf(" 請輸入汽化分率初值");
scanf("%lf",&s);
printf("請輸入迭代精度");
scanf("%lf",&e);
{x=Z[i]/(1.0+s*(K[i]-1.0));//液相組成計算//
y=K[i]*Z[i]/(1.0+s*(K[i]-1.0));//汽相組成計算//
//printf("x=%f,y=%f ",x,y);
}
printf("迭代計算如下: ");//牛頓迭代計算//
F=100.00;now=1;
do {
printf("第%d迭代次數 ",now);
f=0.0;
printf("s=%lf ",s);
for(i=0;i<3;i++)
{
a=Z[i]*(K[i]-1.0);
b=1.0+s*(K[i]-1.0);
f+=a/b;
}
printf("f=%lf ",f);
f1=0.0;
for(i=0;i<3;i++)
{
x=(K[i]-1.0)*(K[i]-1.0)*Z[i];
y=(1.0+s*(K[i]-1.0))*(1.0+s*(K[i]-1.0));
f1+=x/y;
}
printf("f1=%lf ",f1);
s+=fabs(f)/fabs(f1);
printf("s=%lf ",s);
now++;
}
while(fabs(f)>e);
printf("當前汽化分率已滿足p-k-T的精確度,迭代結束. 各組分的汽相液相組成如下: ");//滿足迭代精度,即可結束迭代//
/*V,L,F,x,y*/
for(i=0;i<3;i++)
{
x=Z[i]/(1.0+s*(K[i]-1.0));
y=K[i]*Z[i]/(1.0+s*(K[i]-1.0));
printf("x%d=%f,y%d=%f ",i+1,x,i+1,y);
}
V=s*F;
printf("V=%fkmol ",V);
L=F-V;
printf("L=%fkmol ",L);//輸出結果//
return 0;
}
/*int main(int argc, char* argv[])
{
printf("Hello World! ");
return 0;
}*/

圖2 運行結果圖
將上述程序輸入到VC++中,輸入進料條件、溫度、汽化分率初值及迭代精度后,運行結果如圖2所示。
通過C語言編寫的模塊程序對等溫閃蒸過程的計算可以看出:該計算程序模塊中用的牛頓迭代算法,收斂速度較一般的插值計算快,該程序模塊通用性強,在解決閃蒸問題的過程中,只需要輸入已知的參數便可以快速迭代(本例僅需迭代3次)計算得出相應的平衡汽液相組成,且計算結果精準,滿足迭代精度。
化工分離工程是一門不斷發展的應用學科,我們可以通過將化工模擬軟件和面向過程、抽象化的通用程序設計語言應用在課堂教學之中,不但有助于提高學生的學習興趣、加強學生對理論知識的理解和應用,同時能夠使課程教學與實際工程問題有機地結合,加強化工分離工程的實踐教學,提高學生分析和解決實際工程問題的能力,對于培養化工類學生的工程思維能力起著重要的作用。