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