基于Pro/ENGINEER的齿轮参数化设计及FEA分析
- 格式:pdf
- 大小:130.91 KB
- 文档页数:2
基于PRO/E的齿轮参数化设计系统的研究摘要在产品设计过程中,建立零件参数化设计系统是提高产品设计效率的有效途径。
本文论述了以Pro/E为平台,VC++为开发工具,通过加载Pro/TOOLKIT 应用程序,开发出与Pro/E系统集成的零件参数化设计系统,并以齿轮为例,详细阐述了零件参数化程序设计的关键技术和实现过程。
关键词Pro/E;Pro/TOOLKIT;二次开发;参数化设计0 引言齿轮参数化设计,由于其复杂性,一般设计者很难精确的造型。
随着塑料齿轮模具的广泛应用和快速成型及虚拟制造技术的迅速发展,用CAD软件对齿轮三维基体和齿面进行参数化造型设计已成为设计者的迫切需求。
文章采用二次开发工具Pro/Toolkit,在VC环境下,基于机械CAD软件Pro/Engineer开发了齿轮参数化造型设计系统,来解决齿轮三维实体参数化造型设计这一类难题。
1 参数化设计的系统结构参数化程序设计的基本原理是:采用三维模型与程序控制相结合的方式,用交互方式创建三维原始模型,并建立一组能控制三维模型形状和拓扑关系的设计参数,然后在SQL Server数据库中建立相应的表格。
通过VC++映射一个CRecordset 类对象用于交互,参数化程序通过对模型的设计参数编程,来实现设计参数的检索、修改以及三维模型的再生,框图如图1所示。
各模块及功能如下:1)系统界面模块:该模块的作用是定义齿轮实体造型所需要的参数变量;2)三维CAD软件接口模块:CAD软件的API函数以类的形式封装起来,在齿轮造型时通过这些函数驱动CAD软件生成实体;3)结构计算模块:根据界面模块的用户输入的参数计算齿轮的结构参数;4)齿形计算模块:该模块是整个系统的核心。
通过计算得到特定截面的齿廓参数,为齿形生成模块准备所需的数据;5)结构实体生成模块:该模块应用三维CAD软件的基本特征,如拉伸、旋转和圆周阵列等操作,按照结构类型计算模块输入的参数,生成齿轮的结构实体部分;6)齿形生成模块:该模块根据齿形计算的输出参数,利用三维软件的扫描和层叠拉伸功能在齿轮坯上生成一个齿形特性,然后应用圆形阵列生成所有齿形。
基于PRO/E的直齿圆柱齿轮参数化设计[摘要] 基于pro/e的cad模式下,详述了直齿轮的参数化设计,用户可方便地根据需要对程序进行修改,重新运行程序并更改齿轮各个参数从而得到新的零件。
以期对提高零件的设计效率和设计质量有一定的帮助。
[关键词] pro/e 直齿圆柱齿轮参数化设计 cad1 前言随着cad技术的发展,产品设计越来越广泛地采用三维建模的方法,pro/e具有强大的三维建模功能,被广泛应用。
利用pro/e的二次开发工具模块program,就可以方便地实现产品设计的参数化,大大提高设计效率。
当用户在pro/e中对产品进行三维建模时,program以程序的形式记录了产品的主要设计步骤和尺寸参数列表,用户可以根据需要对程序进行修改,使不熟悉三维建模技巧的设计人员也可使用现有的三维产品模型进行更新设计,减少繁琐复杂的重复劳动。
2 齿轮的参数化设计齿轮是一种参数化的零件,一个齿轮的形状,可以由它的模数、齿数、压力角、齿顶高系数、顶隙系数以及齿宽完全确定,设计时只要修改这些参数的数值,便可改变齿轮的形状,具体步骤如下。
步骤1,创建新文件。
单击“文件”工具栏中的按钮,在“新建”对话框中输入文件名“gear_1”,取消“使用缺省模板”选择框,单击【确定】;在“新文件选项”对话框中的“模板”列表中选择“mmns_part_solid”选项,单击【确定】,系统自动进入零件环境。
步骤2,设置齿轮参数。
单击【工具】→【参数】后,在“参数”对话框中单击按钮,依次将齿轮的参数添加至“参数”列表框中,单击【确定】,齿轮的各个参数如表1所示。
表1齿轮参数参数名称类型数值说明m 实数 4.5 模数z 整数76 齿数alpha 实数20 压力角hax 实数 1 齿顶高系数cx 实数0.25 齿隙系数b 实数60 齿厚ha 实数齿顶高hf 实数齿根高x 实数变位系数da 实数齿顶圆直径df 实数齿根圆直径db 实数基圆直径d 实数分度圆直径步骤3,绘制齿轮的基本圆。
基于Proe的齿轮建模研究(齿轮建模)Pro/E软件简介:1.1.1 软件概述Pro/ENGINEER软件是美国PTC公司开发的CAD/CAM/CAE系统解决方案。
在目前的三维造型软件领域中占有十分重要的地位,其强大的三维处理功能、先进的设计理念和简单实用的操作受到许多设计者推崇,并作为当今世界机械CAD/CAE/CAM领域的新标准而得到业界的认可和推广,是现今最成功的CAD/CAM 软件之一。
Pro/E第一个提出了参数化设计的概念,并且采用了单一数据库来解决特征的相关性问题。
另外,它采用模块化方式,用户可以根据自身的需要进行选择,而不必安装所有的模块。
Pro/E的基于特征方式能够将设计至生产全过程集成到一起,实现并行工程设计。
它不但可以应用于工作站,而且也可以应用在单机上。
Pro/E采用了模块方式,可以分别进行草图绘制、零件制作、装配设计、钣金设计、加工处理等,保证用户可以按照自己的需要进行选择使用[3]。
参数化设计和特征功能Pro/ENGINEER是采用参数化设计的、基于特征的石头模型化系统,工程设计人员采用具有智能特性的基于特征的功能去生成模型,如腔、壳、倒角及圆角,你可以随意勾画草图,轻易改变模型。
这一功能特性给工程设计者提供了在设计上从未有过的简易和灵活。
单一数据库Pro/ENGINEER是建立在统一基层上的数据库上的,它不像一些传统的CAD/CAM 系统建立在多个数据库上。
所谓单一数据库,就是工程中的资料全部来自一个库,使得每个独立用户在为一件产品造型而工作,而不管他是哪个部门的。
换言之,在整个设计过程的任何一处发生改动,亦可以前后反应在整个设计过程的相关环节上。
例如,一旦工程详图有改变,NC(数控)工具路径也会自动更新;组装工程图如有任何改动,也完全同样反应在整个三维模型上。
这种独特的数据结构与工程设计的完整结合,使得一件产品的设计结合起来。
这一优点使得设计更优化,成品质量更高,产品能更好地推向市场,价格也更便宜。
基于Pro/E的齿轮参数化设计一、齿轮设计实现文件// chilunsheji.cpp : 定义DLL 的初始化例程。
#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg.h"#include "ProMenu.h"#include "ProUtil.h"#include "ProMenubar.h"#include <ProMessage.h>///////////////Functions declarationint GearDesign1MenuActFn();static uiCmdAccessState AccessAvailable(uiCmdAccessMode);#ifdef _DEBUG#define new DEBUG_NEW#endifint GearDesign1();int GearDesign2();// CchilunshejiAppBEGIN_MESSAGE_MAP(CchilunshejiApp, CWinApp)END_MESSAGE_MAP()// CchilunshejiApp 构造CchilunshejiApp::CchilunshejiApp()// 唯一的一个CchilunshejiApp 对象CchilunshejiApp theApp;// CchilunshejiApp 初始化///////////////FUNCTION: user_initialize()extern "C" int user_initialize(){ProError status;ProFileName MsgFile;uiCmdCmdId PushButton_cmd_id;ProStringToWstring(MsgFile,"Message1.txt");//设置菜单信息文件名//status=ProMenubarMenuAdd ("GearDesign", "GearDesign","Utilities", PRO_B_TRUE, MsgFile);ProCmdActionAdd("PushButtonAct",(uiCmdCmdActFn) GearDesign1MenuActFn, uiCmdPrioDefault,AccessAvailable,PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id); ProMenubarmenuPushbuttonAdd("GearDesign","GearDesign1","GearDesign1","GearDesign 1", NULL, PRO_B_TRUE, PushButton_cmd_id, MsgFile);return status;ProMenubarmenuPushbuttonAdd("GearDesign","GearDesign2","GearDesign2","GearDesign2", NULL, PRO_B_TRUE, PushButton_cmd_id, MsgFile);66return status;}/////////////////////FUNCTION: user_terminate()extern "C" void user_terminate(){AFX_MANAGE_STA TE(AfxGetStaticModuleState());}BOOL CchilunshejiApp::InitInstance(){CWinApp::InitInstance();return TRUE;}static uiCmdAccessState AccessAvailable(uiCmdAccessMode access_mode) {return (ACCESS_A V AILABLE);}二、齿轮设计对话框实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg.h"#include "LoadDlg2.h"#include "LoadDlg3.h"#include "LoadDlg4.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg, CDialog) CLoadDlg::CLoadDlg(CWnd* pParent /*=NULL*/): CDialog(CLoadDlg::IDD, pParent){}CLoadDlg::~CLoadDlg(){}void CLoadDlg::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CLoadDlg, CDialog)67return status;}/////////////////FUNCTION: user_terminate()extern "C" void user_terminate(){AFX_MANAGE_STA TE(AfxGetStaticModuleState()); }BOOL CchilunshejiApp::InitInstance(){CWinApp::InitInstance();return TRUE;}static uiCmdAccessState AccessAvailable(uiCmdAccessMode access_mode) {return (ACCESS_A V AILABLE);}二、齿轮设计对话框实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg.h"#include "LoadDlg2.h"#include "LoadDlg3.h"#include "LoadDlg4.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg, CDialog)CLoadDlg::CLoadDlg(CWnd* pParent /*=NULL*/): CDialog(CLoadDlg::IDD, pParent){}CLoadDlg::~CLoadDlg(){}void CLoadDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CLoadDlg, CDialog)67ON_BN_CLICKED(IDC_BUTTON1, &CLoadDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CLoadDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, &CLoadDlg::OnBnClickedButton3) END_MESSAGE_MAP()void CLoadDlg::OnBnClickedButton1(){AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg2 LoadDlg;status=LoadDlg.DoModal();}void CLoadDlg::OnBnClickedButton2(){AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg3 LoadDlg;status=LoadDlg.DoModal();}void CLoadDlg::OnBnClickedButton3(){AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg4 LoadDlg;status=LoadDlg.DoModal();}三、直齿圆柱齿轮对话框实现文件// LoadDlg2.cpp : 实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg2.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg2, CDialog)CLoadDlg2::CLoadDlg2(CWnd* pParent /*=NULL*/): CDialog(CLoadDlg2::IDD, pParent){M_Z=17;M_ANGLE=20;68M_C=0.25;M_M=10;M_HA=1;M_B=100;M_D=0;M_DB=0;M_DA=0;M_TIP_RAD=0;M_DF=0;}CLoadDlg2::~CLoadDlg2(){}BEGIN_MESSAGE_MAP(CLoadDlg2, CDialog)ON_BN_CLICKED(IDOK, &CLoadDlg2::OnBnClickedOk)ON_BN_CLICKED(IDCANCLE, &CLoadDlg2::OnBnClickedCancle)ON_BN_CLICKED(IDC_mokuaichongsheng,&CLoadDlg2::OnBnClickedmokuaichongsheng)END_MESSAGE_MAP()void CLoadDlg2::OnBnClickedOk(){OnOK();ProMdl model;ProModelitem modelitem;ProNameParamName1,ParamName2,ParamName3,ParamName4,ParamName5,ParamName6;//wchar_t *ParamName;ProParameter param1,param2,param3,param4,param5,param6;ProParamvalue value1,value2,value3,value4,value5,value6;ProError status;UpdateData(true);status=ProMdlCurrentGet(&model);if (status!=PRO_TK_NO_ERROR)return ;ProMdlToModelitem(model, &modelitem);ProStringToWstring(ParamName1,"Z");ProStringToWstring(ParamName2,"ANGLE");ProStringToWstring(ParamName3,"C");ProStringToWstring(ParamName4,"M"); ProStringToWstring(ParamName5,"HA"); ProStringToWstring(ParamName6,"B");status=ProParameterInit(&modelitem,ParamName1,¶m1); status=ProParameterInit(&modelitem,ParamName2,¶m2); status=ProParameterInit(&modelitem,ParamName3,¶m3);69 status=ProParameterInit(&modelitem,ParamName4,¶m4); status=ProParameterInit(&modelitem,ParamName5,¶m5); status=ProParameterInit(&modelitem,ParamName6,¶m6); if (status==PRO_TK_NO_ERROR){ProParameterValueGet(¶m1, &value1);value1.value.d_val=M_Z;ProParameterValueSet(¶m1, &value1);//ZProParameterValueGet(¶m2, &value2);value2.value.d_val=M_ANGLE;ProParameterValueSet(¶m2, &value2);//ANGLEProParameterValueGet(¶m3, &value3);value3.value.d_val=M_C;ProParameterValueSet(¶m3, &value3);//CProParameterValueGet(¶m4, &value4);value4.value.d_val=M_M;ProParameterValueSet(¶m4, &value4);//M//获得参数值(HA)ProParameterValueGet(¶m5, &value5);value5.value.d_val=M_HA;ProParameterValueSet(¶m5, &value5);//HAProParameterValueGet(¶m6, &value6);value6.value.d_val=M_B;ProParameterValueSet(¶m6, &value6);//BProSolidRegenerate ((ProSolid)model,PRO_B_TRUE);ProWindowRepaint(PRO_V ALUE_UNUSED);UpdateData(false);}}void CLoadDlg2::OnBnClickedCancle(){OnCancel();}void CLoadDlg2::OnBnClickedmokuaichongsheng(){{ProMdl model;ProModelitem modelitem;ProNameParamName1,ParamName2,ParamName3,ParamName4,ParamName5,ParamName6;//wchar_t *ParamName;ProParameter param1,param2,param3,param4,param5,param6;ProParamvalue value1,value2,value3,value4,value5,value6;70ProError status;UpdateData(true);status=ProMdlCurrentGet(&model);if (status!=PRO_TK_NO_ERROR)return ;ProMdlToModelitem(model, &modelitem);ProStringToWstring(ParamName1,"Z");ProStringToWstring(ParamName2,"ANGLE");ProStringToWstring(ParamName3,"C");ProStringToWstring(ParamName4,"M");ProStringToWstring(ParamName5,"HA");ProStringToWstring(ParamName6,"B");status=ProParameterInit(&modelitem,ParamName1,¶m1);status=ProParameterInit(&modelitem,ParamName2,¶m2);status=ProParameterInit(&modelitem,ParamName3,¶m3);status=ProParameterInit(&modelitem,ParamName4,¶m4); status=ProParameterInit(&modelitem,ParamName5,¶m5); status=ProParameterInit(&modelitem,ParamName6,¶m6); if (status==PRO_TK_NO_ERROR){ProParameterValueGet(¶m1, &value1);value1.value.d_val=M_Z;ProParameterValueSet(¶m1, &value1);//ZProParameterValueGet(¶m2, &value2);value2.value.d_val=M_ANGLE;ProParameterValueSet(¶m2, &value2);//ANGLEProParameterValueGet(¶m3, &value3);value3.value.d_val=M_C;ProParameterValueSet(¶m3, &value3);//CProParameterValueGet(¶m4, &value4);value4.value.d_val=M_M;ProParameterValueSet(¶m4, &value4);//MProParameterValueGet(¶m5, &value5);value5.value.d_val=M_HA;ProParameterValueSet(¶m5, &value5);//HAProParameterValueGet(¶m6, &value6);value6.value.d_val=M_B;ProParameterValueSet(¶m6, &value6);//BM_D=M_Z*M_M;//DM_DB=M_D*cos(M_ANGLE);//DBM_DA=M_D+2*M_M*M_HA;//DAM_TIP_RAD=3.1415*M_M/8;//TIP_RADM_DF=M_D-2*M_M*(M_HA+M_C);//DF71ProSolidRegenerate ((ProSolid)model,PRO_B_TRUE);ProWindowRepaint(PRO_V ALUE_UNUSED);UpdateData(false);}}}BOOL CLoadDlg2::OnInitDialog(){CDialog::OnInitDialog();ProMdl model;ProModelitem modelitem;ProNameParamName1,ParamName2,ParamName3,ParamName4,ParamName5,ParamName6;//wchar_t *ParamName;ProParameter param1,param2,param3,param4,param5,param6;ProParamvalue value1,value2,value3,value4,value5,value6; ProError status;status=ProMdlCurrentGet(&model);if (status!=PRO_TK_NO_ERROR){ProMdlToModelitem(model, &modelitem); ProStringToWstring(ParamName1,"Z"); ProStringToWstring(ParamName2,"ANGLE"); ProStringToWstring(ParamName3,"C"); ProStringToWstring(ParamName4,"M"); ProStringToWstring(ParamName5,"HA");ProStringToWstring(ParamName6,"B");status=ProParameterInit(&modelitem,ParamName1,¶m1); status=ProParameterInit(&modelitem,ParamName2,¶m2); status=ProParameterInit(&modelitem,ParamName3,¶m3);status=ProParameterInit(&modelitem,ParamName4,¶m4);status=ProParameterInit(&modelitem,ParamName5,¶m5);status=ProParameterInit(&modelitem,ParamName6,¶m6);if (status==PRO_TK_NO_ERROR){ProParameterValueGet(¶m1, &value1);M_Z=value1.value.d_val;ProParameterValueSet(¶m1, &value1);//ZProParameterValueGet(¶m2, &value2);M_ANGLE=value2.value.d_val;ProParameterValueSet(¶m2, &value2);//ANGLEProParameterValueGet(¶m3, &value3);M_C=value3.value.d_val;72ProParameterValueSet(¶m3, &value3);//CProParameterValueGet(¶m4, &value4);M_M=value4.value.d_val;ProParameterValueSet(¶m4, &value4);//MProParameterValueGet(¶m5, &value5);M_HA=value5.value.d_val;ProParameterValueSet(¶m5, &value5);//HAProParameterValueGet(¶m6, &value6);M_B=value6.value.d_val;ProParameterValueSet(¶m6, &value6);//B}}return TRUE; // return TRUE unless you set the focus to a control }void CLoadDlg2::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, M_Z);DDX_Text(pDX, IDC_EDIT2, M_ANGLE);DDX_Text(pDX, IDC_EDIT3, M_C);DDX_Text(pDX, IDC_EDIT4, M_M);DDX_Text(pDX, IDC_EDIT5, M_HA);DDX_Text(pDX, IDC_EDIT6, M_B);DDX_Text(pDX, IDC_EDIT7, M_D);DDX_Text(pDX, IDC_EDIT8, M_DB);DDX_Text(pDX, IDC_EDIT9, M_DA);DDX_Text(pDX, IDC_EDIT10, M_TIP_RAD);DDX_Text(pDX, IDC_EDIT11, M_DF);}四、直齿圆锥齿轮对话框实现文件// LoadDlg3.cpp : 实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg3.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg3, CDialog)CLoadDlg3::CLoadDlg3(CWnd* pParent /*=NULL*/)73DDX_Text(pDX, IDC_EDIT7, M_BETA);DDX_Text(pDX, IDC_EDIT8, M_S);DDX_Text(pDX, IDC_EDIT9, M_GAMMA);}六、响应文件//响应函数#include"stdafx.h"#include"LoadDlg.h"#include"chilunsheji.h"#include "LoadDlg.h"int GearDesign1MenuActFn(){AfxMessageBox(_T("齿轮"));AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg LoadDlg;status=LoadDlg.DoModal();if(status==0){AfxMessageBox(_T("对话框创建失败"));}return status;}七、直齿圆柱齿轮对话框头文件#pragma once#include"resource.h"class CLoadDlg2 : public CDialog{DECLARE_DYNAMIC(CLoadDlg2)public:CLoadDlg2(CWnd* pParent = NULL); // 标准构造函数virtual ~CLoadDlg2();enum { IDD = IDD_DIALOG2 };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP()public:afx_msg void OnEnChangeRichedit26();double M_Z;double M_ANGLE;double M_C;85double M_M;double M_HA;double M_B;double M_D;double M_DB;double M_DA;double M_TIP_RAD;double M_DF;public:afx_msg void OnBnClickedOk();public:afx_msg void OnBnClickedCancle();public:afx_msg void OnBnClickedmokuaichongsheng();public:afx_msg void OnEnChangeEdit1();public:afx_msg void OnEnChangeEdit2();public:afx_msg void OnEnChangeEdit3(); public:afx_msg void OnEnChangeEdit4(); public:afx_msg void OnEnChangeEdit5(); public:afx_msg void OnEnChangeEdit6(); public:afx_msg void OnEnChangeEdit7(); public:afx_msg void OnEnChangeEdit8(); public:afx_msg void OnEnChangeEdit9(); public:afx_msg void OnEnChangeEdit10(); public:afx_msg void OnEnChangeEdit11(); public:virtual BOOL OnInitDialog();};86。
基于Pro/E实现齿轮三维参数化建模魏永乐,晁彩霞辽宁工程技术大学机械学院,辽宁阜新(123000)E-mail:weiyongle@摘要:利用Pro/Engineer系统提供的Pro/Program、Pro/Toolkit等二次开发模块以及功能强大的Visual C++编程工具,在Pro/Engineer系统中实现了齿轮三维参数化建模,提高了齿轮的设计质量和效率。
关键词:Pro/E;二次开发;参数化建摸;齿轮中图分类号:TP391.721.引言齿轮作为最重要的基础传动零件被广泛地应用于各个行业的生产设备中,因此齿轮设计的是否合理,将直接影响到设备的生产效率和寿命。
由于齿轮结构比较复杂,故齿轮的设计和生产过程中,需要进行大量的分析、计算和绘图工作。
在传统的齿轮设计中,齿轮的设计和强度校核过程主要是通过人工完成的,存在计算繁琐、设计周期长、效率低等问题,而且容易出现设计误差和错误,难以实现优化设计。
建立齿轮的三维实体模型,分析齿轮工作状态和受力状况,得到优化齿形,这对于提高齿轮的传动质量和使用寿命有重要意义。
本文以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二次开发工具。
论述基于PRO/E的圆柱齿轮参数化设计1 设计基本方法直齿圆柱齿轮是一种较为复杂的机械零件,它的一些基本参数,如模数、齿数、压力角、齿顶高系数、顶隙系数,变位系数、齿宽等。
另外通过这些基本的参数也可以计算齿轮的其他参数,如齿顶圆、齿根圆、分度圆、基圆等。
而这些基本参数经常变化的参数也只有模数、齿数、齿宽和变位系数,其它参数压力角、齿顶高系数和顶隙系数一般是不变化的,所以我们这里将模数、齿数、齿宽和变位系数定义为关键参数。
设计齿轮的基本方法为:(1)建立关键参数和基本参数;(2)建立模型和定义关系;(3)验证关键参数;(4)调用齿轮。
2 具体创建过程2.1 建立关键参数和基本参数首先新建文件并在工具-程序中编辑设计中的INPUT和END INPUT加入如下语句:M number "输入直齿轮的模数M:"Z number "输入直齿轮的齿数Z:"X number "输入直齿轮的变位系数X:"B number "输入直齿轮的齿轮宽度B:"这样用程序的方式定义了四个关键参数,并保存文件,输入初始值,在参数对话框中创建好齿轮的一些基本参数:压力角、齿顶高系数、顶隙系数等,同时我们也可以看到四个关键参数,具体设计见表1。
2.2 建立模型和定义关系(1)创建齿轮的基本圆。
用草绘曲线的方法,选择“FRONT”面作为草绘平面,选取“RIGHT”面作为参考平面,参考方向为向“左”,从里到外创建齿轮的四个基本圆:齿根圆(SD0)、基圆(SD1)、分度圆(SD2)、齿顶圆(SD3),并且用设置好的参数在关系功能对话框中控制齿轮四个基本圆的大小关系。
SD3=M*Z+2*(HAX+X)*MSD2=M*ZSD1=M*Z*COS(ALPHA)SD0=M*Z-2*(HAX+CX-X)*M选择菜单“编辑-再生”,以当前值再生图形,并完成基本圆草图的建立。
基于Pro/E的渐开线圆柱斜齿轮参数化建模Pro/Engineer(Pro/E)是一款广泛应用于三维建模、产品设计和制造的软件。
渐开线圆柱斜齿轮是机械传动系统中常见的元件之一,其工作原理是在圆柱体表面上切削上与一定曲线相切之后的齿。
本文将介绍如何在Pro/E中进行渐开线圆柱斜齿轮的参数化建模。
首先,在Pro/E中新建一个Part,定义基本参数。
我们选择模板中“英制”的单位系统,并定义模块为1.5,公法径为30,压力角为20°,齿轮宽为20,在偏距方向上进行10次分割,在齿轮高度方向上进行4次分割,并确定齿轮轴线。
接着,我们需要绘制齿轮的基本轮廓,也就是包络线,这个过程可以通过插入一个螺旋曲线实现。
在插入螺旋曲线后,我们需要根据基本参数来“调整”曲线的参数,使其符合所需齿廓,具体来说,需要调整螺旋曲线的升角,升角越小,齿廓越尖锐。
绘制好基本轮廓之后,我们需要对齿廓进行剖面修整,以适应齿面的要求。
通过插入一个椭圆形的剖面,再通过曲面拆分等命令,我们可以对剖面进行修整。
修整完成之后,我们需要对基本齿廓进行相应的平移和旋转,使之符合剖面修整后的齿面形状。
最后,我们需要对齿面进行修整,以达到所需的斜齿轮效果。
可以使用修整边缘等命令进行修整,修整完成后,我们就成功地完成了渐开线圆柱斜齿轮的参数化建模。
总之,Pro/E提供了丰富的参数化建模工具,可以方便地进行各种齿轮类型的设计,提高设计效率和精度。
通过上述的方法,我们可以从零开始建立一个渐开线圆柱斜齿轮的模型,并进行相应的修改和优化。
在进行数据分析之前,需要明确数据来源和分析目的。
数据来源可能是市场调查、企业内部系统数据、公共数据等等;分析目的也是多种多样的,如了解市场环境、优化产品设计、制定销售策略等等。
在此,我以某电商平台的用户数据为例,进行相关数据的分析。
首先,我们可以统计该电商平台用户的性别比例和年龄分布情况。
数据显示,该平台用户中男性占比为48.5%,女性占比为51.5%;年龄方面,18-30岁的用户占比最高,达到了55.2%,其次是31-45岁的用户,占比为29.5%。
Equipment Manufactring Technology No.4, 2010齿轮传动是机械行业应用非常普遍的传动方式,齿轮作为传递动力和运动的零件, 可完成减速、增速、变向、换向等动作 [1]。
相对于直齿轮而言, 斜齿圆柱齿轮具有传动平稳、冲击和噪声小的优点, 特别适用于高速传动系统。
因而, 斜齿圆柱齿轮三维建模, 是设计人员经常遇到问题 [2]。
由于斜齿轮的齿廓形状比较复杂, 以往利用一些低端 CAD 软件对于斜齿圆柱齿轮进行三维建模, 很烦琐, 而且精确度也很难保证, 但是 Pro/E软件突破性解决了此问题。
利用 Pro/E软件可以方便而精确地对斜齿轮进行参数化建模, 减轻了设计人员的工作量, 提高了设计速度。
1斜齿圆柱齿轮齿廓曲面分析斜齿轮的法面齿廓曲线, 是由两条渐开线曲线、齿根圆圆弧、齿顶圆圆弧以及两条齿根过渡圆角组成, 齿廓曲面可以看作是法面齿廓垂于直齿轮轴线, 绕螺旋线 (斜齿轮的齿面与分度圆柱面的交线的方向扫描混合而成 [3]。
2参数化设计分析对于斜齿轮设计计算中用到的是端面上的模数、压力角、齿顶高系数、顶隙系数等, 而实际上法面上的模数、压力角、齿顶高系数、顶隙系数等才是标准值, 所以必须将端面上的参数与法面上的参数联系起来。
基于此点, 用 Pro/E进行建模时, 首先添加斜齿轮的基本参数,再添加关系式约束齿顶圆、齿根圆、基圆、分度圆等的尺寸, 然后用曲线工具创建法面齿廓曲线,利用特征复制进行平移旋转已有的齿廓曲线得到其他的齿廓曲线, 再用扫描工具生成一个轮齿特征。
之后, 要先通过特征操作当中的复制特征, 旋转一定的角度(360°/Z , 然后再进行阵列。
3参数化设计过程参数化建模具体步骤如下:(1选取主菜单中的【工具】→ 【参数】命令, 设置参数如表 1所示。
(2作圆曲线及齿形线。
在 TOP 面上, 以任意做从小到大的 4个圆。
生成曲线后, 修改各圆直径尺寸名为 (从小到大 Df , DB , D , Da , 然后加入关系Alpha_t=atan (tan(Alpha_n/cos(BetaHa =(Hax_n+X_n×M _nHf =(Hax_n+Cx_n-X_n×M _nD =Z ×M _n/cos(BetaDB =D ×cos(Alpha_tDa =D +2×Ha Df =D -2×Hf选用默认笛卡尔坐标系并输入如下渐开线曲线公式, r =DB/2theta =t ×45-x=r ×cos(theta+r ×sin (theta×theta ×pi /180z =r ×sin(theta-r ×cos (theta×theta ×pi /180生成渐开线并镜像, 最终生成基础曲线图。
基于 Pro/E的齿轮参数化设计一、齿轮设计实现文件// chilunsheji.cpp : 定义DLL 的初始化例程。
#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg.h"#include "ProMenu.h"#include "ProUtil.h"#include "ProMenubar.h"#include <ProMessage.h>///////////////Functions declarationint GearDesign1MenuActFn();static uiCmdAccessState AccessAvailable(uiCmdAccessMode);#ifdef _DEBUG#define new DEBUG_NEW#endifint GearDesign1();int GearDesign2();// CchilunshejiAppBEGIN_MESSAGE_MAP(CchilunshejiApp, CWinApp)END_MESSAGE_MAP()// CchilunshejiApp 构造CchilunshejiApp::CchilunshejiApp()// 唯一的一个CchilunshejiApp 对象CchilunshejiApp theApp;// CchilunshejiApp 初始化///////////////FUNCTION: user_initialize()extern "C" int user_initialize(){ProError status;ProFileName MsgFile;uiCmdCmdId PushButton_cmd_id;ProStringToWstring(MsgFile,"Message1.txt");//设置菜单信息文件名//status=ProMenubarMenuAdd ("GearDesign", "GearDesign","Utilities", PRO_B_TRUE, MsgFile); ProCmdActionAdd("PushButtonAct",(uiCmdCmdActFn) GearDesign1MenuActFn,uiCmdPrioDefault,AccessAvailable,PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id); ProMenubarmenuPushbuttonAdd("GearDesign","GearDesign1","GearDesign1","GearDesig n1", NULL, PRO_B_TRUE, PushButton_cmd_id, MsgFile);return status;ProMenubarmenuPushbuttonAdd("GearDesign","GearDesign2","GearDesign2","GearDesig n2", NULL, PRO_B_TRUE, PushButton_cmd_id, MsgFile);66return status;}/////////////////////FUNCTION: user_terminate()extern "C" void user_terminate(){AFX_MANAGE_STATE(AfxGetStaticModuleState());}BOOL CchilunshejiApp::InitInstance(){CWinApp::InitInstance();return TRUE;}static uiCmdAccessState AccessAvailable(uiCmdAccessMode access_mode){return (ACCESS_AVAILABLE);}二、齿轮设计对话框实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg.h"#include "LoadDlg2.h"#include "LoadDlg3.h"#include "LoadDlg4.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg, CDialog) CLoadDlg::CLoadDlg(CWnd* pParent /*=NULL*/): CDialog(CLoadDlg::IDD, pParent){}CLoadDlg::~CLoadDlg(){}void CLoadDlg::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CLoadDlg, CDialog)67return status;}/////////////////FUNCTION: user_terminate() extern "C" void user_terminate(){AFX_MANAGE_STATE(AfxGetStaticModuleState()); }BOOL CchilunshejiApp::InitInstance(){CWinApp::InitInstance();return TRUE;}static uiCmdAccessState AccessAvailable(uiCmdAccessMode access_mode) {return (ACCESS_AVAILABLE);}二、齿轮设计对话框实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg.h"#include "LoadDlg2.h"#include "LoadDlg3.h"#include "LoadDlg4.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg, CDialog)CLoadDlg::CLoadDlg(CWnd* pParent /*=NULL*/): CDialog(CLoadDlg::IDD, pParent){}CLoadDlg::~CLoadDlg(){}void CLoadDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CLoadDlg, CDialog)67ON_BN_CLICKED(IDC_BUTTON1, &CLoadDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CLoadDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, &CLoadDlg::OnBnClickedButton3) END_MESSAGE_MAP()void CLoadDlg::OnBnClickedButton1(){AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg2 LoadDlg;status=LoadDlg.DoModal();}void CLoadDlg::OnBnClickedButton2(){AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg3 LoadDlg;status=LoadDlg.DoModal();}void CLoadDlg::OnBnClickedButton3(){AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg4 LoadDlg;status=LoadDlg.DoModal();}三、直齿圆柱齿轮对话框实现文件// LoadDlg2.cpp : 实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg2.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg2, CDialog)CLoadDlg2::CLoadDlg2(CWnd* pParent /*=NULL*/): CDialog(CLoadDlg2::IDD, pParent){M_Z=17;M_ANGLE=20;68 M_C=0.25;M_M=10;M_HA=1;M_B=100;M_D=0;M_DB=0;M_DA=0;M_TIP_RAD=0;M_DF=0;}CLoadDlg2::~CLoadDlg2(){}BEGIN_MESSAGE_MAP(CLoadDlg2, CDialog)ON_BN_CLICKED(IDOK, &CLoadDlg2::OnBnClickedOk)ON_BN_CLICKED(IDCANCLE, &CLoadDlg2::OnBnClickedCancle)ON_BN_CLICKED(IDC_mokuaichongsheng,&CLoadDlg2::OnBnClickedmokuaichongsheng)END_MESSAGE_MAP()void CLoadDlg2::OnBnClickedOk(){OnOK();ProMdl model;ProModelitem modelitem;ProNameParamName1,ParamName2,ParamName3,ParamName4,ParamName5,ParamName6; //wchar_t *ParamName;ProParameter param1,param2,param3,param4,param5,param6;ProParamvalue value1,value2,value3,value4,value5,value6;ProError status;UpdateData(true);status=ProMdlCurrentGet(&model);if (status!=PRO_TK_NO_ERROR)return ;ProMdlToModelitem(model, &modelitem);ProStringToWstring(ParamName1,"Z");ProStringToWstring(ParamName2,"ANGLE");ProStringToWstring(ParamName3,"C");ProStringToWstring(ParamName4,"M");ProStringToWstring(ParamName5,"HA");ProStringToWstring(ParamName6,"B");status=ProParameterInit(&modelitem,ParamName1,¶m1); status=ProParameterInit(&modelitem,ParamName2,¶m2); status=ProParameterInit(&modelitem,ParamName3,¶m3); 69status=ProParameterInit(&modelitem,ParamName4,¶m4); status=ProParameterInit(&modelitem,ParamName5,¶m5); status=ProParameterInit(&modelitem,ParamName6,¶m6); if (status==PRO_TK_NO_ERROR){ProParameterValueGet(¶m1, &value1);value1.value.d_val=M_Z;ProParameterValueSet(¶m1, &value1);//ZProParameterValueGet(¶m2, &value2);value2.value.d_val=M_ANGLE;ProParameterValueSet(¶m2, &value2);//ANGLEProParameterValueGet(¶m3, &value3);value3.value.d_val=M_C;ProParameterValueSet(¶m3, &value3);//CProParameterValueGet(¶m4, &value4);value4.value.d_val=M_M;ProParameterValueSet(¶m4, &value4);//M//获得参数值(HA)ProParameterValueGet(¶m5, &value5);value5.value.d_val=M_HA;ProParameterValueSet(¶m5, &value5);//HAProParameterValueGet(¶m6, &value6);value6.value.d_val=M_B;ProParameterValueSet(¶m6, &value6);//BProSolidRegenerate ((ProSolid)model,PRO_B_TRUE); ProWindowRepaint(PRO_VALUE_UNUSED);UpdateData(false);}}void CLoadDlg2::OnBnClickedCancle(){OnCancel();}void CLoadDlg2::OnBnClickedmokuaichongsheng(){{ProMdl model;ProModelitem modelitem;ProNameParamName1,ParamName2,ParamName3,ParamName4,ParamName5,ParamName6; //wchar_t *ParamName;ProParameter param1,param2,param3,param4,param5,param6;ProParamvalue value1,value2,value3,value4,value5,value6;70ProError status;UpdateData(true);status=ProMdlCurrentGet(&model);if (status!=PRO_TK_NO_ERROR)return ;ProMdlToModelitem(model, &modelitem);ProStringToWstring(ParamName1,"Z");ProStringToWstring(ParamName2,"ANGLE");ProStringToWstring(ParamName3,"C");ProStringToWstring(ParamName4,"M");ProStringToWstring(ParamName5,"HA");ProStringToWstring(ParamName6,"B");status=ProParameterInit(&modelitem,ParamName1,¶m1);status=ProParameterInit(&modelitem,ParamName2,¶m2);status=ProParameterInit(&modelitem,ParamName3,¶m3); status=ProParameterInit(&modelitem,ParamName4,¶m4); status=ProParameterInit(&modelitem,ParamName5,¶m5); status=ProParameterInit(&modelitem,ParamName6,¶m6); if (status==PRO_TK_NO_ERROR){ProParameterValueGet(¶m1, &value1);value1.value.d_val=M_Z;ProParameterValueSet(¶m1, &value1);//ZProParameterValueGet(¶m2, &value2);value2.value.d_val=M_ANGLE;ProParameterValueSet(¶m2, &value2);//ANGLEProParameterValueGet(¶m3, &value3);value3.value.d_val=M_C;ProParameterValueSet(¶m3, &value3);//CProParameterValueGet(¶m4, &value4);value4.value.d_val=M_M;ProParameterValueSet(¶m4, &value4);//MProParameterValueGet(¶m5, &value5);value5.value.d_val=M_HA;ProParameterValueSet(¶m5, &value5);//HAProParameterValueGet(¶m6, &value6);value6.value.d_val=M_B;ProParameterValueSet(¶m6, &value6);//BM_D=M_Z*M_M;//DM_DB=M_D*cos(M_ANGLE);//DBM_DA=M_D+2*M_M*M_HA;//DAM_TIP_RAD=3.1415*M_M/8;//TIP_RADM_DF=M_D-2*M_M*(M_HA+M_C);//DF71ProSolidRegenerate ((ProSolid)model,PRO_B_TRUE);ProWindowRepaint(PRO_VALUE_UNUSED);UpdateData(false);}}}BOOL CLoadDlg2::OnInitDialog(){CDialog::OnInitDialog();ProMdl model;ProModelitem modelitem;ProNameParamName1,ParamName2,ParamName3,ParamName4,ParamName5,ParamName6; //wchar_t *ParamName;ProParameter param1,param2,param3,param4,param5,param6; ProParamvalue value1,value2,value3,value4,value5,value6; ProError status;status=ProMdlCurrentGet(&model);if (status!=PRO_TK_NO_ERROR){ProMdlToModelitem(model, &modelitem);ProStringToWstring(ParamName1,"Z");ProStringToWstring(ParamName2,"ANGLE");ProStringToWstring(ParamName3,"C");ProStringToWstring(ParamName4,"M");ProStringToWstring(ParamName5,"HA");ProStringToWstring(ParamName6,"B");status=ProParameterInit(&modelitem,ParamName1,¶m1);status=ProParameterInit(&modelitem,ParamName2,¶m2);status=ProParameterInit(&modelitem,ParamName3,¶m3);status=ProParameterInit(&modelitem,ParamName4,¶m4); status=ProParameterInit(&modelitem,ParamName5,¶m5); status=ProParameterInit(&modelitem,ParamName6,¶m6); if (status==PRO_TK_NO_ERROR){ProParameterValueGet(¶m1, &value1);M_Z=value1.value.d_val;ProParameterValueSet(¶m1, &value1);//ZProParameterValueGet(¶m2, &value2);M_ANGLE=value2.value.d_val;ProParameterValueSet(¶m2, &value2);//ANGLEProParameterValueGet(¶m3, &value3);M_C=value3.value.d_val;72ProParameterValueSet(¶m3, &value3);//CProParameterValueGet(¶m4, &value4);M_M=value4.value.d_val;ProParameterValueSet(¶m4, &value4);//MProParameterValueGet(¶m5, &value5);M_HA=value5.value.d_val;ProParameterValueSet(¶m5, &value5);//HAProParameterValueGet(¶m6, &value6);M_B=value6.value.d_val;ProParameterValueSet(¶m6, &value6);//B}}return TRUE; // return TRUE unless you set the focus to a control }void CLoadDlg2::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, M_Z);DDX_Text(pDX, IDC_EDIT2, M_ANGLE);DDX_Text(pDX, IDC_EDIT3, M_C);DDX_Text(pDX, IDC_EDIT4, M_M);DDX_Text(pDX, IDC_EDIT5, M_HA);DDX_Text(pDX, IDC_EDIT6, M_B);DDX_Text(pDX, IDC_EDIT7, M_D);DDX_Text(pDX, IDC_EDIT8, M_DB);DDX_Text(pDX, IDC_EDIT9, M_DA);DDX_Text(pDX, IDC_EDIT10, M_TIP_RAD);DDX_Text(pDX, IDC_EDIT11, M_DF);}四、直齿圆锥齿轮对话框实现文件// LoadDlg3.cpp : 实现文件#include "stdafx.h"#include "chilunsheji.h"#include "LoadDlg3.h"#include <ProSolid.h>#include <math.h>#include "ProUtil.h"#include <ProWindows.h>#include <ProParameter.h>#include <ProParamval.h>IMPLEMENT_DYNAMIC(CLoadDlg3, CDialog)CLoadDlg3::CLoadDlg3(CWnd* pParent /*=NULL*/)73 DDX_Text(pDX, IDC_EDIT7, M_BETA);DDX_Text(pDX, IDC_EDIT8, M_S);DDX_Text(pDX, IDC_EDIT9, M_GAMMA);}六、响应文件//响应函数#include"stdafx.h"#include"LoadDlg.h"#include"chilunsheji.h"#include "LoadDlg.h"int GearDesign1MenuActFn(){AfxMessageBox(_T("齿轮"));AFX_MANAGE_STATE(AfxGetStaticModuleState());int status;CLoadDlg LoadDlg;status=LoadDlg.DoModal();if(status==0){AfxMessageBox(_T("对话框创建失败"));}return status;}七、直齿圆柱齿轮对话框头文件#pragma once#include"resource.h"class CLoadDlg2 : public CDialog{DECLARE_DYNAMIC(CLoadDlg2)public:CLoadDlg2(CWnd* pParent = NULL); // 标准构造函数virtual ~CLoadDlg2();enum { IDD = IDD_DIALOG2 };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP()afx_msg void OnEnChangeRichedit26();double M_Z;double M_ANGLE;double M_C;85 double M_M;double M_HA;double M_B;double M_D;double M_DB;double M_DA;double M_TIP_RAD;double M_DF;public:afx_msg void OnBnClickedOk();public:afx_msg void OnBnClickedCancle();public:afx_msg void OnBnClickedmokuaichongsheng(); public:afx_msg void OnEnChangeEdit1();afx_msg void OnEnChangeEdit2(); public:afx_msg void OnEnChangeEdit3(); public:afx_msg void OnEnChangeEdit4(); public:afx_msg void OnEnChangeEdit5(); public:afx_msg void OnEnChangeEdit6(); public:afx_msg void OnEnChangeEdit7(); public:afx_msg void OnEnChangeEdit8(); public:afx_msg void OnEnChangeEdit9(); public:afx_msg void OnEnChangeEdit10(); public:afx_msg void OnEnChangeEdit11(); public:virtual BOOL OnInitDialog();};86。
齿轮轴在Pro/ENGINEER中的优化设计优化设计是近年来发展起来的一门新的学科。
最优化技术和计算机技术在设计领域的应用,为工程设计提供了一种重要的科学设计方法。
本文用齿轮和齿轮轴的例子来阐述优化设计,目的在于从众多的设计方案中寻到最优方案,提高设计效率和设计质量。
利用FEA做结构和热力分析,提供了一种在给定工作条件和材料的情况下评估模型应力、应变和热分布的方法。
使用这些分析工具和其他Pro/ENGINEER内置的函数,可以对用户定义的目标进行测量。
通常这一目标和许多设计尺寸直接相联系。
改变这些尺寸的值或者设计变量,自定义的目标也相应改变。
优化设计就是对于用户自定义的设计目标,自动搜寻这些变量的最佳值。
在大多数应用中,规定了一系列的设计约束来指定所允许的设计变量的边界。
一、概述在Pro/ENGINEER中,优化设计工具通过一系列设计分析迭代来逼近目标,同时满足定义的任一设计限制,它也可以用来测试某一设计对特定约束或者限制的可行性。
在可行性分析中,无需定义目标。
在这个案例中,笔者用齿轮和齿轮轴的例子来阐述优化设计的方法,如图1所示。
图1为了简化问题,笔者假定齿轮轴是一个钢制作的实体,考虑最小质量为设计目标,选择齿轮宽度d4作为设计变量。
其他已知参数如表所示。
◎材料为钢;◎尺寸:d0、d1、d6、d7、d3、d11、d12和整个零件长度不变;◎零件承受应力不超过:◎零件两端固定;◎载荷(磅),作用在齿轮圆柱体外表面。
优化设计获得尺寸d4的最佳值并使部件的重量最小。
二、模型创建创建几何模型并添加机械性能。
1.创建齿轮——轴的实体模型在Pro/ENGINEER中,创建模型,因为需要保证轴的长度,同时要调整纬度d4,因此笔者添加一个纬度关系:。
2.启动Pro/ENGINEER Mechanica开始结构设计,在Pro/ENGINEER中,选择“Application”→“Mechanica”,按照Pro/E NGINEER结构分析指南,指派材料,施加约束,施加载荷,并对模型网格化。