基于COM组件技术开发花键轴参数化设计

2018-10-26 06:11中航工业江西洪都航空工业股份有限公司南昌330001王忠建王广运
金属加工(冷加工) 2018年10期
关键词:文件夹对话框菜单

■中航工业江西洪都航空工业股份有限公司 (南昌 330001) 石 鑫 王忠建 王广运

扫码了解更多

随着COM技术的飞速发展,利用组件技术作为应用程序的开发模式成为主流。基于COM的应用程序能够对用户的需求作出快速响应,开发人员只需快速地从某个COM组件库中取出所需组件,像搭积木一样组装到一起就可构成所需要的应用程序。

UG是一款高度集成CAD/CAE/CAM功能为一体的综合性应用软件平台,它提供了强大的二次开发模块,在该模块中通过UG/Open语言即可满足零件参数化设计模块的开发需求。花键轴是机械产品中的主要零部件之一,对机械运动的传递起着非常重要的作用,若能实现其快速开发,将会极大地提高零件设计效率,避免重复工作。综上,本文结合UG/Open、VC以及COM内容,将COM组件技术引入到UG花键轴参数化设计模块的二次开发中,期望通过采用COM组件的参数化设计方法来提高零件的设计效率,增强企业竞争力。

1.系统总体结构

系统采用三层C/S体系结构,即由客户层、中间层和数据层构成。其中,客户层主要完成UG菜单、UIStyler对话框设置、用户交互界面设置等,中间层主要实现花键轴数据库条目信息的获取以及花键轴的参数化设计,数据层主要用来存储花键轴数据信息,为中间层提供数据支持。系统总体结构如图1所示。

2.系统实现

(1)设置开发环境。新建文件夹为SplineShaft,在该文件夹下创建startup、application、database和prt四个子文件夹。其中,startup用来存放UG菜单以及DLL文件,application用来存放对话框dlg文件,database用来存放花键轴数据库文件mdb,prt用来存放花键轴模板文件。另外,还需注册环境变量,如图2所示。

图1 系统总体结构

图2 注册环境变量

(2)建立花键轴模型。在UG平台上,通过草绘、拉伸等特征的创建,可以很快地建立初始花键轴三维零件模型,保存为COM_PART,如图3所示,并将该零件模板放在prt子文件夹中,随后创建程序所用的参数化表达式,如图4所示,至此花键轴模型建立完毕。

(3)建立Access数据库。通过Access建立花键轴信息数据库文件spline_shaft.mdb。在该文件中,共设置10个字段,分别为编号、直径1、直径2、齿数、齿宽、有效长度、内孔直径、内孔深度、轴直径和轴长度。其中,指定“编号”为主键,最终创建的花键轴信息数据库文件如图5所示。

(4)UG菜单与对话框的创建。在startup文件夹内建立菜单文件(.men)时,需要使用UG/MenuScript工具创建出自己所需的主菜单和子菜单。本次所创建的文本菜单文件名为COM_MENU.men,具体代码如下:

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

BEFORE UG_HELP

图3 初始花键轴三维零件模型

图4 参数化表达式

图5 花键轴信息数据库文件

CASCADE_BUTTON COM

LABEL 基于COM组件的花键轴参数化设计

END_OF_BEFORE

MENU COM

BUTTON COM_PARA_DESIGN

LABEL 石鑫花键轴参数化设计

ACTIONS Client_DIA.dlg

END_OF_MENU

其中,ACTIONS后面为菜单要执行的动作,本次开发程序所设置的主菜单名为“基于COM组件的花键轴参数化设计”,启动UG后会出现如图6所示的菜单效果。

创建花键轴参数变量UIStyler对话框时,通过设置花键轴所需的关键参数,最后利用回调函数实现参数化设计,保存菜单后,会在application文件夹内自动生成Client_DIA.dlg.h、Client_DIA_template.c与Client_DIA.dlg三个文件,需将Client_DIA_template.c文件改为Client_DIA.cpp,以备程序设计时使用。最终获得的花键轴参数对话框如图7所示。

图6 UG菜单效果

(5)COM组件的建立。创建COM组件时,需要根据VC向导中的ATL COM AppWizard建立COM服务器框架工程,命名为ADOOper。通过工程中的“插入”选项选择新建ATL对象启动ATL COM AppWizard加入对COM对象的支持,选择“单个对象”,并在Short Name和Interface中分别键入DataOper和IDataOper,单击确定即可创建一个COM对象,最后通过添加方法连接到接口IDataOper中。COM组件关键实现代码如下:

