基于ProE实现齿轮三维参数化建模

  • 格式:pdf
  • 大小:426.29 KB
  • 文档页数:6

http://www.paper.edu.cn

- 1 - 基于Pro/E实现齿轮三维参数化建模

魏永乐,晁彩霞

辽宁工程技术大学机械学院,辽宁阜新 (123000)

E-mail:weiyongle@sohu.com

摘 要:利用Pro/Engineer系统提供的Pro/Program、Pro/Toolkit等二次开发模块以及功能强

大的Visual C++编程工具,在Pro/Engineer系统中实现了齿轮三维参数化建模,提高了齿轮

的设计质量和效率。

关键词:Pro/E;二次开发;参数化建摸;齿轮

中图分类号:TP391.72

1.引言

齿轮作为最重要的基础传动零件被广泛地应用于各个行业的生产设备中,因此齿轮设计

的是否合理,将直接影响到设备的生产效率和寿命。由于齿轮结构比较复杂,故齿轮的设计

和生产过程中,需要进行大量的分析、计算和绘图工作。在传统的齿轮设计中,齿轮的设计

和强度校核过程主要是通过人工完成的,存在计算繁琐、设计周期长、效率低等问题,而且

容易出现设计误差和错误,难以实现优化设计。建立齿轮的三维实体模型,分析齿轮工作状

态和受力状况,得到优化齿形,这对于提高齿轮的传动质量和使用寿命有重要意义。

本文以Pro/Engineer为平台,利用Pro/Toolkit等二次开发模块,探讨了直齿渐开线齿轮

三维参数化建模的方法,最终实现了齿轮三维模型快速、精确的建立。并且为进一步实现齿

轮的传动及受力分析奠定了基础。

2.Pro/E二次开发工具

Pro/Engineer系统是美国PTC公司的优秀产品,提供了产品三维造型设计、加工、分析

及绘图等功能的完整CAD/CAE/CAM解决方案。目前Pro/E软件在我国的机械、模具、汽

车、航天、电子、家电、工业设计、玩具等行业取得了广泛的应用。

Pro/E在提供强大的产品设计、分析、制造等功能的同时,还为用户提供了多种二次开

发工具,有:族表、用户定义特征、Pro/Program、J-link、Pro/Toolkit等[1]

。本文Pro/Program

和Pro/Toolkit二次开发工具。

2.1 Pro/Program

在产品设计过程中,经常遇到许多零件的外形具有高度的重复性,那么重复相同的步骤

导致设计效率很低。为了提高设计效率,Pro/E提供了一个可程序化的工具——Pro/Program。

在Pro/E系统中,每建立一个模型,都会有一个宏文件记录模型的产生过程,如果对这个宏

文件进行修改,就可以控制模型的建立过程,从而控制所生成的模型[7]

。用户可以根据设计

需要利用Pro/Program工具来编辑模型的宏文件,使其作为一个程序来运行,用户只需要通

过人机交互的方法来输入模型的主要参数,便可直接生成零件模型,从而大大地提高了零件

设计效率。

2.2 Pro/Toolkit

Pro/Toolkit是Pro/E中自带的基于Visual C++的二次开发工具。Pro/Toolkit能实现与Pro/E

的无缝集成,是Pro/E自带的功能最强大的二次开发工具[2]

。其主要目的是让用户或第三方

通过C程序代码扩充Pro/E系统的功能,开发基于Pro/E系统的应用程序模块,从而满足用http://www.paper.edu.cn

- 2 - 户的特殊要求。它提供了大量的C语言库函数,能够使外部应用程序(客户应用程序)安全有

效地访问Pro/E的数据库和应用程序。还可以利用Pro/Toolkit提供的UI对话框、菜单以及

VC的可视化界面技术,设计出方便实用的人机界面,从而大大提高用户的设计效率[1]

3.齿轮参数化建模的实现

3.1 生成渐开线

渐开线的生成是齿轮设计过程中的

关键。渐开线的定义是绕在圆上的线展开时,线保持与圆相切,线的端点形成的轨迹[2]

渐开线的数学分析如图1所示。

根据以上分析,可以得到渐开线的数学公式:

xc=

r*cos(ang) x=

xc+(s*sin(ang))

yc=

r*sin(ang) y=

yc-(s*cos(ang))

利用Pro/E中的关系式,即可生成渐开线,但需要使用系统的一个变量“t”,“t”的变化

范围是0到1;“PI”

