在线工博会

利用COM技术的钣金件展开系统的开发
四川大学 廖敏 殷国富 罗中先
为节省流量,手机版未显示文章中的图片,请点击此处浏览网页版
摘要:应用COM的模块化编程技术定制钣金展开的计算模块,并在AutoCAD2002基础上开发钣金件展开系统。利用COM模块完成钣金展开计算,VB程序化设计实现计算数据在数据库中的存取,AutoCAD二次开发工具VBA设计用户界面和调用AutoCAD内部命令实现钣金展开图的绘制。COM模块编程的独立性、可重用性和AutoCAD良好的二次开发功能的方法,是钣金件展开CAD的一种简单可行的方式,而且展开计算模块可移植到其它的CAD系统。
关键词:组件对象模型;钣金;展开;二次开发;类型库
钣金件常用在汽车、船舶、冶金、化工、压力容器和通风工程等工业中。钣金加工过程中展开下料是第一道工序,也是最重要的一道工序。传统的钣金件展开下料通常是采用人工作图法或凭工人师傅的实践经验来进行,不仅效率低,而且误差大,成本也高。特别是对于放大样展开下料,前面两种方法有时风险很大。CAD技术正是解决这一问题的有效手段,它不仅大大提高钣金工展开的效率,而且也大大提高产品质量。常用的CAD技术有程序法、计算机辅助绘图法和计算机辅助设计法[1]。
AutoCAD软件为用户提供了友好的人机交互界面,具有很强的作图和编辑功能,在许多中小型企业中得到广泛地应用。同时,AutoCAD软件具有良好的二次开发功能。利用COM技术,在AutoCAD基础上开发的钣金件展开应用系统,主要是利用AutoCAD系统良好的二次开发功能。钣金件展开应用系统采用COM模块化程序设计,设计钣金展开计算模块,利用VB.NET、SQLSever2000、AutoCAD2002及其二次开发工具VBA进行程序开发,通过数据库管理,实现AutoCAD和计算应用模块之间的数据传递和钣金件展开图形的绘制。
1 COM技术
COM定义了一种创建、使用和扩展基于组件模型的应用标准,是面向对象技术的扩充。COM规范所定义的组件模型除具有面向对象的特点外,还有其区别于面向对象的特征。
(1)语言无关性。COM规范采用一种二进制代码级标准,而不是源代码级标准,因此编写组件所使用的语言与编写客户程序所使用的语言可以不同。许多高级语言都提供对COM编程的支持,如VC、Delphi、VB、C++Builder等。COM的语言无关性,为跨语言的合作开发提供了统一的标准。
(2)进程的透明性。客户程序创建COM对象使用一致的方法,所有实现细节对客户来说都是透明的。这就是创建COM对象的进程透明性。同样地,调用COM接口也具有进程透明特性。客户程序创建组件对象后,得到组件对象的接口指针,通过该指针就可以调用组件对象的成员函数,客户程序不必知道组件对象在哪里。
(3)可重用性。对象重用是COM规范很重要的一个方面,它实现了接口和实现的分离。客户程序不知道COM对象的内部具体细节,完全被封装了起来,它所看到的只是一个接口。因此组件对象的重用性是建立在组件对象的行为方式上,而不是具体的实现上,程序员会以不同的方式来编写客户程序和组件程序。实现COM重用性可利用包容和聚合两种方法[2]。
在COM标准中,一个组件程序也称为一个模块,它可以是一个DLL(动态链接库),这种组件称为进程内组件;也可以是一个可执行程序,这种组件称为进程外组件。一个组件程序可以包含多个COM对象,每一个COM对象可以实现多个接口。客户程序与COM对象之间的调用有三种类型:COM对象与客户程序在同一个进程内,在同一客户机的不同进程内或在网络上的不同机器上。
COM与客户程序运行在同一进程地址空间。例如,在IE或Netscape中可以浏览Web页面中嵌入的ActiveX控件。ActiveX控件被下载到客户机上并激活与Web浏览器在同一进程中。客户程序通过直接调用COM接口与位于进程内的COM服务器通讯。在同一进程中运行,可以大大提高应用程序的运行效率,所以这种方式非常适用。进程内COM组件与客户程序的通讯如图1所示。

(图片)

图1 进程内组件与客户程序通讯

