何 超
(中安(天津)航空设备有限公司,天津 300300)
随着COM技术与网络技术的快速发展,通过组件技术开发CAD系统的应用程序已经成为主流[1].在COM框架下,客户能够开发出不同类别但功能特定的组件,然后按需要将它们像堆积木似的拼装在一起,从而构成复杂的应用系统[2].在现代CAD系统中,随着数据种类与数据量的与日俱增,数据信息已从CAD系统中独立出来,形成了独立于CAD应用程序外的数据库,这样有利于不同应用程序之间的数据交换,使应用程序和数据相对独立,有助于数据的维护与拓展补充,并协调CAD开发平台进行有效的监控等功能[3-4].
本文即是结合COM组件技术,采用3层C/S结构,针对UG花键轴参数信息数据库系统的开发进行研究,以期通过本次研究内容更好地解决花键轴数据信息的科学管理与安全维护等问题,从而更好地保障零件设计时参数调用工作的顺利进行.
系统总体结构为3层C/S结构[5],主要包含客户层、中间层和数据层3个层次内容.其中:客户层主要完成菜单、用户界面以及中间层的实际调用,通过COM组件完成对数据库信息进行操作的功能,包含信息的显示、入库、修改、删除以及查询等功能;中间层主要完成数据库信息的操作功能;数据层主要完成花键轴信息的存储,更好地为中间层提供数据支持[6].综上,系统总体结构如图1所示.
图1 系统总体结构
2.1.1 开发环境设置
首先创建自定义文件夹HJZ,在该文件夹中创建Startup和Database两个子文件夹,其中:Startup用于存放自定义的菜单以及DLL文件;Database用于存放花键轴参数信息库文件,随后注册环境变量[7],如图2所示.
图2 注册环境变量
2.1.2 自定义菜单
主要在Startup子文件内创建菜单文件app.men.其中:Actions后面为菜单要执行的动作;A、B依次为主次菜单名.启动UG后,则会出现如图3所示的所开发系统UG菜单.
图3 系统UG菜单
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP
CASCADE_BUTTONThree_Tier_COM
LABEL基于COM组件的花键轴三层数据库系统的开发//A
END_OF_BEFORE
MENUThree_Tier_COM
BUTTONDataBase
LABEL我的花键轴数据库系统//B
CTIONSDBSystem_act
END_OF_MENU
通过Access建立花键轴零件数据库文件spline_shaft.mdb,如图4所示.由图4可知,花键轴信息主要包含10个字段,分别为编号、直径1、直径2、齿数、齿宽、有效长度、内孔直径、内孔深度、轴直径、轴长度.最后将建立的数据库文件复制到Database子文件夹中.
图4 花键轴信息数据库
创建COM组件框架时,一般按照以下步骤进行[8]:
1) 通过VC向导中的ATL COM AppWizard创建COM服务器框架工程;
2) 通过“Insert”选择“NEW ATL Object”启动ATL COM AppWizard 来加入对COM对象的支持;
3) 通过选择“Simple Object”并单击“Next”按钮,在“Short Name”下输入名称DataOper,以及在“Interface”下输入IDataOper;
4) 添加方法到接口IDataOper中,并在接口的实现文件CDataOper.cpp中依据功能添加方法的实现代码:
STDMETHODIMPCDataOper::Open(BSTR source, BSTR USER, BSTR pwd)
{return S_OK;}
5) 添加COM组件代码(代码略);
6) COM组件的编译、连接以及注册.
在VC环境下创建应用程序开发框架,新建项目DB_Fun.在程序框架内,插入对话框资源以便设置用户界面的对话框.对所建立的对话框资源添加对话框类与成员函数,建立过程如图5所示.随后添加对应类与类函数程序代码,设置UG/Open API函数路径,如图6所示.
图5 添加对话框类与成员函数
图6 设置UG/Open API函数路径
最后将编译后的.DLL文件复制到Startup子文件中.现以入库功能函数为例,介绍如下:
voidCDBSystem::OnButtonInput()//入库函数;
{CDBOper InputDlg;
InputDlg.mark=0;
if(InputDlg.DoModal()==IDOK)//入库对话框打开成功;
{ //一系列对应的花键轴参数;
CString num=InputDlg.num;
float D1=InputDlg.D1;
float D2=InputDlg.D2;
int Z=InputDlg.Z;
float B=InputDlg.B;
float L=InputDlg.L;
float D=InputDlg.D;
float D_L=InputDlg.D_L;
float shaft_D=InputDlg.shaft_D;
float shaft_D_L=InputDlg.shaft_D_L;
if(num=="") //提示不能输入编号为空的齿轮参数;
{ MessageBox("编号不能为空!","提示",MB_ICONWARNING+MB_OK);
InputDlg.m_num.SetFocus();return;}
try{HRESULT hr =pDB->OpenCommand();
if (FAILED(hr))
{MessageBox("OpenCommandfailed");return;}
CString str;
str.Format("insert into spline_shaft
(编号,直径1,直径2,齿数,齿宽,有效长度,内孔直径,内孔深度,轴直径,轴长度)values('%s',%f,%f,%d,%f,%f,%f,%f,%f,%f)",num,D1,D2,Z,B,L,D,D_L,shaft_D,shaft_D_L);
.......;//其他操作设置;}}
通过VC向导中的“Win32 Dynamic_Link Library”创建DLL框架,项目名称为Three_Tier_UG_APP.随后添加注册程序代码:
//交互方法;
staticUF_MB_cb_status_t DBSystem_act(
UF_MB_widget_t widget,
UF_MB_data_t client_data,
UF_MB_activated_button_p_t call_button );
staticUF_MB_action_t actionTable[] =
{{"DBSystem_act",DBSystem_act}, { NULL, NULL, NULL }};
extern "C"DllExport void ufsta( char *param, int *returnCode, int rlen )//UG入口函数ufsta;
{ /*初始化API环境 */
int errorCode = UF_initialize();
if ( 0 ==errorCode )
{int status;//设置整型变量;
//实际操作;
status=UF_MB_add_actions( actionTable );
print_error( "UF_MB_add_actions", status );
errorCode = UF_terminate();//释放API调用;}
PrintErrorMessage( errorCode );//输出任何有误信息;}
最后进行编译连接操作,首先将DB_Fun.lib先复制到Three_Tier_UG_APP目录中,同时需在Three_Tier_UG_APP.dsw工程中申明“extern"C" DllExport void DB_Fun();”.然后还需设置UG/Open API路径以及添加.lib文件,最后将生成的.DLL文件复制到Startup文件中即可.
首先启动UG5.0,点击“我的花键轴数据库系统”菜单,此时会出现如图7所示的开发系统主界面.主界面中包含显示、入库、修改等功能按钮,当点选“显示”按钮时,即可获得如图8所示的通过COM组件获取花键轴数据库中的参数信息.
图7 开发系统主界面
图8 经由COM组件获取花键轴数据库
亦可实现参数信息入库、修改等操作,以花键轴数据信息入库功能为例,其实现过程如图9~10所示.经过测试,整个开发系统运行结果良好,基本的数据管理功能均可实现,满足了初始开发时的目的要求.
图9 输入花键轴参数值
图10 入库效果
本文通过COM组件技术实现UG环境下花键轴参数信息库的开发.实践表明,利用COM组件的高度独立性和程序集成特点,将COM组件引入到CAD系统的二次开发工作中去,极大地提高了CAD系统的开发效率,增强了CAD软件跨系统跨平台的通用性,大大缩短开发周期.
随着COM技术的发展,在今后的实际应用中,作为分布式应用系统开发的基础平台,COM组件技术将日益受到客户的重视,其必将在分布式系统应用领域中发挥越来越重要的角色与功能.