何 寥,闫红宾,于 亮,李 一,张绍举
(北京航天发射技术研究所,北京 100076)
在产品开发设计过程中,存在着大量的标准件、通用件,甚至有大量尺寸规格不同,但拓扑结构相同或相似的非标准件,设计人员常常仅因尺寸不同而不得不对相似零件进行重复设计,非常耗费时间精力。
Siemens NX(以下简称NX)提供了功能强大的参数化设计功能,零件参数化设计后,只要修改参数表达式就可以相应改变零件模型,实现零件的参数驱动,生成同系列不同规格的零件。
本文在对NX参数表达式进行结构分析的基础上,通过VC++编程调用OLE访问并提取Excel表格数据,自动生成表达式文件,用来驱动参数化的NX模型生成不同规格的标准件,这种方法能够实现在不改变应用程序的情况下,用户可以自行扩展快速生成不同零件类型的标准件库,程序扩展性、通用性好,大大提高了标准件建模的效率。
参数化建模技术是NX软件的精华,是CAD技术的发展方向之一。参数是设计过程中的核心。参数化设计也可称为尺寸驱动,是指参数化模型的所有尺寸,部分或全部使用相应的表达式或其他方式指定,修改参数值后,由NX自动完成表达式中或与之相关联的其他参数的改变,其本质是在保持原有图形的拓扑关系不变的基础上通过修改图形的尺寸,实现产品的系列化设计。
表达式是NX中进行参数化设计的重要手段。表达式的特点是把各参数之间的关系通过指定各参数的函数关系来表达。可以把参数定义为具体数字、数学公式等,或者把几个参数用数学运算符连接使其产生关联。
下面以标准件液压24°锥直通管接头为例,进行NX参数化建模。
24°锥直通管接头结构尺寸如图1所示,其整体尺寸数据见表1,局部油口尺寸数据见表2。根据以上数据采用NX进行任一规格直通管接头(以1D-18规格为例)的三维建模如图2所示,完成NX建模以后选择NX工具菜单中表达式选项,对相关尺寸表达式进行命名整理后如图3所示。
图1 24°锥直通管接头
表1 24°锥直通管接头整体尺寸 (单位:mm)
表2 24°锥直通管接头局部油口尺寸 (单位:mm)
图2 24°锥直通管接头三维模型
图3 24°锥直通管接头相关表达式
通过以上操作即实现了24°锥直通管接头的NX参数化建模,后续通过修改表达式的值就可以实现模型更改,如果手动修改表达式的值非常耗费时间精力,如何快速按照相应规格尺寸修改表达式的值以生成相应标准件模型,是标准件库建模的关键。
NX软件提供了表达式导入、导出功能,点击NX表达式对话框上“导出表达式”按钮,将表达式导出成.exp格式的文本文件,用记事本打开后如图4所示,每行都是一个变量表达式,对其结构进行分析可以看出,每行的结构都是“[单位]变量名=变量值”,如果采用编程软件编制程序自动生成同样结构的表达式文件,再通过“导入表达式”按钮将表达式的值导入模型进行更新,就可以快速生成新的标准件模型。
图4 记事本打开表达式
Microsoft Visual Studio C++(以下简称VC++)作为功能强大的编程开发工具,提供了强大的文件处理功能,既能够轻松实现对普通文本文件的读写,又能够实现对Excel等文件的读写。
VC++使用CStdioFile类来操作文件,打开并按行读取文本文件的代码:
CStdioFile MyTxtFile;
CString TXTLine;
MyTxtFile.Open(_T(“文本文件全名”)),CFile::modeRead);
MyTxtFile.ReadString(TXTLine);
打开并按行写入文件的代码:
CStdioFile MyTxtFile;
MyTxtFile.Open(_T(“文 本 文 件 全 名”),CFile::modeCreate|CFile::modeWrite);
MyTxtFile.WriteString(_T(“要写入内容”));
以上可以实现对“.txt”“.exp”,等文本格式文件的读写。
VC++采用OLE技术实现对Excel文件的读写。
读取Excel文件第1个表格的“A1”单元格的内容赋值给第2个表格“B2”单元格的代码如下:
CApplication objApp;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CWorkbook objBook;
CWorkbooks objBooks;
CWorksheet objSheet;
CWorksheets objSheets;
CRange objRange;
CString Cstr;
objBook = objBooks.Open(_T(“Excel文件全名”),
covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional );
objSheets = objBook.get_Worksheets();
objSheet = objSheets.get_Item(COleVariant((short)1));//第1个表格。
objRange = objSheet.get_Range(COleVariant(_T(“A1”)),COleVariant(_T(“A1”)));// “A1”单元格
Cstr=COleVariantToCstr(objRange.get_Value2());//读取第1个表格中A1单元格的值赋给字符串变量Cstr
objSheet = objSheets.get_Item(COleVariant((short)2));//第2个表格。
objRange = objSheet.get_Range(COleVariant(_T(“B2”)),COleVariant(_T(“B2”)));// “B2”单元格
objRange.put_Value2( COleVariant(Cstr));//将字符串变量赋值给第2个表格“B2”单元格。
为了生成如图4的表达式文件,先建一个Excel文件,其第1个表格(命名为“表格1”)内容如图5所示,表格1规定了变量数量(A3)、标准件规格(A5)、变量名(C2~N2)、单位(C3~N3)、变量值(C5~N5),通过VC++按照变量数量循环获取单位(C3~N3)、变量名(C2~N2)、变量值(C5~N5),并按照格式“[单位]变量名=变量值”逐行输入到指定文本文件就可以得到如图4所示的表达式文件,用于驱动参数化的NX模型生成不同规格的标准件。
图5 Excel文件表格1内容
如图5所示的表格1是用于应用程序按照图4每行的格式生成表达式文件用的,要实现参数驱动还需要将图5 表格1中的标准件规格(A5)和变量值(C5~N5)进行数据关联,这靠Excel本身的功能来实现。具体如下:
在Excel文件中建立第2个表格(命名为“表格2”),表格2内容为直通接头各种规格的全部数据,如图6所示。
图6 Excel文件表格2内容
对表格1中A5单元格进行数据有效性设置:打开Excel表格, 选择表格1中A5 单元格后,点击工具栏-数据-数据有效性,在弹出页面中,将“允许”项设置为“序列”,选中忽略空值,来源设置为表格2的A2:A1000,设置后表格1中A5单元格的值就只能从表格2的A2:A1000中非空值中选取了。
通过Excel的VLOOKUP函数对表格1中的单元格C5进行数据匹配:双击单元格C5,填入函数内容“=VLOOKUP($A$5,表格2!$A$2:$N$1000,3,0)”,即可实现表格1中C5单元格的值根据表格1中A5单元格的选择自动从表格2中第3列(C列)查找匹配数据,同理对表格1中D5~N5进行数据匹配设置。完成设置后就实现了Excel数据关联功能:表格1中A5(标准件规格)选定某一规格后,变量值(C5~N5)自动根据表2数据匹配到相应的值。
对于更为复杂的零件,Excel文件中可以再增加表格,用于存储局部结构的尺寸数据,表格2中的局部结构尺寸数据可以从新增加的表格中查询得到。
采用VC++开发工具编制应用程序,程序共有五种文件组成。
1)一个.exe文件:界面程序,用户操作的入口。
2)一个.txt文件:标准件类型汇总文件,文本文件类型,每行表示一种标准件类别,如直通接头、弯通接头、三通接头等,界面程序读取.txt文件内容,供用户选择是对哪种零件进行建模。
3)多个.prt文件:参数化的NX模型文件,每个文件对应一种标准件,.prt文件的文件名要与.txt文件中的标准件类别名称一致,界面程序根据此名称打开相应的.prt文件。
4)多个.xlsx文件:模型的数据文件,每个文件存储一种标准件的数据,.xlsx文件的文件名也要与.txt文件中的标准件类别名称一致,界面程序根据此名称读取相应的数据,.xlsx文件的第1个表格要有与图5中表格相同的结构,变量相关参数根据不同模型进行相应设置;第2个表格要有与图6中表格相同的结构(第1列为规格参数标识),变量相关参数根据不同模型进行相应设置;较为复杂的模型可以增加更多的表格存储局部结构数据,以供表格2查询获取。
5).exp文件:NX表达式文件,界面程序的输出结果,相应的.prt模型文件导入此文件即可生成新规格的模型,快速形成标准件系列化。
用户在使用过程中如果想增加一种标准件类别,不用更改.exe界面程序,只需在.txt文件中增加一行标准件类别名称,并增加符合以上要求的、同名的.prt文件和.xlsx文件,界面程序根据名称自动识别新增的标准件类别,实现了应用程序极好的扩展性。
点击执行.exe程序,出现初始界面。
依次选择标准件类型和规格参数,标准件类型列表为程序读取.txt文件获取,规格参数列表为程序根据所选的标准件类型自动从相应.xlsx文件中第2个表格的第1列获取。
完成设置后点击“生成表达式”按钮即可生成所选标准件(直通接头1D-52)的表达式文件。
然后点击“打开3D文件”按钮,打开相应.prt模型文件,通过NX导入程序生成的表达式文件即可快速生成新的模型。
这种标准件库建模方式最大的优点是不需更改界面程序,用户只需进行txt文件、Excel数据和NX模型相关操作就可以快速生产不同零件类型的标准件库,程序的扩展性和通用性非常好,提高了标准件建模的效率。