COM的另一种形式是可执行程序(EXE),它与同一机器上的客户程序位于不同的进程空间。例如嵌入在Word文档中的Excel表格就是运行在同一机器上的不同的应用程序。
COM与客户程序运行在不同的机器上。例如,一个VB数据库应用程序被连接到网络上其它机器上的应用程序服务器。远程服务器使用分布式COM访问接口与应用程序服务器通讯。
当在不同的进程或在不同机器上时,COM使用代理启动远程过程调用。代理与客户程序在同一进程中,所以从客户端来看所有的接口调用都是相似的。代理会截取客户程序的调用并传送到正在运行的COM对象。
2 系统设计
2.1 系统功能和结构
在AutoCAD基础上的钣金展开放样系统主要是完成常用钣金件的展开设计。用户通过在AutCAD中定制的菜单选择要展开的钣金件,然后根据系统提示输入钣金件的结构参数,系统就可以利用这些参数进行展开计算,并将展开计算的结果存入数据库中,最后系统利用计算结果绘制钣金件的展开图。计算结果和钣金件展开图可提供给后续的钣金排样下料和其它加工工艺。因此,系统应具有如下功能:(1)提供具有良好的人机交互界面,用户可以方便地输入有效参数;(2)根据用户输入的计算参数,调用COM接口函数按一定的算法完成钣金展开计算;(3)通过VB编程操作数据库,在数据库中保存计算结果,并将计算结果以文本文件的形式另存,以便用于指导现场展开放样;(4)利用AutoCAD的二次开发工具VBA和VB编程,从数据库中读取展开计算数据并绘制展开图;(5)预留功能。如考虑钣金件的加工需要,将直接利用钣金展开结果输出数控机床加工G代码。
此外,还要充分利用AutoCAD系统管理展开图形,如修改、保存和打印图形,或转换图形文件的格式,以便于AutoCAD系统与其它CAD应用系统之间的数据文件交换和传输。因此,该系统的功能结构简图如图2所示。

(图片)

图2 钣金展开系统结构简图

2.2 系统开发思路
2.2.1 定制钣金展开菜单
参照相关的钣金工展开手册,并按照钣金件的形状特点和功能进行分类。根据钣金件的分类,利用AutoCAD二次开发工具VBA定制钣金展开的系统菜单。在AutoCAD2002中按照如下方法定义。
’定制钣金展开菜单
SubSheetMenu() 
’定义变量 
DimNewMenuGroupAsAcadMenuGroup 
DimNewMenuAsAcadPopupMenu
DimNewMenuItemName(5)AsAcadPopupMenu 
DimSubMenuItemAsAcadPopupMenuItem 
…… 
’定义下拉菜单群组
SetNewMenuGroup=ThisDrawing.Application._
MenuGroups.Item(0) 
’创建下拉菜单列
SetNewMenu=NewMenuGroup.Menus._
Add(”钣金展开”+”(”+Chr(Asc(”&”))+”S)”) 
’增加子菜单列
SetNewMenuItemName(0)=NewMenu._
AddSubMenu(0,”圆锥台”) 
…… 
SetNewMenuItemName(5)=NewMenu._
AddSubMenu(5,”三通管”) 
’增加次级子菜单列
 SetSubMenuItem=NewMenuItemName(0)._
AddMenuItem(NewMenu.Count+1,_
”正圆锥台”,”-vbarunCylinderForm1”&vbCr) 
……
NewMenu.InsertInMenuBar(ThisDrawing.Application._
MenuBar.Count+1)
EndSub
由上面的VBA程序定制钣金展开菜单宏,然后在AutoCAD2002环境中加载并运行该宏,就可以生成钣金展开菜单。如图3所示。

(图片)

图3 定制钣金展开菜单

