基于NX/Open API与Grip技术的渐开线内齿轮开发
2011-07-10刘军辉
刘军辉
(河源职业技术学院,河源 517000)
0 引言
Siemens NX 是一款集工程设计、制造和分析的综合3D软件,在机械领域发挥着重要作用。针对渐开线内齿轮的设计,NX并没有现成的齿轮模块,需要在齿轮技术参数的分析与计算基础上,运用基本的建模功能对其进行繁琐的渐开线绘制、齿轮参数表达式的建立和实体造型。设计步骤较为复杂,效率底下,且在进行参数设计时容易出现错误。因此,开发出独立的齿轮模块非常有必要,本文以NX/Open API和Grip编程技术开发出一具体的渐开线内齿轮模块,使内齿轮的设计很好的传承NX的“参数化设计”思想,通过输入内齿轮的参数就可以自动设计出来。
1 二次开发的整体思路及内齿轮参数分析
图1 内齿轮开发流程
在渐开线内齿轮的二次开发过程中,需要设计菜单、用户对话框和Grip程序。菜单的设计采取MenuScript脚本进行设计,用户对话框UI界面的设计则运用UG/Open,把内齿轮的Grip编译程序grx导入VC++ 6.0进行处理,最终得到所需的渐开线内齿轮模块DLL文件,具体流程如图1所示。
在进行渐开线内齿轮开发之前,需要分析它的渐开线方程和参数。渐开线对于齿轮有着重要的作用,它是齿轮的工作齿廓,它保证了齿轮传动具有瞬时传动比恒定、传力方向恒定、传动中心距具有可分性等特点[1]。渐开线的参数方程为:
渐开线内齿轮参数定义如下:
其中,rb为基圆半径,Φ为形成渐开线的旋转角度,m为模数,z为齿数,ha为齿顶高系数,c为径向间隙系数,d为分度圆直径,db为基圆直径,da为齿径圆直径,df为齿根圆直径,α为压力角,s为分度圆上齿轮的厚度。
2 二次开发关键技术流程
在开发之前,首先确定齿轮开发的目录:E:gear,并且在此目录下创建文件夹startup和application,前者存放菜单文件(.men)和模块动态链接库文件(.dll),后者存放UI交互界面文件(.dlg)。
2.1 菜单设计
用于NX菜单的设计语言为MenuScript脚本,它能方便的对NX菜单进行更改和增减,本文在NX的菜单“窗口”前加入一个菜单“内齿轮设计”,菜单文件命名为:gear.men,内容如下所示:
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
AFTER UG_APPLICATION
CASCADE_BUTTON gear_menu
LABEL 内齿轮设计
END_OF_AFTER
MENU gear_menu
BUTTON gear
LABEL基于UG/Open 与Grip渐开线内齿轮的二次开发
ACTIONS gear.dlg
END_OF_MENU
其中gear.dlg为后续设计的UI交互界面名称,它在点击菜单后弹出。在启动NX前,添加一个设置环境变量UGII_USER_DIR= E:gear,启动NX如图2所示。
图2 菜单设计
2.2 UI交互界面设计
在设计UI交互界面时,利用NX集成的UIStyler进行,它是一种所见即所得的模式,可以方便快速的设计出用户对话框窗口。在界面设计前先分析渐开线内齿轮的关键输入数据,通过这些数据可以唯一的决定内齿轮规格。按照内齿轮的参数要求,有如下数据需要选取:内齿轮外径、模数、齿数、压力角、齿顶高系数、径向间隙系数和齿宽,其中只有齿数为整数类型Interger,其余全部为Real类型。
启动NX进入“样式编辑器模式”,选择“确定和取消”按钮类型,加入上述输入参数的元素,并对其输入名称,如图3、4所示。
图3 UI界面
图4 UI属性框
保存后形成3个文件:头文件(.h)、C文件(.c)和界面文件(.dlg),在进行界面与Grip程序数据互通时需要在C文件上编写相应的功能代码,将dlg文件拷贝到startup文件下供菜单调用。
2.3 Grip建模程序设计
渐开线内齿轮的设计,先要绘制出基圆、分度圆、齿顶圆和齿根圆曲线,再依据参数决定的渐开线进行齿廓曲线绘制,其余齿廓曲线采取环形阵列的方式完成,创建完曲线之后利用齿顶圆曲线进行实体拉伸,用齿根圆曲线进行实体剪切,最后用渐开线齿廓曲线进行齿剪切成形。在对Grip进行程序设计时,为了防止内齿轮生成失败,必须加入条件判断,限制不合理的数据输入,如齿顶圆不能小于基圆。Grip关键代码如下:
number/dd,m,z,a,ha,c,w $$ 定义齿轮参数数据;
……
$$ 数据合理性判断;
ifthen/da<db
$$ 渐开线曲线方程如上述渐开线内齿轮参数的定义
$$ 运用创建的曲线进行实体建模
编写完成后运用NX自带的编译工具进行编译,得到内齿轮建模文件gear.grx。
2.4 UI界面与Grip数据传递程序设计
启动VC++ 6.0,对其开发环境进行设置,在【Project】/【Setting】的【Link】选项卡中添加:libufun.lib和libugopenint.lib两个库文件[2],把前面步形成的gear.c更改为c++程序:gear.cpp,并且把它与gear.h加载进VC。在针对gear.cpp的程序编写中,主要是编写相应“确定”按钮的回调函数int GEAR_ok ( int dialog_id, void * client_data,UF_STYLER_item_value_type_p_t callback_data)。为了读取UI界面数据程序的清晰,设计参数读取函数:void Read_para(int dialog_id),其中关键代码如下:
……
UF_STYLER_item_value_type_t data[7];//data[7]为UI界面操作的结构体数据类型;
……
data[0].item_attr=UF_STYLER_VALUE;//获取UI整体界面属性;
data[0].item_id= GEAR_D;//获取内齿轮外径元素属性;
UF_STYLER_ask_value(dialog_id,&data[0]);//获取内齿轮外径数据并存入&data[0]中;
……
回调函数GEAR_ok通过调用Read_para建立UI界面与Grip 程序的数据传递,关键代码如下:
完成gear.cpp的编程后,对其进行编译连接,生成对应的gear.dll,将它拷贝到application文件夹下,启动NX,运行结果如图5所示。
图5 内齿轮
3 结束语
NX功能的强大,不仅仅体现在它本身内置的一些功能,还体现在它对二次开发的强大支持上,只有充分的挖掘NX的潜能,定制具有专业特色领域的NX功能,才能更高效准确的进行设计。本文很好的阐述了运用NX/Open API与Grip技术进行渐开线的内齿轮开发,利用这种开发思路可以开发出其余种类的齿轮,为机械齿轮领域的NX参数化设计提供了条件。
[1] 张志强,夏尊凤,许焰.任意转角位置的渐开线齿轮齿面参数方程的研究[J].机械设计与制造,2005,8(8):52-54.
[2] 夏天,吴立军.UG二次开发技术基础[M].电子工业出版社,2005:89-90.