何 寥,閆紅賓,于 亮,李 一,張紹舉
(北京航天發(fā)射技術(shù)研究所,北京 100076)
在產(chǎn)品開發(fā)設(shè)計(jì)過程中,存在著大量的標(biāo)準(zhǔn)件、通用件,甚至有大量尺寸規(guī)格不同,但拓?fù)浣Y(jié)構(gòu)相同或相似的非標(biāo)準(zhǔn)件,設(shè)計(jì)人員常常僅因尺寸不同而不得不對(duì)相似零件進(jìn)行重復(fù)設(shè)計(jì),非常耗費(fèi)時(shí)間精力。
Siemens NX(以下簡(jiǎn)稱NX)提供了功能強(qiáng)大的參數(shù)化設(shè)計(jì)功能,零件參數(shù)化設(shè)計(jì)后,只要修改參數(shù)表達(dá)式就可以相應(yīng)改變零件模型,實(shí)現(xiàn)零件的參數(shù)驅(qū)動(dòng),生成同系列不同規(guī)格的零件。
本文在對(duì)NX參數(shù)表達(dá)式進(jìn)行結(jié)構(gòu)分析的基礎(chǔ)上,通過VC++編程調(diào)用OLE訪問并提取Excel表格數(shù)據(jù),自動(dòng)生成表達(dá)式文件,用來(lái)驅(qū)動(dòng)參數(shù)化的NX模型生成不同規(guī)格的標(biāo)準(zhǔn)件,這種方法能夠?qū)崿F(xiàn)在不改變應(yīng)用程序的情況下,用戶可以自行擴(kuò)展快速生成不同零件類型的標(biāo)準(zhǔn)件庫(kù),程序擴(kuò)展性、通用性好,大大提高了標(biāo)準(zhǔn)件建模的效率。
參數(shù)化建模技術(shù)是NX軟件的精華,是CAD技術(shù)的發(fā)展方向之一。參數(shù)是設(shè)計(jì)過程中的核心。參數(shù)化設(shè)計(jì)也可稱為尺寸驅(qū)動(dòng),是指參數(shù)化模型的所有尺寸,部分或全部使用相應(yīng)的表達(dá)式或其他方式指定,修改參數(shù)值后,由NX自動(dòng)完成表達(dá)式中或與之相關(guān)聯(lián)的其他參數(shù)的改變,其本質(zhì)是在保持原有圖形的拓?fù)潢P(guān)系不變的基礎(chǔ)上通過修改圖形的尺寸,實(shí)現(xiàn)產(chǎn)品的系列化設(shè)計(jì)。
表達(dá)式是NX中進(jìn)行參數(shù)化設(shè)計(jì)的重要手段。表達(dá)式的特點(diǎn)是把各參數(shù)之間的關(guān)系通過指定各參數(shù)的函數(shù)關(guān)系來(lái)表達(dá)??梢园褏?shù)定義為具體數(shù)字、數(shù)學(xué)公式等,或者把幾個(gè)參數(shù)用數(shù)學(xué)運(yùn)算符連接使其產(chǎn)生關(guān)聯(lián)。
下面以標(biāo)準(zhǔn)件液壓24°錐直通管接頭為例,進(jìn)行NX參數(shù)化建模。
24°錐直通管接頭結(jié)構(gòu)尺寸如圖1所示,其整體尺寸數(shù)據(jù)見表1,局部油口尺寸數(shù)據(jù)見表2。根據(jù)以上數(shù)據(jù)采用NX進(jìn)行任一規(guī)格直通管接頭(以1D-18規(guī)格為例)的三維建模如圖2所示,完成NX建模以后選擇NX工具菜單中表達(dá)式選項(xiàng),對(duì)相關(guān)尺寸表達(dá)式進(jìn)行命名整理后如圖3所示。
圖1 24°錐直通管接頭
表1 24°錐直通管接頭整體尺寸 (單位:mm)
表2 24°錐直通管接頭局部油口尺寸 (單位:mm)
圖2 24°錐直通管接頭三維模型
圖3 24°錐直通管接頭相關(guān)表達(dá)式
通過以上操作即實(shí)現(xiàn)了24°錐直通管接頭的NX參數(shù)化建模,后續(xù)通過修改表達(dá)式的值就可以實(shí)現(xiàn)模型更改,如果手動(dòng)修改表達(dá)式的值非常耗費(fèi)時(shí)間精力,如何快速按照相應(yīng)規(guī)格尺寸修改表達(dá)式的值以生成相應(yīng)標(biāo)準(zhǔn)件模型,是標(biāo)準(zhǔn)件庫(kù)建模的關(guān)鍵。
NX軟件提供了表達(dá)式導(dǎo)入、導(dǎo)出功能,點(diǎn)擊NX表達(dá)式對(duì)話框上“導(dǎo)出表達(dá)式”按鈕,將表達(dá)式導(dǎo)出成.exp格式的文本文件,用記事本打開后如圖4所示,每行都是一個(gè)變量表達(dá)式,對(duì)其結(jié)構(gòu)進(jìn)行分析可以看出,每行的結(jié)構(gòu)都是“[單位]變量名=變量值”,如果采用編程軟件編制程序自動(dòng)生成同樣結(jié)構(gòu)的表達(dá)式文件,再通過“導(dǎo)入表達(dá)式”按鈕將表達(dá)式的值導(dǎo)入模型進(jìn)行更新,就可以快速生成新的標(biāo)準(zhǔn)件模型。
圖4 記事本打開表達(dá)式
Microsoft Visual Studio C++(以下簡(jiǎn)稱VC++)作為功能強(qiáng)大的編程開發(fā)工具,提供了強(qiáng)大的文件處理功能,既能夠輕松實(shí)現(xiàn)對(duì)普通文本文件的讀寫,又能夠?qū)崿F(xiàn)對(duì)Excel等文件的讀寫。
VC++使用CStdioFile類來(lái)操作文件,打開并按行讀取文本文件的代碼:
CStdioFile MyTxtFile;
CString TXTLine;
MyTxtFile.Open(_T(“文本文件全名”)),CFile::modeRead);
MyTxtFile.ReadString(TXTLine);
打開并按行寫入文件的代碼:
CStdioFile MyTxtFile;
MyTxtFile.Open(_T(“文 本 文 件 全 名”),CFile::modeCreate|CFile::modeWrite);
MyTxtFile.WriteString(_T(“要寫入內(nèi)容”));
以上可以實(shí)現(xiàn)對(duì)“.txt”“.exp”,等文本格式文件的讀寫。
VC++采用OLE技術(shù)實(shí)現(xiàn)對(duì)Excel文件的讀寫。
讀取Excel文件第1個(gè)表格的“A1”單元格的內(nèi)容賦值給第2個(gè)表格“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個(gè)表格。
objRange = objSheet.get_Range(COleVariant(_T(“A1”)),COleVariant(_T(“A1”)));// “A1”單元格
Cstr=COleVariantToCstr(objRange.get_Value2());//讀取第1個(gè)表格中A1單元格的值賦給字符串變量Cstr
objSheet = objSheets.get_Item(COleVariant((short)2));//第2個(gè)表格。
objRange = objSheet.get_Range(COleVariant(_T(“B2”)),COleVariant(_T(“B2”)));// “B2”單元格
objRange.put_Value2( COleVariant(Cstr));//將字符串變量賦值給第2個(gè)表格“B2”單元格。
為了生成如圖4的表達(dá)式文件,先建一個(gè)Excel文件,其第1個(gè)表格(命名為“表格1”)內(nèi)容如圖5所示,表格1規(guī)定了變量數(shù)量(A3)、標(biāo)準(zhǔn)件規(guī)格(A5)、變量名(C2~N2)、單位(C3~N3)、變量值(C5~N5),通過VC++按照變量數(shù)量循環(huán)獲取單位(C3~N3)、變量名(C2~N2)、變量值(C5~N5),并按照格式“[單位]變量名=變量值”逐行輸入到指定文本文件就可以得到如圖4所示的表達(dá)式文件,用于驅(qū)動(dòng)參數(shù)化的NX模型生成不同規(guī)格的標(biāo)準(zhǔn)件。
圖5 Excel文件表格1內(nèi)容
如圖5所示的表格1是用于應(yīng)用程序按照?qǐng)D4每行的格式生成表達(dá)式文件用的,要實(shí)現(xiàn)參數(shù)驅(qū)動(dòng)還需要將圖5 表格1中的標(biāo)準(zhǔn)件規(guī)格(A5)和變量值(C5~N5)進(jìn)行數(shù)據(jù)關(guān)聯(lián),這靠Excel本身的功能來(lái)實(shí)現(xiàn)。具體如下:
在Excel文件中建立第2個(gè)表格(命名為“表格2”),表格2內(nèi)容為直通接頭各種規(guī)格的全部數(shù)據(jù),如圖6所示。
圖6 Excel文件表格2內(nèi)容
對(duì)表格1中A5單元格進(jìn)行數(shù)據(jù)有效性設(shè)置:打開Excel表格, 選擇表格1中A5 單元格后,點(diǎn)擊工具欄-數(shù)據(jù)-數(shù)據(jù)有效性,在彈出頁(yè)面中,將“允許”項(xiàng)設(shè)置為“序列”,選中忽略空值,來(lái)源設(shè)置為表格2的A2:A1000,設(shè)置后表格1中A5單元格的值就只能從表格2的A2:A1000中非空值中選取了。
通過Excel的VLOOKUP函數(shù)對(duì)表格1中的單元格C5進(jìn)行數(shù)據(jù)匹配:雙擊單元格C5,填入函數(shù)內(nèi)容“=VLOOKUP($A$5,表格2!$A$2:$N$1000,3,0)”,即可實(shí)現(xiàn)表格1中C5單元格的值根據(jù)表格1中A5單元格的選擇自動(dòng)從表格2中第3列(C列)查找匹配數(shù)據(jù),同理對(duì)表格1中D5~N5進(jìn)行數(shù)據(jù)匹配設(shè)置。完成設(shè)置后就實(shí)現(xiàn)了Excel數(shù)據(jù)關(guān)聯(lián)功能:表格1中A5(標(biāo)準(zhǔn)件規(guī)格)選定某一規(guī)格后,變量值(C5~N5)自動(dòng)根據(jù)表2數(shù)據(jù)匹配到相應(yīng)的值。
對(duì)于更為復(fù)雜的零件,Excel文件中可以再增加表格,用于存儲(chǔ)局部結(jié)構(gòu)的尺寸數(shù)據(jù),表格2中的局部結(jié)構(gòu)尺寸數(shù)據(jù)可以從新增加的表格中查詢得到。
采用VC++開發(fā)工具編制應(yīng)用程序,程序共有五種文件組成。
1)一個(gè).exe文件:界面程序,用戶操作的入口。
2)一個(gè).txt文件:標(biāo)準(zhǔn)件類型匯總文件,文本文件類型,每行表示一種標(biāo)準(zhǔn)件類別,如直通接頭、彎通接頭、三通接頭等,界面程序讀取.txt文件內(nèi)容,供用戶選擇是對(duì)哪種零件進(jìn)行建模。
3)多個(gè).prt文件:參數(shù)化的NX模型文件,每個(gè)文件對(duì)應(yīng)一種標(biāo)準(zhǔn)件,.prt文件的文件名要與.txt文件中的標(biāo)準(zhǔn)件類別名稱一致,界面程序根據(jù)此名稱打開相應(yīng)的.prt文件。
4)多個(gè).xlsx文件:模型的數(shù)據(jù)文件,每個(gè)文件存儲(chǔ)一種標(biāo)準(zhǔn)件的數(shù)據(jù),.xlsx文件的文件名也要與.txt文件中的標(biāo)準(zhǔn)件類別名稱一致,界面程序根據(jù)此名稱讀取相應(yīng)的數(shù)據(jù),.xlsx文件的第1個(gè)表格要有與圖5中表格相同的結(jié)構(gòu),變量相關(guān)參數(shù)根據(jù)不同模型進(jìn)行相應(yīng)設(shè)置;第2個(gè)表格要有與圖6中表格相同的結(jié)構(gòu)(第1列為規(guī)格參數(shù)標(biāo)識(shí)),變量相關(guān)參數(shù)根據(jù)不同模型進(jìn)行相應(yīng)設(shè)置;較為復(fù)雜的模型可以增加更多的表格存儲(chǔ)局部結(jié)構(gòu)數(shù)據(jù),以供表格2查詢獲取。
5).exp文件:NX表達(dá)式文件,界面程序的輸出結(jié)果,相應(yīng)的.prt模型文件導(dǎo)入此文件即可生成新規(guī)格的模型,快速形成標(biāo)準(zhǔn)件系列化。
用戶在使用過程中如果想增加一種標(biāo)準(zhǔn)件類別,不用更改.exe界面程序,只需在.txt文件中增加一行標(biāo)準(zhǔn)件類別名稱,并增加符合以上要求的、同名的.prt文件和.xlsx文件,界面程序根據(jù)名稱自動(dòng)識(shí)別新增的標(biāo)準(zhǔn)件類別,實(shí)現(xiàn)了應(yīng)用程序極好的擴(kuò)展性。
點(diǎn)擊執(zhí)行.exe程序,出現(xiàn)初始界面。
依次選擇標(biāo)準(zhǔn)件類型和規(guī)格參數(shù),標(biāo)準(zhǔn)件類型列表為程序讀取.txt文件獲取,規(guī)格參數(shù)列表為程序根據(jù)所選的標(biāo)準(zhǔn)件類型自動(dòng)從相應(yīng).xlsx文件中第2個(gè)表格的第1列獲取。
完成設(shè)置后點(diǎn)擊“生成表達(dá)式”按鈕即可生成所選標(biāo)準(zhǔn)件(直通接頭1D-52)的表達(dá)式文件。
然后點(diǎn)擊“打開3D文件”按鈕,打開相應(yīng).prt模型文件,通過NX導(dǎo)入程序生成的表達(dá)式文件即可快速生成新的模型。
這種標(biāo)準(zhǔn)件庫(kù)建模方式最大的優(yōu)點(diǎn)是不需更改界面程序,用戶只需進(jìn)行txt文件、Excel數(shù)據(jù)和NX模型相關(guān)操作就可以快速生產(chǎn)不同零件類型的標(biāo)準(zhǔn)件庫(kù),程序的擴(kuò)展性和通用性非常好,提高了標(biāo)準(zhǔn)件建模的效率。