2.2.2 钣金展开计算模块
计算模块主要完成钣金展开的计算,并由AutoCAD系统将计算结果写入SQLServer数据库中。组件对象模块的开发可以采用VC++、VB和Delphi等编程语言来实现。这里采用VB.NET来实现COM模块的定义。在.NET中,类接口是未在托管代码中显式定义的接口,它将公开在.NET对象上显式公开的所有公共方法、属性、字段和事件。此接口可以是双绑定接口,也可以是仅调度接口。类接口将接收.NET类本身的名称,并在名称前加有下划线。例如,对于Santong类,类接口为_Santong,.NET对象将向COM客户端公开该接口。该类的定义为:
_
PublicClassSantong
’支管任一素线
SubLn()
’支管钢板下料展开长
SubS1()
’主管孔各点所对应弧长
SubSn()
’孔实半长素线
SubPn()
…… 
EndClass
COM客户端可以获取指向_Santong类接口的指针,该类接口在类型库导出程序(Tlbexp.exe)工具生成的类型库中进行描述。Tlbexp.exe是一种命令行工具,它用于将包含在程序集中的类和接口转换为COM类型库。当类的类型信息成为可用时,COM客户端就可以创建.NET类的一个实例并调用该实例的方法,就好像它是COM对象一样。使用Tlbexp.exe从程序集导出类型库文件,在命令行提示处键入下列命令:
TlbexpSheetmetalCalc.dll /out:SheetCalclib.tlb
大多数类型在由COM应用程序使用时,都需要类型库。在AutoCAD中,打开VisualBasic编辑器,通过“工具”菜单下面的“引用”命令,将SheelCalclib.tlb引用到工程中,COM客户端(AutoCAD)就可以利用CreateObject函数创建组件对象,并可调用Santong类对象的方法,从而实现对钣金件的展开计算。
2.2.3 钣金件展开图的生成
由于钣金展开计算的结果是一些长度值,不能直接用于绘制展开图,必须将计算结果从数据库中读出到应用程序中,利用这些数据计算绘图所需点的坐标,最后通过VBA调用并操作AutoCAD绘图命令绘制展开图。钣金件展开计算并绘图步骤如下。
(1)利用VBA开发的钣金展开菜单,选择要展开的钣金对象;
(2)根据菜单命令激活相应的钣金展开设计宏,在所弹出的对话框中输入钣金展开计算参数;
(3)AutoCAD系统将计算参数带入到COM计算模块的接口函数中进行计算;
(4)将计算结果保存在数据库中,并直接生成该计算结果的文本文件;
(5)AutoCAD系统从数据库中读入数据,并利用该数据再次计算绘图所需点的坐标;
(6)由VBA直接操作AutoCAD的绘图命令,设置绘图环境和绘图,并结束整个展开计算和绘图操作。
根据钣金展开流程,用户要在AutoCAD应用系统中首先输入钣金展开的已知条件参数,然后在COM模块中进行计算。通过AutoCAD与SQLServer数据库的通讯存取计算数据,利用VBA操作AutoCAD系统,设置并完成绘图,自动生成钣金展开图形。最后可以在AutoCAD环境中查询各种尺寸、编辑和出图,充分利用AutoCAD对二维工程图的管理和绘图编辑功能。程序设计从略。
3 钣金件展开应用实例分析
下面以等径斜交三通管为例简单地说明基于COM的钣金件展开应用系统的开发过程和方法。首先在AutoCAD2002中应用二次开发工具VBA定制钣金展开应用部分的菜单。其次,通过VisualBasic编辑器在工程中引用前面讨论的钣金展开计算模块转换生成的类型库,利用VBA和VB程序化设计完成计算和绘图。当用户在钣金展开菜单中选择等径斜交三通管为展开对象后,系统将弹出如图4所示的对话框。

(图片)

图4 等径斜交三通管计算对话框

在该对话框中输入等径斜交三通管展开参数并单击确定按钮,则AutoCAD系统会利用计算参数并调用钣金展开组件中的接口函数进行计算。相应的展开计算公式如下[3]:
支管任一素线长:

(图片)

式(1)~(6)中:
n———圆周等分数;
H———支管中心至主管中心垂直距离;
R2———主管内半径;
r1———支管外半径;
α———支管倾斜角;
βn———圆周各等分点与同一直径夹角;
D2———支管中径;
R1———主管外半径。
AutoCAD2002系统将利用VB程序设计,将以上的计算结果保存在数据库中,并直接生成该计算结果的文本文件,以便在钣金排样下料时参考。最后,AutoCAD系统把计算结果从数据库中读回,再次计算绘图所需点的坐标,并利用VBA调用AutoCAD相关的绘图命令,实现数据的图形显示。按照图4所示的参数值计算后,AutoCAD系统自动绘制等径斜交三通管的支管钢板下料展开图和两管相交的孔实形图。如图5所示,其中窗口上面为展开图,窗口下面为孔实形图。

(图片)

图5 等径斜交三通管支管的展开图和孔实形图

4 结束语
应用组件对象模型技术,将钣金件展开中大量复杂的计算过程独立出来,既方便了系统程序的模块化设计,同时又利用了COM模块的可重用性。COM组件具有语言无关性,使该模块的移植和升级成为可能,它可以不仅仅局限于AutoCAD应用程序本身,而且可以移植到其它的CAD系统。因此,应用COM技术的钣金展开,使展开计算与绘图分离,是一种非常有意义的方法。
参考文献
[1] 袁筱麟.钣金展开计算机放样技术[J].化工建设工程,2002,24(1):33,40-41.
[2] 伍光胜,郑明辉,黄远铮,等.COM/DCOM技术的分析及应用[J].计算机应用与研究,2001(9):64-67.
[3] 翟洪绪,翟纯雷,等.实用钣金展开计算法[M].北京:化学工业出版社,1999.
[4] 廖卫献,崔一兵,等.钣金展开CAD系统的开发[J].南华大学学报(理工版),2001,15(1):39-41.
[5] 潘爱民.COM原理与应用[M].北京:清华大学出版社,1999. 2/5/2005


电脑版 客户端 关于我们
佳工机电网 - 机电行业首选网站