潘泓誼 劉淑梅 毛欣然
(上海工程技術(shù)大學(xué) 材料工程學(xué)院,上海 201620)
標(biāo)準(zhǔn)件庫(kù)在產(chǎn)品成體系的企業(yè)中有著非常廣泛應(yīng)用。然而,UG部件族標(biāo)準(zhǔn)件庫(kù)和UG/Open API開(kāi)發(fā)標(biāo)準(zhǔn)件庫(kù)都存在兼容性問(wèn)題,且后者的開(kāi)發(fā)成本高,入門困難,給標(biāo)準(zhǔn)件庫(kù)的開(kāi)發(fā)造成了一定困難。
課題組以UG系統(tǒng)為基礎(chǔ),重點(diǎn)闡述UG高通用性標(biāo)準(zhǔn)庫(kù)制作程序二次開(kāi)發(fā)的關(guān)鍵思路,實(shí)現(xiàn)了面向模型的標(biāo)準(zhǔn)化實(shí)體及特征編譯方式,并設(shè)計(jì)了基于UG/Open GRIP的標(biāo)準(zhǔn)庫(kù)代碼生成系統(tǒng)流程,為標(biāo)準(zhǔn)件庫(kù)的建立提供了一個(gè)高效和實(shí)用的方案。
零件建模一般需要先閱讀并抽象圖中的幾何元素,后通過(guò)實(shí)體特征建立外形、內(nèi)腔和孔洞,將外形實(shí)體減去內(nèi)腔和孔洞,并對(duì)最終實(shí)體進(jìn)行細(xì)節(jié)的修飾,從而得到完整的零件建模。簡(jiǎn)而言之,零件建模就是通過(guò)人工識(shí)別圖紙中的各個(gè)零件特征,在外形實(shí)體的基礎(chǔ)上逐個(gè)添加特征,最后得到需要的零件。用戶將圖紙中幾何特征通過(guò)幾何體擬合后歸類為外形族,將實(shí)體內(nèi)腔和孔洞擬合后歸為內(nèi)腔族。系統(tǒng)自動(dòng)將外形族減去內(nèi)腔族便可以得到要求的體。根據(jù)標(biāo)準(zhǔn)件庫(kù)和標(biāo)準(zhǔn)件的總分關(guān)系,可以將系統(tǒng)編譯功能以代碼屬性分為單個(gè)零件的GRIP代碼和在單個(gè)零件數(shù)據(jù)基礎(chǔ)上生成的標(biāo)準(zhǔn)件庫(kù)GRIP代碼兩大類[1]。每個(gè)類別的編譯功能下,以用戶在軟件中主要操作類別設(shè)計(jì)對(duì)應(yīng)的功能、對(duì)應(yīng)功能族實(shí)體的定義和賦值、封裝實(shí)體信息并編譯為對(duì)應(yīng)代碼。
結(jié)合標(biāo)準(zhǔn)件庫(kù)的操作界面和零件建模流程,可以得出圖1中的GRIP標(biāo)準(zhǔn)件庫(kù)系統(tǒng)的程序框架。用戶只需給對(duì)應(yīng)功能族實(shí)體定義和賦值并給出代碼生成請(qǐng)求,即可生成GRIP語(yǔ)言的標(biāo)準(zhǔn)件庫(kù)。
圖1 系統(tǒng)框架圖
系統(tǒng)在Microsoft Visual Studio 2010(以下簡(jiǎn)稱VS2010)環(huán)境下開(kāi)發(fā),為4層體系,包括用戶層、應(yīng)用層、數(shù)據(jù)層及驅(qū)動(dòng)層。用戶層是軟件的交互界面,用戶通過(guò)可視化界面調(diào)用系統(tǒng)的各功能選項(xiàng)完成交互動(dòng)作。應(yīng)用層主要由標(biāo)準(zhǔn)件參數(shù)化建模和GRIP代碼生成器兩個(gè)功能模塊組成。標(biāo)準(zhǔn)件參數(shù)化建模模塊下的各模塊負(fù)責(zé)圖形界面對(duì)應(yīng)族實(shí)體的生成和屬性賦值[2]。GRIP代碼生成模塊對(duì)用戶對(duì)應(yīng)生成的對(duì)應(yīng)實(shí)體和賦值進(jìn)行GRIP語(yǔ)言的編譯和合成。數(shù)據(jù)層為系統(tǒng)緩存,由用戶賦值數(shù)據(jù)和代碼緩存組成。系統(tǒng)通過(guò)讀取各項(xiàng)數(shù)據(jù)得到所需的參數(shù),最終生成圖形界面對(duì)應(yīng)族實(shí)體及GRIP代碼緩存[3]。各功能模塊通過(guò)對(duì)數(shù)據(jù)緩存進(jìn)行讀寫(xiě)完成數(shù)據(jù)交互。驅(qū)動(dòng)層是在VS2010及UG/Open GRIP環(huán)境下對(duì)程序進(jìn)行編譯,完成相關(guān)的功能。通過(guò)UG/OpenAPI函數(shù)及GRIP語(yǔ)言函數(shù),從后臺(tái)調(diào)用UG系統(tǒng)的各項(xiàng)功能,完成對(duì)參數(shù)化建模和標(biāo)準(zhǔn)件庫(kù)的快速建立。
系統(tǒng)根據(jù)用戶設(shè)計(jì)結(jié)果生成標(biāo)準(zhǔn)件和標(biāo)準(zhǔn)件庫(kù)代碼,流程如圖2所示。單個(gè)標(biāo)準(zhǔn)件代碼由參數(shù)化建模模塊生成。模塊涵蓋了大部分?jǐn)M合實(shí)體及相同的內(nèi)腔和孔洞擬合實(shí)體。模塊程序?qū)τ脩粼O(shè)定的外形族和內(nèi)腔族擬合實(shí)體進(jìn)行創(chuàng)建和涂色,并對(duì)創(chuàng)建實(shí)體的形狀、尺寸、位置數(shù)據(jù)進(jìn)行記錄,保存至單個(gè)零件實(shí)體代碼緩存中。通過(guò)單個(gè)標(biāo)準(zhǔn)件GRIP代碼生成模塊對(duì)功能族數(shù)據(jù)運(yùn)算,從而得到單個(gè)標(biāo)準(zhǔn)件GRIP代碼和符合系統(tǒng)標(biāo)準(zhǔn)的標(biāo)準(zhǔn)件代碼緩存。標(biāo)準(zhǔn)件庫(kù)代碼框架生成模塊讀取標(biāo)準(zhǔn)件代碼緩存集合及標(biāo)準(zhǔn)件和標(biāo)準(zhǔn)件庫(kù)名稱,生成能被UG/Open GRIP編譯器編譯成程序的GRIP代碼。
圖2 GRIP標(biāo)準(zhǔn)庫(kù)建立流程
2.2.1 參數(shù)化建模方法
通過(guò)UG/Open API從外部驅(qū)動(dòng)UG完成建模和創(chuàng)建GRIP代碼。以圓柱體特征為主的標(biāo)準(zhǔn)件創(chuàng)建和GRIP代碼輸出為例,說(shuō)明參數(shù)化建模下如何生成顯示實(shí)體和代碼[4]。UF_MODL_create_cylinder函數(shù)能夠在顯示窗口創(chuàng)建圓柱體,其中高度、直徑以及中軸線矢量具體數(shù)據(jù)通過(guò)功能的輸入窗口獲得。生成實(shí)體原點(diǎn)的坐標(biāo)數(shù)據(jù)由UF_UI_point_construct點(diǎn)構(gòu)造器獲得。通過(guò)UF_OBJ_set_color涂色命令,將生成實(shí)體按照外形族或內(nèi)腔族分類設(shè)置為綠色或紅色。用戶輸入所有需要的數(shù)據(jù)后,系統(tǒng)自動(dòng)創(chuàng)建已涂色實(shí)體。
2.2.2 標(biāo)準(zhǔn)件代碼格式
在用戶創(chuàng)建特定功能族實(shí)體的同時(shí),需要選擇創(chuàng)建實(shí)體的類型。例如,用戶選擇創(chuàng)建外形族圓柱體時(shí),系統(tǒng)會(huì)自動(dòng)將生成圓柱體的GRIP代碼寫(xiě)入緩存。將外形族命名為cyc(n),n為實(shí)體個(gè)數(shù),而后使用solcyl命令創(chuàng)建圓柱體,并按照代碼格式填入原點(diǎn)、高度、半徑以及矢量方向數(shù)據(jù)。數(shù)據(jù)由對(duì)話框和點(diǎn)構(gòu)造器獲得。內(nèi)腔族格式相同,變量名不同。對(duì)應(yīng)族實(shí)體代碼緩存隨用戶創(chuàng)建對(duì)應(yīng)實(shí)體疊加,而后所有外形族實(shí)體通過(guò)unite命令進(jìn)行合并,再將合并后的外形族實(shí)體賦予cyc_unite(n)實(shí)體變量方便調(diào)用。將完整外形族實(shí)體通過(guò)subtra命令與緩存內(nèi)內(nèi)腔族實(shí)體進(jìn)行求差,最后得到的標(biāo)準(zhǔn)件實(shí)體賦值給part(n)實(shí)體變量。需要說(shuō)明的是,過(guò)程中的GRIP代碼保存在系統(tǒng)緩存中。
2.2.3 標(biāo)準(zhǔn)件庫(kù)代碼生成
系統(tǒng)設(shè)計(jì)將GRIP標(biāo)準(zhǔn)庫(kù)要素和程序整體架構(gòu)設(shè)計(jì)相相合,構(gòu)建具有一定格式的GRIP程序框架,將輸入信息和零件緩存按照格式填入框架中,生成相應(yīng)的GRIP標(biāo)準(zhǔn)件庫(kù)程序。程序框架將GRIP標(biāo)準(zhǔn)件庫(kù)程序分成3部分:一是以實(shí)體變量聲明、主程序結(jié)束命令為主滿足GRIP程序運(yùn)行要求的框架命令;二是以彈出多個(gè)選項(xiàng)單選框命令為主的標(biāo)準(zhǔn)件庫(kù)菜單命令;三是被菜單命令調(diào)用生成實(shí)體的工作命令。代碼來(lái)源于系統(tǒng)中的生成單個(gè)標(biāo)準(zhǔn)件的代碼緩存[5]。
GRIP標(biāo)準(zhǔn)件庫(kù)基本運(yùn)行方式:程序開(kāi)頭聲明實(shí)體變量;單選框程序段中定義與零件對(duì)應(yīng)選項(xiàng)以及相應(yīng)跳轉(zhuǎn)程序段,選擇任意選項(xiàng)跳轉(zhuǎn)指定位置;零件與程序段對(duì)應(yīng),程序段先從分別定義外形族和內(nèi)腔族的實(shí)體類型、尺寸以及位置;聲明完外形族和內(nèi)腔族實(shí)體后,將所有外形族實(shí)體合并為一個(gè)實(shí)體并聲明合并體;將合并體與內(nèi)腔族實(shí)體依次求差,得到最后成品并聲明;程序段最后加上跳轉(zhuǎn)到結(jié)尾語(yǔ)句,以結(jié)束整個(gè)標(biāo)準(zhǔn)件庫(kù)程序。
本文在標(biāo)準(zhǔn)件庫(kù)設(shè)計(jì)理論研究和UG二次開(kāi)發(fā)的基礎(chǔ)上,開(kāi)發(fā)了一種能夠快速生成基于GRIP語(yǔ)言的標(biāo)準(zhǔn)件庫(kù)代碼編譯系統(tǒng)。根據(jù)具有普適性的參數(shù)建模邏輯和UG系統(tǒng)的特點(diǎn),結(jié)合UG/Open API函數(shù)在VS2010開(kāi)發(fā)環(huán)境下,使UG能夠快速生成高通用性標(biāo)準(zhǔn)件庫(kù)。系統(tǒng)彌補(bǔ)了標(biāo)準(zhǔn)件庫(kù)開(kāi)發(fā)版本通用性較差及成本較高的缺點(diǎn),為今后相關(guān)建模軟件的高通用性標(biāo)準(zhǔn)件庫(kù)的設(shè)計(jì)制作提供了參考。