外压圆筒和球壳设计程序的编制设计论文.docx
《外压圆筒和球壳设计程序的编制设计论文.docx》由会员分享,可在线阅读,更多相关《外压圆筒和球壳设计程序的编制设计论文.docx(26页珍藏版)》请在冰豆网上搜索。
外压圆筒和球壳设计程序的编制设计论文
成绩
院系:
XX学院
年级:
XXXX级
专业:
过程装备与控制工程
XX大学
-本科生毕业论文
题目:
外压圆筒和球壳的设计
程序编制
作者:
学号:
指导教师:
摘要
以《GB150-89钢制压力容器》为设计计算基本准则,确定受外压压力容器设计计算各类规范规定的结构参数、材料参数,用MicrosoftVisualC++6.0作为外压压力容器设计计算编程环境,制作设计程序的编制。
关键词:
面向对象的程序设计,数据库,数据库与程序的链接
目录
第一章绪论3
1.1设计计算的程序编程的发展概述3
1.2设计计算的程序编程目的和意义3
1.3外压容器计算编程的基本思路3
第一章外压圆筒和球壳的程序编程5
2.1外压圆筒和管子5
2.1.1外压圆筒和管子计算;5
2.1.2外压圆筒和管子校核;11
2.2外压球壳的设计计算和校核;12
2.2.1外压球壳的设计计算;12
2.2.2外压球壳的设计校核;13
2.3外压容器的加强圈计算和校核;13
2.3.1外压容器的加强圈计算;13
2.3.2外压容器的加强圈校核;14
第三章 程序界面设置和操作说明;15
3.1程序操作界面;15
第四章附件;17
4.1VC++数据库链接程序;17
4.2外压容器部分参数表;20
第五章参考资料及文献;21
第一章绪论
1.1设计计算的程序编程的发展概述
化工设备设计中,无论是结构设计还是强度计算,必须遵守多个有关的国标规范中规定的结构与算法。
对于一个化工设备设计的评价,国标起着规定性与强制性的作用,也是仲栽的根本依据。
国标对于化工设备设计的主要方面,设备的整体设计,零件的结构与强度设计,有关的计算方法,材料选择等都有详细的规定。
它统一了化工设备设计涉及的主要方面,同时也为设计的计算机程序化提供了根本依据。
众多的结构参数.图表和繁索的算法,使得手工计算量大,设计周期长,且难以保证设计结果的正确性。
随着计算机的普及,设计单位和设计者都迫切需要有一个完整的设备设计程序系统来替代手工设计。
计算软件过去一般是在DOS操作系统下应用汇编语言或C语言开发。
Windows操作系统的普及应用,尤其是可视化开发软件MSVisual编程软件的出现,为软件开发提供了强大的图形界面及人际交换功能,使得数据的输入输出更为方便,开发出来的应用程序具有良好的人机交互功能。
此设计就是以WindowsXP简体中文版作为系统平台,MicrosoftVisualC++6.0作为编程环境,依据《GB150-89钢制压力容器》所编制的卧式容器设计计算程序。
随着计算机编程技术的逐步成熟,计算软件在化工设备设计计算中得到了广泛的应用,同时该软件对操作者的计算机水平要求不高,只要知道Windows的基本操作就可轻松的完成设计任务,当然,相关的专业知识是不可避免的。
所以用MicrosoftVisualC++6.0作为编程环境,制作外压容器设计程序的编制给用户带来了极大的便利。
1.2设计计算的程序编程目的和意义
外压容器设计计算的程序编程是以国标为依据,所编制的设计计算应用软件,它包含了国标中所有计算,为化工设备设计提供了软件支持,使得过去大量的繁琐的手工计算,变成了计算机计算,让设计人员可以更快的得到计算结果,并且准确率大大提高。
设计计算软件如果能在化工设备设计中得到广泛应用,将大大提高设备的设计效率,使得校核性计算变得更容易,甚至可以推动整个化工行业的发展。
1.3外压容器计算编程的基本思路
在本设计中,采用VC++进行程序编制,以《GB150-89钢制压力容器》为设计计算基本准则,确定受外压容器的计算各类规范规定的结构参数、材料参数,各种零件类型按逻辑分类,输入输出数据的组织和存储及计算结果格式化输出。
作为一个完整的设计软件,需满足以下基本要求:
1)包含有关规范中规定各种零、部件的设计[2]~[5]。
2)包含规范中给出的各种材料的强度参数数据库[1]。
3)用户输入设计原始数据后,程序完全实现自动计算,计算中所有中间几何数据、材料特性等根据输入的原始参数从数据库中自动自动检索。
4)对设计项目的原始设计数据、计算结果,系统能以用户的命名的文件存储与查询。
能够按项目出设计说明书。
5)数据库应可随规范修改而修改,应具有数据库修改功能模块,以便用户可自行修改。
6)具有输入数据的合法性和合理性检查功能,拒绝非法数据的输入,并提出警告。
对输入不合理数据而导致的计算失败给出错误原因。
利用VC++进行Windows应用程序设计时,通过消息映射,消息就和它处理的函数对应起来。
对《GB150-89钢制压力容器》中的外压容器的设计计算进行程序编制。
由用户提供的参数(或系统自定参数)进行相应的计算,再在计算结束后,进行相关的校核。
如果校核失败,就在改变一些参数再进行计算、校核,直至所得计算结果满足用户的要求。
根据程序的功能,画出如下的逻辑关系图:
按照以上要求将对话框的创建分为以下步骤:
1:
先创建一个应用程序框架。
在选择“文件”,新建的对话框菜单里选择“工程”标签,这时显示出一系列的应用程序项目类型;将项目工作文件夹定位在自己所需的路径,并在“工程”对话框中输入项目名称。
确定之后,从应用程序类型中选择“单个文档”。
其他默认。
单击“确定”系统开始自动创建生成基本的应用程序框架。
2:
在已经打开的工程文件中,利用资源编辑器设计一个含有各种控制件的对话框资源。
在系统自动生成的对话框资源中选择Dialog项,单击选择插入新的Dialog,系统就会自动为当前程序添加一个对话框资源,并出现对话框资源编辑器,在这里可以通过控件工具栏和布局工具栏向对话框添加和布局控件,并可设置对话框属性。
3:
利用ClassWizard来创建对话框类,它是由CDialog类派生得来的,并添加成员变量。
在对话框资源模版的空白区域内双击鼠标,弹出询问是否为对话框资源创建一个新类。
单击OK按钮,将弹出一个新的Class,其中用户可以自己输入类名,它是由基类CDialog类派生得来的,并添加成员变量。
4:
将对话框资源中的控件与对话框类中的消息处理函数连接起来。
5:
利用ClassWizard添加与对话框控件有关的成员变量,数据交换函数及数据确认函数。
6:
对一些特殊的控件初始化函数及西控制函数进行编辑。
7:
把对话框与具体的菜单命令相联系。
具体到外压容器的计算编程,依据国标可将程序分为鞍式支座支承的卧式容器和圈座支承的卧式容器,对两个块分别进行对话框设计。
第一章外压圆筒和球壳的程序编程
2.1外压圆筒和管子
2.1.1外压圆筒和管子计算;
a,首先假设δn,令δe=δn-C,定出L/D0和D0/δe,
b,在表2.1中用L/D0和D0/δe查找系数A,(遇到中间值用内插法),
当L/D0值大于50时,用等于50查表;当L/D0小于0.05时,用等于0.05查表;
CEdit*pe=(CEdit*)GetDlgItem(IDC_EDIT_D0DE);
CStringstr;
doublemid;
doubleld,ldsm1,ldlg1;//sm所对应的查询集中,ld处于第二列值ldsm1//ld为给定值
doubleldsm2,ldlg2;//lg所对应的查询集中,ld处于第二列值ldsm2doubleasm1,alg1,asm2,alg2;//分别对应于sm,lg查询的A值时,所得数值
doublea1,a2,a;//a1,a2为第一、二次插值所得,a为最终插值所得
intsm,lg;//第一列大、小序号
intn1,n2;//分别二次查询所得数组长度
intn,sm1,lg1,sm2,lg2;//n为中间变量,sm1,lg1为第一次查询第二列的大、小序号.\
//sm2,lg2为第二次查询第二列的大小序号
//查询第一列序号sm,lg
CStringstr2;
doubled0de;
CEdit*p=(CEdit*)GetDlgItem(IDC_EDIT_D0DE);
p->GetWindowText(str2);
d0de=atof((LPCSTR)str2);
if(d0de<4)
{doubleA,cursel;
A=1.1/(d0de*d0de);
if(A>0.1)
{
A=0.1;
}
str.Format("%10.5f",A);
cursel++;
MessageBox("A="+str);
MessageBox("不需要第二次查询");
return;
}
pe->GetWindowText(str);
mid=atof((LPCSTR)str);
if(!
Btwn(mid,this->m_pD0DE,this->m_pNumD0DE,sm,lg,TRUE))
{
MessageBox("查询不成功");
return;
}
else
{
//根据第一列序号sm从数据库查询相应的2列
VARIANTvid;
_variant_tvRowsAffected;
m_pRecordset->MoveFirst();
m_pRecordset->Move(sm);//第一列数据记录集移到所要的行
vid.dblVal=m_pRecordset->GetCollect("d0de");
vid.vt=VT_R8;
this->m_Command->ActiveConnection=this->m_pConnection;
this->m_Command->CommandTimeout=5;
this->m_Command->CommandType=adCmdText;
this->m_Command->CommandText="selectld0,aFROMT41whered0de=?
";//?
为参数占位符
this->m_pRecordset1=this->m_Command->Execute(&vRowsAffected,&vid,adCmdText);
n1=0;
//计算第二、第三列查询数据的长度,以便开辟新内存
m_pRecordset1->MoveFirst();
while(!
m_pRecordset1->adoEOF)
{
n1++;
m_pRecordset1->MoveNext();
}
m_pRecordset1->MoveFirst();
m_pLD1=(double*)calloc(n1,sizeof(double));
m_pA1=(double*)calloc(n1,sizeof(double));
//第二列第三列所有数据,放在给定内容中,以便以后使用方便
n=0;
while(!
m_pRecordset1->adoEOF)
{
m_pLD1[n]=m_pRecordset1->GetCollect("ld0");
m_pA1[n]=m_pRecordset1->GetCollect("a");
n++;
m_pRecordset1->MoveNext();
}
//根据L/D0(sm)找出A值,先判断是否在表的值域内
doublewxmin,wxmax;
CStringstr1;
wxmin=10000;
wxmax=0;
for(n=0;n{
if(wxmin>m_pLD1[n])wxmin=m_pLD1[n];
if(wxmax}
this->m_pld0.GetWindowText(str1);
ld=atof((LPCSTR)str1);
if(ld>wxmax||ld{
MessageBox("L/D0超出范围,若L/D0>50,请将其设为50,若L/D0<0.05,请将其设为0.05;在进行查询;");
return;
}
//找出ld值所在大、小序号sm1,lg1
if(!
Btwn(ld,m_pLD1,n1,sm1,lg1,TRUE))
{
MessageBox("查询不成功");
return;
}
//按sm1,lg1找到相应L/D0和A值
ldsm1=m_pLD1[sm1];
ldlg1=m_pLD1[lg1];
asm1=m_pA1[sm1];
alg1=m_pA1[lg1];
//计算第一次插值得a1
if(sm1==lg1)
{
a1=asm1;
str1.Format("a1=%10.6f",a1);
MessageBox(str1);
}
else
{
a1=asm1+(ld-ldsm1)/(ldlg1-ldsm1)*(alg1-asm1);
str1.Format("a1=%10.6f",a1);
MessageBox(str1);
}
//第一次A值查询完成
//查询第二次a值
if(sm==lg)//不需第二次查询
MessageBox("不需要第二次查询");
else
MessageBox("需要第二次查询");
if(m_pLD1!
=NULL)free(m_pLD1);//存放第二列数据的指针
if(m_pLD2!
=NULL)free(m_pLD2);
if(m_pA1!
=NULL)free(m_pA1);//存放第三列数据的指针
if(m_pA2!
=NULL)free(m_pA2);
}
//最后,进行内存清理
returnTRUE;
}
BOOLCCXXSADLG:
:
CXT41(doublep1,doublep2,double&a)
{
CStringtagname,str2,str3,str1;
tagname="T41";
str1="d0de";
str2="ld0";
str3="a";
if(!
CXTABLE(tagname,str1,str2,str3,p1,p2,a))
returnFALSE;
returnTRUE;
}
表2-1,在外压或轴向压缩载荷下,圆筒几何参数数据表,
C,用查到的A值图2-2,得出B;
插图方法同A值额插图方法;
若A落在,材料线的右边,就找到两线的交点,再右移得到系数B;
若A落在材料线的左边,则无法在图上查到B
图2-2,外压圆筒和球壳厚度计算图(屈服点σs<207MPa的碳素钢)
D,计算许用压力;
程序如下voidCYTDlg:
:
GetValue()
{CStringstr;
doubleA,B,P,C,D0,E,deltan,deltae,L,Di,sigmat,sigmats;
A=x[1];
B=x[2];
P=x[3];
C=x[4];
D0=x[5];
E=x[6];
deltan=x[7];
deltae=x[8];
L=x[9];
Di=x[10];
sigmat=x[11];
sigmats=x[12];
//D0/deltae>=10的圆筒和管子
//1,δn,令δe=δn-C,定出L/D0和D0/δe,
doublexyp,xyp1,xyp2,sigma0,d1,sigma1,sigma2;
deltae=deltan-C;
d1=D0/deltae;
if(d1>=10)
{if(B=-1)
xyp=2*A*E/(3*d1);
else
xyp=B/d1;
}
elseif(10>d1&&d1>=4)
{
xyp1=(1.625/d1-0.0625)*B;
sigma1=2*sigmat;sigma2=0.9*sigmats;
if(sigma1>sigma2)
{
sigma0=sigma2;
}
else
{
sigma0=sigma1;
}
xyp2=(2*sigma0/d1)*(1-1/d1);
if(xyp1>xyp2)
xyp=xyp2;
else
xyp=xyp1;
}
elseif(d1<4)
{
doublesigma1,sigma2;
if(A>0.1)
{A=0.1;
}
xyp1=(1.625/d1-0.0625)*B;
sigma1=2*sigmat;sigma2=0.9*sigmats;
if(sigma1>sigma2)
{
sigma0=sigma2;
}
else
{
sigma0=sigma1;
}
xyp2=(2*sigma0/d1)*(1-1/d1);
if(xyp1>xyp2)
xyp=xyp2;
else
xyp=xyp1;}
2.1.2外压圆筒和管子校核;
if(xyp>=P)
{str.Format("%10.5f",xyp);
cursel++;
m_ctrlList2.AddString("数值计算结果---->[p]="+str);
cursel++;
m_ctrlList2.AddString("圆筒设计满足要求");
}
else
{
str.Format("%10.5f",xyp);
cursel++;
m_ctrlList2.AddString("数值计算结果---->[p]="+str);
cursel++;
m_ctrlList2.AddString("圆筒设计不能满足要求,请重新设计");
MessageBox("[p]
}
end:
;
m_ctrlList2.SetCurSel(cursel);
2.2外压球壳的设计计算和校核;
2.2.1外压球壳的设计计算;
voidCQKDlg:
:
GetValue()
{CStringstr;
doubleB,P,C,D0,E,deltan,deltae,L,Di,sigmat,sigmats,Ri;
B=x[1];
P=x[2];
C=x[3];
E=x[4];
deltan=x[5];
deltae=x[6];
Ri=x[7];
//假设δn,
deltae=deltan-C;
doubled1,xyp,A;
d1=Ri/deltae;
A=0.125/d1;
//不能查到B值时,
if(B==-1)
{
xyp=0.0833*E/(d1*d1);
}
//可以查到B值时,
else
{
xyp=B/d1;
}
//判断计算是否合格,
2.2.2外压球壳的设计校核;
if(xyp>=P)
{str.Format("%10.5f",A);
cursel++;
m_ctrlList2.AddString("A-->"+str);
str.Format("%10.5f",xyp);
cursel++;
m_ctrlList2.AddString("数值计算结果---->[p]="+str);
cursel++;
m_ctrlList2.AddString("圆筒设计满足要求");
}
else
{str.Format("%10.5f",A);
cursel++;
m_ctrlList2.AddString("A-->"+str);
str.Format("%10.5f",xyp);
cursel++;
m_ctrlList2.AddString("数值计算结果---->[p]="+str);
cursel++;
m_ctrlList2.AddString("圆筒设计不能满足要求,请重新设计");
MessageBox("[p]
}
end:
;
m_ctrlList2.SetCurSel(cursel);
}
2.3外压容器的加强圈计算和校核;
2.3.1外压容器的加强圈计算;
voidCJQDlg:
:
GetValue()
{CStringstr;
doubleIs,deltan,deltae,D0,Ls,As,B,xyp,E,I,A,o;
Is=x[1];
deltan=x[2];
deltae=x[3];
D0=x[4];
Ls=x[5];
As=x[6];
E=x[7];
xyp=x[8];
A=x[9];
o=x[10];
B=xyp*D0/(deltae+As/Ls);
str.Format("%10.5f",B);
cursel++;
m_ctrlList2.AddString("B="+str);
//查图,确定A值;
if(o=-1)
{A=1.5*B/E;
I=(D0*D0*Ls*(deltae+As/Ls)/10.9)*A;
str.Format("%10.5f",A);
cursel++;
m_ctrlList2.AddString("A="+str);
}
else
{I=(D0*D0*Ls*(deltae+As/Ls)/10.9)*A;
}
2.3.2外压容器的加强圈校核;
if(Is>=I)
{str.Format("%10.5f",I);
cursel++;
m_ctrlList2.AddString("数值计算结果---->I="+str);
cursel++;
m_ctrlList2.AddString("圆筒设计满足要求");
}
else
{
str.Format("%10.5f",I);
cursel++;
m_ctrlList2.AddString("数值计算结果---->I="+str);
cursel++;
m_ctrlList2.AddString("圆筒设计不能满足要求,请重新设计");
MessageBox("Is
}
end:
;
m_ctrlList2.SetCurSel(cursel);
}
第三章 程序界面设置和操作说明;
3.1