表示圆周率,是Pro/E的默认变量。0°~90°范围内的渐开线关系式如下:

ang=t*90 r=base_dia/2 s=(PI*r*t)/2 xc=r*cos(ang)

yc=r*sin(ang) x=xc+(s*sin(ang)) y=yc-(s*cos(ang)) z=0

渐开线创建完成后,利用三维造型功能创建齿轮模型。如图2所示。

图1 渐开线的数学分析 Fig.1 Math analysis of Involute Curve

图2 渐开线齿轮

Fig.2 Involute Curve gear http://www.paper.edu.cn

- 3 - 3.2 创建Pro/Program程序

1)输入齿轮的主要参数,并建立主要与次要参数之间的关系。在INPUT与 END INPUT

之间输入如下语句:

Z=20 //齿轮齿数

M=2 //齿轮模数

WIDTH=12 //齿轮宽度

PRESSURE_ANGLE=20 //齿轮压力角在RELATION 与END RELATION之输入如

下语句:

pitch_dia=z*m //分度圆直径

root_dia=z*m-2.5*m //齿根圆直径

top_dia=z*m+2*m //齿顶圆直径

base_dia=z*m*cos(pressure_angle) //基圆直径

addendum=m //齿顶高

dedendum=1.25*m //齿根高

tooth_thickness=m*PI/2 //齿厚

2)完成后保存退出,将程序合并到模型中。

3.3 定制用户界面

用户界面是采用Pro/Toolkit提供的UI对话框技术创建的,由菜单项调用,如图3所示。

执行程序之前,应当先在当前窗口中打开齿轮模型,以使齿轮模型的主要参数在“参数

列表”中显示出来,否则“参数列表”中的内容将为空。在该用户界面中,可以完成如下操作:

1)编辑参数 在“数值”输入框中输入新的参数值并按回车键,即可完成对参数值的修

改。

2)添加参数 输入新参数的名称、值和类型后,单击“添加”

按钮即可创建新的参数对图3 用户界面

Fig 3 User Interface http://www.paper.edu.cn

- 4 - 象。如果输入的新参数名已经存在,则将会被忽略。

3)删除参数 单击“删除”按钮,将从当前模型中删除指定的参数。若该参数已在当前

模型中引用,则删除无效。

4)再生模型 若选参数已被定义为模型特征或草图的驱动尺寸,修改值后,单击“再生”

按钮,模型会随之变化。

3.4 编写参数化建模源程序

1)编写源程序

由VC向导自动创建程序框架后,添加必要的代码就构成了完整的Pro/Toolkit应用程序。

主要包括两个方面的工作:一是设计程序在Pro/E中运行需要的接口程序和终止程序;二是

Pro/Toolkit应用程序的主体部分。

user_initialize()、user_terminate()是用户初始化函数和用户结束中断函数。user_initialize()

用于设置用户的交互接口,如设置菜单、调用对话框或直接调用所需函数等。user_terminate()

用于结束应用程序的执行[1]

应用程序主体部分主要由自定义函数组成,可以由菜单项调用。由于篇幅限制,在此仅

介绍几个主要函数:

//“添加”按钮函数定义

void AddParam_Action(char *dialog,char *component, ProAppData data)

{ ProCharLine strtmpv,strtmp;

……//其它变量定义

ProMdlCurrentGet(&model);

ProMdlToModelitem(model, &modelitem);

ProUIInputpanelValueGet(dialog,"Param_Name",&s_value); //从用户界面获得参数名

……//从用户界面获得参数值、类型

ProWstringToString(strtmp,seletype);

if (strcmp(strtmp,"PRO_PARAM_DOUBLE")==0)// 判断参数类型是否为DOUBLE型

{ //根据参数类型设置参数值

proval.type=PRO_PARAM_DOUBLE;

proval.value.d_val=atof(strtmpv);

}

else

……// 判断参数类型,并设置参数值

ProParameterCreate(&modelitem,s_value,&proval, ¶m);//创建参数对象

ListLabelsSet(dialog,"ParamsList");//重新设置列表框

}

//“删除”按钮函数定义

void DelParam_Action(char *dialog, char *component, ProAppData data)

{ int n_names,i;

char** names;

ProArrayAlloc(0, sizeof(char *), 1, (ProArray *)&names);//为指针names分配空间

ProUIListSelectednamesGet(dialog,"ParamsList",&n_names,&names); //选择要删除的参数

if (n_names!=

1) return;//未选中,则退出