换热设备广泛应用于石油化工、炼油、化肥、动力、轻工、冶金、核工业等工业部门。随着CAD/CAE/CAM技术的发展,二维平面图已远远不能满足设计和制造的需求。而三维模型具有很强的可视性,能准确反映设计者的设计思想;对于复杂的结构,二维图形不能够准确的表达出各零部件的空间位置关系,而三维实体图形具有空间真实感,能明确表达出各零部件的空间位置关系,避免各零件之间发生碰撞和干涉。在对换热设备及其零部件设计的同时需要对换热设备零部件进行有限元分析和优化设计(特别是对非国标零部件),首先需要创建零部件的三维模型。据统计,创建模型所耗费的时间占整个分析过程的87%[1]。特别是在优化设计过程中,要根据优化结果不断进行三维模型的修改和优化,这给设计分析人员手工建模带来了很大的重复的麻烦,大大降低了设计分析效率。
随着CAD技术的发展,关于机械零部件的绘图软件包应运而生,但它们的三维功能较弱。国外一些大的软件商也推出了三维软件(如ProE等),但价格较高,令一般的用户望而却步。所以开发专业的换热设备零部件的三维造型系统具有很大的必要性和实际意义。
著名的有限元分析软件ANSYS可与AutoCAD软件共享数据,接受AutoCAD建立的三维模型[2]。为此,作者运用AutoCAD二次开发技术开发了换热设备零部件的三维造型系统。运行该系统,输入必要的设计参数,系统将自动快捷的生成精确的零部件三维模型,实现了换热设备零部件的三维参数化绘图。
1 三维造型系统的开发环境
ObjectARX2000是Autodesk公司随着AutoCAD2000推出的新一代的功能强大的二次开发工具。它使用面向对象的C++应用程序开发机制,以动态链接的形式与AutoCAD共享地址空间,能够直接利用AutoCAD的内核代码,访问AutoCAD的数据库、图形系统及几何造型核心[3],扩充AutoCAD的类和协议,创建新的AutoCAD命令,并可被AutoCAD环境直接调用,具有较高的程序开发与执行效率。ARX程序命令的消息模型如图1所示。
因此,运用AutoCAD二次开发技术,在VC++6 0和ObjectARX2000的环境下,编写了ARX应用程序,开发了换热设备零部件三维造型系统。在AutoCAD环境下加载ARX应用程序,程序向AutoCAD命令堆栈中添加用户自定义命令(如tubesheet)。调用该命令,ARX应用程序将自动处理生成三维实体模型。
2 ARX程序基本框架的生成
VisualC++6 0使用非常友好的操作界面———DeveloperStudio集成开发环境,它集编辑、编译、连接、调试、向导等多项功能于一体,并且提供了目前已成为业界标准的MFC(MicrosoftApplicationFoundationClasses)类库[4]。运行ObjectARX2000软件包,可以把ObjectARX嵌挂到VC++6 0编程环境中,它所提供的库函数、头文件以及详细文档等也嵌挂到VC++6 0的环境中。在VC++的集成开发环境下,通过ARX应用程序向导(ObjectARX2000AppWizard),可以方便快捷的建立起ARX程序的基本框架。
3 开发三维造型系统的关键技术
3 1 三维造型用户界面的定制
运用AutoCAD界面定制技术,编辑AutoCAD应用程序的菜单文件acad mnu,在AutoCAD中添加换热设备零部件的下拉式菜单(如图2所示),并使菜单项中各项与各自的ARX程序路径相连接,这样点击菜单可将ARX程序定义的用户命令自动添加到AutoCAD内部命令堆栈中。
3 2 人机交互界面的创建
微软的基础类库MFC是VC++程序的设计一个重要资源,在ARX程序中使用MFC的最明显的优点是可以充分利用VC++开发环境提供的各种类资源和控件资源,实现程序界面的可视化设计,大大提高程序开发效率。利用MFC开发环境开发各个零部件的人机交互的对话框界面(如图3所示),用户可以在对话框界面中输入或修改设计参数,实现三维实体建模;通过修改设计参数,可以完成换热设备中非标准零部件的三维造型。
3 3 三维造型的方法
构造三维模型的方法有3种,即线框造型、表面造型和实体造型。其中三维实体造型具有体的特征,能显示零件形状,给人以真实的空间感觉,并能利用剖切来检查壁的厚薄、孔是否相交等问题;还可以进行零件的物性特性计算,如计算体积、面积、重心、惯性矩等,因此实体造型能够较全面地反映零件的物理特性。
对于一些简单的实体,如长方体、圆柱体、球体等,可以借助AutoCAD2000中的三维实体造型核心即ACIS(AmericanCommitteeforInteroperableStandards)系统中的成员函数如virtualAcad::createBox(x,y,z)来生成和编辑。对于复杂的三维实体模型,可以采用基于二维对象运用挤出、旋转和布尔操作来生成三维实体。
3 3 1 挤出法(Extrude)
先生成二维实体对象如圆(AcDbCircle)、椭圆(AcDbEllipse)、封闭二维多段线(AcDbPolyline)等,然后按挤出高度或指定路径生成新的三维实体。在ARX应用程序中,通过调用AcDb3dSolid类的成员函数extrudeAlongPath()来实现,其原型如下:Acad:extrudeAlongPath(AcDbRegion region,AcDbCurve path),其中参数region表示指向前面生成的二维封闭实体面域对象的指针,path表示挤出路径。在换热设备零部件中,一些细长的零件例如换热管、排污管、斜截弯管等可采用挤出法生成三维模型。
3 3 2 旋转法(Revolve)
先生成二维实体对象,按指定的旋转轴旋转来生成新的三维实体。在ARX应用程序中,通过调用AcDb3dSolid类的成员函数revolve()来实现,其原型如下:Acad::revolve(AcDbRegion region,AcGePoint3d&axisPoint,AcGeVector3d&axisDir,doubleAngleOfRevolution),其中参数region表示指向前面生成的二维封闭实体面域对象的指针,axisPoint为旋转轴上的一点,axisDir为轴的方向矢量,AngleOfRevolution为旋转角度(弧度)。
换热设备的零部件大多为绕旋转轴的回转体,因此可用二维多段线Polyline生成回转体的对称二维图,然后调用函数revolve()生成三维回转实体。3 3 3 布尔运算(Boolean)
对于一些复杂的实体造型,可以在挤出和旋转法生成三维实体的基础上,通过一定的布尔运算来实现。布尔运算有3种:并(union)、交(subtract)、差(intersection)。在ARX程序中通过调用AcDb3dSolid类的成员函数booleanOper()来实现。其原型如下:Acad::booleanOper(AcDb::BoolOperTypeoperation,AcDb3dSolid pSolid),其中参数operation为布尔运算类型,布尔并为AcDb::kBoolUnite,布尔交为AcDb::kBoolIntersect,布尔差为AcDb::kBoolSubtract,pSolid表示另一个参加布尔运算的实体的指针。
换热设备中大多数零部件非常复杂,需要联合运用挤出、旋转和布尔运算才能完成零部件的三维造型。下面通过延长部分兼做法兰的管板的三维实体造型,介绍换热设备零部件三维造型系统的具体开发过程。
4 三维造型实例
管板是换热设备中重要的部件之一,经常要对管板进行温度场和应力场的有限元分析,因此需要建立管板的三维模型,并根据分析结果不断的优化、修改管板的模型。如果用手工建模,势必将加大设计分析人员的枯燥的工作量,大大降低工作效率。而采用参数化程序建模,用户可以在很短时间内建立和优化修改模型。
管板是一块按照布管方式开了许多管孔的圆平板,管板的三维造型就是通过三维参数化绘图,在输入了筒体的公称直径DN,换热管的外径dh,管板的厚度H和布管方式等,直接生成管板的三维实体。下面以单壳程单管程的正方形方式布管的延长部分兼做法兰的管板为例,叙述管板三维造型程序的开发过程。
4 1 管板二维对象的生成
管板在结构上属于回转体,因此只需生成管板截面的一半即可,如图4所示。建立坐标系,给出图示各点的坐标,用函数AcDbPolyline()生成封闭的二维多段线,并生成二维图形域,调用函数revolve(),将此二维图形域绕Y轴旋转生成平板三维模型(未挖孔)。
4 2 管板的布管程序算法
以管子正方形排列的单管程布管为例,建立计算模型,如图5所示。
程序采用迭代的方法确定换热管的中心位置,其迭代过程如下。
4 2 1 确定迭代初值
中心布管奇数排列时,迭代式为:
x=x0,x=x+p
y=y0,y=y+p
中心布管偶数排列时,迭代式为:
x=x0+p/2,x=x+p
y=y0+p/2,y=y+p
式中x0,y0为迭代初值,根据管程情况取值;p