//连接到数据源;

CDataOper::Open(BSTR source,BSTR USER, BSTR pwd)

......;return hr;}; //打开数据库记录集

CDataOper::OpenRecordset(VARIA NT query)

......;//关闭数据库记录集,与前者对应;

CDataOper::CloseRecordset()

{return m_recordset->Close();

}……;//其他一些操作函数

通过COM组件编译连接,最终获得的COM组件为ADOOper.dll,在连接时,COM组件会自动注册安装。

图7 花键轴参数对话框

(6)客户端程序的编写。启动VC++6.0,根据VC向导新建工程项目,命名为Client_PARA_DESIGN。在应用程序的工作空间中删除向导自动生成的Client_PARA_DESIGN.h与Client_PARA_DESIGN.cpp两个文件,将application文件夹中的Client_DIA.h与Client_DIA.cpp文件复制到Client_PARA_DESIGN目录下,通过工程文件添加到VC应用程序框架中。另外,在project工程命令中选择setting设置命令,在link选项卡中添加libufun.lib和libugOpenint.lib。与此同时,还需在工具tools中选择option命令,将API函数库所在的路径添加到directaries选项中。

本应用程序的主要功能是通过COM组件调用数据库中的花键轴参数,将每一记录条的参数反馈到UIStyler对话框内,再更新生成花键轴模型。现添加各回调函数的应用代码,通过回调函数计算花键轴的各表达式值,将计算后的表达式值代替初始绘图时表达式的值,最后调用UF_MODL_update()函数进行更新模型,就可获得重建后的花键轴模型。回调函数PARA_ok_cb()的程序代码如下:

int PARA_ok_cb ( int dialog_id,void* client_data,

UF_STYLER_item_value_type_p_t callback_data)

{……;//参变量设置;

CoInitialize(NULL);

IParaDesign* IPP = NULL;

HRESULThr=CoCreateInstance(CLSID_ParaDesign, NULL,CLSCTX_ALL,IID_IParaDesign,(void**)&I PP);......;

//用于判断修改后的数值能否满足正确生成花键轴的限制条件

for(int i=0;i<9;i++)

{UF_STYLER_free_value(&data[i]); }......;

{uc1601("对话框中的数值不能为零!",1);return (UF_UI_CB_CONTINUE_DIALOG); }

if(d1<=d2)

{uc1601("“外径1”必须大于>“外径2”!",1);

return (UF_UI_CB_CONTINUE_DIALOG); }

//修改替代后的实际参数值,用于更新模型件

......;sprintf(exps_string[8],"d_shaft_length=%f",d_shaft_length);……;UF_terminate ();

最后将生成的客户端dll文件复制到startup文件中即可。

3.测试结果

启动UG,鼠标单击创建的菜单,会出现系统主界面,获取初始花键轴模型件的数据信息到对话框中,如图8所示。单击“花键轴数据信息”按钮,系统会出现MFC编写的对话框,对话框内显示了通过COM组件获取的花键轴数据库中的信息,如图9所示。选择编号为2的数据,单击“确定”按钮后,2号记录数据条信息会依次反馈到对话框内,再单击对话框“确定”按钮,就可生成2号记录数据条所对应的花键轴,如图10所示。

4.结语

图8 初始花键轴模型件信息显示

图9 通过COM组件获取的花键轴数据库信息

图10 反馈2号数据条所生成的花键轴

通过本次基于COM组件技术开发花键轴参数化设计模块的研究可知,将COM组件技术引入UG二次开发中,很大程度上促进了UG二次开发进程,提高了机械零件的设计效率。测试结果表明:所开发的参数化设计模块能够快速生成不同参数值的花键轴模型,从而满足用户对花键轴的不同需求,缩短零件开发周期,为企业赢得经济效益。

猜你喜欢
文件夹对话框菜单
Fast Folders,让你的文件夹四通八达
中国新年菜单
正常恢复虚拟机
Bootlace Worms’Secret etc.
What Is Beauty?
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
本月菜单
浅谈VB的通用对话框《CommonDialog》控件的使用
不容忽视的空文件夹