广西华原过滤系统股份有限公司 537000
摘要:本文这针对采用C++、VC++、VB或VB.net等高级语言进行UG二次开发较难掌握的问题,提出一种基于Excel VBA编程与NX Open Grip编程相结合的、且易于掌握的产品参数化设计方法,采用此方法可以对产品的各项参数进行简单、快速地设计和修改。
关键词:Excel VBA、NX Open Grip、参数化设计、UG二次开发
引言
Siemens NX是当前三维图形设计软件中使用最为广泛的应用软件之一,该软件功能强大,操作简便,普遍应用于通用机械、模具、家电、汽车及航天领域。该软件包含的UG/Open系列开发工具为NX的二次开发提供了多种多样的实现方式。比如,可通过UG/Open Grip、UG/Open API、UG/Open C++或UG/Open VC等进行NX的二次开发,以实现快速建模、标准建模和快速修改等操作[1]~[3]。但是这几种二次开发方法需要安装C++、VC++、VB或VB.net等专业软件才可进行开发,并且对开发人员的编程能力要求较高。而UG/Open Grip虽说属于NX自带的功能模块,但设计者需要熟练掌握各类功能语句的前提下才有可能进行相关的NX二次开发功能工作,这不利于机械行业设计开发人员快速学习掌握。本文针对以上几种NX二次开发方法较难掌握的问题,提出一种基于Excel VBA编程与NX Open Grip相结合的、非常易于掌握的产品参数化设计方法,采用此方法可以对产品的各项参数进行简单、快速地设计和修改。
开发工具介绍
本文所述方法用到的软件为Excel VBA和NX Open Grip,Excel VBA编程是Office Excel自带的功能模块,从菜单设置里把“开发工具”选项调出。点击菜单栏中的【Visual Basic】按钮便会调出VB编程界面,在该界面下可采用VB编程方法可以对Excel工作簿进行各种操作。NX Open Grip是NX/UG自带的二次编程模块, UG操作界面中的所有功能均能够通过NX Open Grip编程来实现。本文所论述的建模方法是在Office Excel 2008和UG12.0下进行构建的。
UG文件端和Excel文件端的数据传递方法
UG三维建模软件可以实现参数化的设计,在【建模】模式下,通过软件界面命令绘制的三维模型,其每个特征在后台都会对应有相应的参数,通过修改这些参数,可以对模型的形状、尺寸进行修改。比如,一个简单地圆柱体,它有直径和高度两个关键参数,通过【工具】->【表达式】选项打开文件表达式列表[4],可以看到这个圆柱体的所有参数,修改这些参数就可以对模型尺寸进行修改。本文论述的方法应用到【表达式】选项中的表达式批量导入功能,以此输入口来批量修改模型参数,表达式导入界面如图所示。
图1 表达式导入界面
支持表达式导入的文件为后缀名为“.exp”的文本文件,文件中的每行为一个参数表达式,不同参数表达式有不同的书写方式,一般书写格式为:
[单位]参数名称=表达式(或参数值)
其中,“表达式”可以是各种参数的复合运算值,也可以是具体的数值,如图2所示;
图2 表达式文件样例
本文论述的模型数据传递原理如图3所示,通过Excel VBA程序自动生成表达式文件,通过Grip编程设计一个具有表达式文件导入功能的可执行文件(*.grx),并将该可执行文件与UG界面中的用户自定义命令关联起来,点击该命令按钮即可导入指定的表达式文件(*.exp)。每当我们通过Excel模板文件修改完参数,并运行VBA程序自动生成更新了数值的表达式文件(*.exp),接着在UG建模界面中点击自定义的表达式文件导入命令按钮,即可完成对3D模型数据的更新。
图3 UG三维模型数据传递更新原理
模型数据传递方法的构建步骤如下:
在UG建模中绘制全参数化的产品模型,并对各个尺寸进行命名(命名是为了提高可读性,以方便修改和识别),如图2所示;
在Excel软件中设计模板文件,文件中以图表对照的方式将模型的各个尺寸参数按顺序罗列出来,包括单位、参数名以及参数表达式(或参数值),如图5所示;
采用Excel开发工具中的 VBA编程功能编写代码,自动生成表达式文件(*.exp),如图2所示;
采用NX Open Grip编程功能,在UG界面中设计一个可以将表达式导入功能的命令按钮,通过点击这个命令按钮就可以将步骤(3)生成的表达式文件导入,从而完成对模型数据的更新。
UG模板数据的建模方法及要求
为达到通过修改参数就可对模型尺寸进行修改的目的,需在UG建模环境下绘制模板数据(3D模型),模板数据的构建步骤如下:
在建模环境下,绘制全参数化的模型,模型与所设计的零件的最终形状、比例要基本一致;
通过【工具】-【表达式】选项调出表达式输入界面,如图1所示,并在表达式交互界面中自定义表达式,表达式的名称应易于理解;
在建模环境下,通过【回滚编辑】命令修改模型特征尺寸参数,将模型尺寸参数关联到步骤(2)自定义的表达式,如图4所示;
检查:在表达式输入界面下,通过修改其中表达式的值,可以修改模型尺寸,以此来检查模型尺寸参数与表达式的关联是否正确。
图4 参数关联示意
所构建的参数模型需要保留参数,不能去除过程参数。如果涉及草图绘制后再通过拉伸、旋转等命令生成实体,要求所绘制的草图应该是完全约束的状态,这样可以避免通过导入表达式文件驱动更新实体时出现不可预料的错误。
Excel文件端的表格设计方法及要求
以图形对照的方式,在Excel表格中设计出可以方便进行图纸参数修改的模板表格,可以左边为参数栏,右边为尺寸对照,如图5所示。表格至少包含3列,分别用于填写表达式的单位、符号名称、参数值,其它用于备注的内容也可以增罗列其中,以方便理解。如果UG模型数据包含多个零件,可以将不同零件的参数分列在同一个工作簿的不同工作表中。
图5 Excel模板文件格式
通过这个模板表格可以直观、快捷地修改模型的各个参数,然后采用VBA编程方法将这些参数以UG软件可识别的格式(见图2)生成表达式文件。
Excel VBA对应的编程代码相对简单,且格式相对固定。也可以设计简单的VBA程序界面,然后在界面中添加相应功能按钮,点击相应功能按钮可以生成表达式文件(*.exp)。具体代码如下:
Private Sub CBtn_ShuChuCanShu_Click()
Dim str1 As String
Dim str_datas1 As String
Dim str_sheet_name As String
Dim MyFile As Object
Dim myStr As String
Set MyFile = CreateObject _
("Scripting.FileSystemObject").OpenTextFile _
("D:\MyNX_Grip_Files\YK3348U_CanShuBiao.exp", 2, True)
'***读取并输出 主滤芯参数 ***
str_sheet_name = "主滤芯"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 上端盖Z 参数 ***
str_sheet_name = "上端盖(Z)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 下端盖Z 参数 ***
str_sheet_name = "下端盖(Z)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 内外网Z 盖参数 ***
str_sheet_name = "内外网(Z)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 滤纸Z 参数 ***
str_sheet_name = "滤纸(Z)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 安全芯参数 ***
str_sheet_name = "安全芯"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 上端盖A 参数 ***
str_sheet_name = "上端盖(A)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 下端盖A 参数 ***
str_sheet_name = "下端盖(A)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 内外网A 参数 ***
str_sheet_name = "内外网(A)"
Call Output_Datas(str_sheet_name, MyFile)
'***读取并输出 滤纸A 参数 ***
str_sheet_name = "滤纸(A)"
Call Output_Datas(str_sheet_name, MyFile)
MyFile.Close
Set MyFile = Nothing
End Sub
Private Sub Output_Datas(str_sheet_name1 As String, MyFile1 As Object)
Dim i_Line As Integer
Dim str_datas1 As String
i_Line = 2
Do
If Sheets(str_sheet_name1).Cells(i_Line, 3).Text <> "" Then _
str_datas1 = Sheets(str_sheet_name1).Cells(i_Line, 3).Text & _ Sheets(str_sheet_name1).Cells(i_Line, 4).Text & "=" & _ Sheets(str_sheet_name1).Cells(i_Line, 5).Text
Else
str_datas1 = Sheets(str_sheet_name1).Cells(i_Line, 4).Text _
& "=" & Sheets(str_sheet_name1).Cells(i_Line, 5).Text
End If
MyFile1.WriteLine (str_datas1)
i_Line = i_Line + 1
Loop While (Sheets(str_sheet_name1).Cells(i_Line, 4).Text <> "")
End Sub
UG中设计自定义命令按钮导入表达式文件
通过UG软件自带的NX Open Grip编程功能编写Grip程序代码(*.grs),并将代码编译(*.gri)、连接为可执行文件(*.grx)[5]。实现表达式导入功能的Grip程序代码如下:
EXPIMP/‘D:\MyNX_Grip_Files\YK3348U_CanShuBiao.EXP',REPLAC
halt
Excel VB生成的*.exp文件的路径就是Grip编程所要读取的文件路径,两者要保持一致,否则数据更新会失败。
接着,在UG建模界面中以拖动方式定制用户图标命令,见图6所示。然后,在定制状态下将这个图标命令与所所编写的Grip程序的可执行代码文件关联(*.grx),如图7、图8所示。
图6 定制用户命令
图7 按钮功能编辑
图8 用户定制按钮示意
完成以上操作后,通过点击自定义按钮(比如【更新空滤芯参数】)就可以实现模型数据的自动更新。
实例效果演示
比如,当前UG中的模板文件设计的是一个滤清器滤芯,如图9(a)所示,现在要在原模型基础上同时修改上下端盖的直径、滤芯高度等参数。先在Excel模板文件中将端盖、滤芯高度等尺寸参数一次性修改好,然后运行VBA程序生成表达式文件(如YK3348U_CanShuBiao.EXP);接着,点击UG界面中用户定制按钮【更新空滤芯参数】,模型尺寸即可完成修改,如图9(b)所示。每次修改模型参数后只需进行两次鼠标点击操作即可完成一个模型数据的修改更新。
(a)修改前 (b)修改后
图9 UG产品模型修改前后对比
结论
本文论述了一种基于Excel VBA编程与NX Open Grip编程相结合的产品参数化设计二次开发方法,采用此方法设计员不需要通过复杂的高级语言编程和Grip编程,即可实现对产品尺寸参数进行快速修改,以缩短产品开发周期。此二次开发涉及的VBA和Grip编程代码相对简单且固定,方便机械设计人员快速学习掌握。此设计方法非常适用于产品基本型相对固定,而衍生型号较多的产品设计场合,采用此方法修改模型参数可以极大地缩减方案设计和修改时间,极大提升设计效率。
参考文献
[1]赵韩,朱可,张炳力,张冰战,基于UG二次开发的参数化零件族系统.合肥工业大学学报(自然科学版),2006年8月:929-932;
[2]蒋玲玲,王细洋,基于VC++的UG二次开发技术UG/Open MenuScript的应用.计算机与现代化,2009年第10期:101-103;
[3]索小娟,孙桓五,UG二次开发中菜单定制与设计技术的应用研究. 机械管理开发,2009年6月第24卷第3期:150-151;
[4] 刘宏利,基于UG的EXP文件的直齿圆柱齿轮的参数化设计,新技术新工艺·数字技术与机械加工工艺装备,2009第9期;
[5] 夏天,吴立军,UG二次开发技术基础,电子工业出版社,2005;
作者简介
成文术, 1983年生,男,壮族,籍贯:广西南宁隆安县;
学历:硕士研究生,职称:中级工程师(机械工程);
研究方向:机电系统控制;
单位:广西华原过滤系统股份有限公司
QQ:568028347,邮箱:cwsqq_2005@qq.com;
电话:15977574651