楊 旭, 周德儉,2
(1. 西安電子科技大學(xué), 陜西 西安 710071; 2. 桂林電子科技大學(xué), 廣西 桂林 541004)
UG是一款帶有二次開(kāi)發(fā)功能的高端CAD/CAE/CAM軟件,具有建模、分析、仿真等多個(gè)強(qiáng)大功能,在航空航天、數(shù)控加工和汽車(chē)等多個(gè)領(lǐng)域有著廣泛的應(yīng)用。隨著設(shè)計(jì)和制造信息化、柔性化、智能化的發(fā)展,UG自帶的功能已無(wú)法完全滿(mǎn)足用戶(hù)個(gè)性化的要求,因此,根據(jù)需求對(duì)UG進(jìn)行二次開(kāi)發(fā),拓展更多自定義的功能,有著較強(qiáng)的現(xiàn)實(shí)意義[1]。電纜布線及檢測(cè)已逐步由人工布線和檢測(cè)過(guò)渡到自動(dòng)化、智能化布線和檢測(cè),針對(duì)特定的功能需求,前人已研究出了一些可靠的檢測(cè)系統(tǒng),但在智能化、信息化等方向還有廣闊的研究前景。本文以UG10.0為開(kāi)發(fā)平臺(tái)的“電纜自動(dòng)布線及自動(dòng)檢測(cè)程序”設(shè)計(jì)為例,分析了在自動(dòng)布線和檢測(cè)領(lǐng)域進(jìn)行UG二次開(kāi)發(fā)的基本流程,重點(diǎn)探討了其菜單和對(duì)話框的設(shè)計(jì)過(guò)程。
UG二次開(kāi)發(fā)是通過(guò)UG 平臺(tái)上的UG OPEN 來(lái)完成的。UG OPEN為二次開(kāi)發(fā)提供了各種工具集、函數(shù)集和接口等,包括4個(gè)常用的工具:OPEN GRIP、OPENAPI、UI styler和MENUSCRIP。OPEN GRIP是UG內(nèi)部自帶的編程語(yǔ)言,易于理解,在參數(shù)化建模等特定方面具有較多的應(yīng)用,但其局限性是不如C語(yǔ)言等外部語(yǔ)言那樣具有全面的功能和靈活性,在老版本的UG二次開(kāi)發(fā)中應(yīng)用較多;OPEN API具有強(qiáng)大的對(duì)外接口功能,它為用戶(hù)提供了比OPEN GRIP更多的函數(shù),用戶(hù)在使用時(shí)可通過(guò)C或C++等來(lái)實(shí)現(xiàn)這些函數(shù)的調(diào)用,并與VC++集成,通過(guò)VC++環(huán)境來(lái)實(shí)現(xiàn)文件的編譯和連接,因此,OPEN API比OPEN GRIP更加高效,功能也更強(qiáng)大;UI styler是UG提供的創(chuàng)建對(duì)話框的工具,用戶(hù)可根據(jù)需要自行設(shè)計(jì)各種風(fēng)格的對(duì)話框并實(shí)現(xiàn)與圖形界面的交互,其代碼生成可以根據(jù)需要選擇VB、C++、Java、Python、VB.NET for SNAP等多種語(yǔ)言;MENUSCRIP是二次開(kāi)發(fā)UG菜單的工具,可以添加用戶(hù)自定義的菜單,并通過(guò)在菜單里調(diào)用對(duì)話框文件,與用戶(hù)自己創(chuàng)建的對(duì)話框集成[2-3]。
UG的二次開(kāi)發(fā)往往是通過(guò)綜合應(yīng)用以上4個(gè)常用開(kāi)發(fā)工具中的多個(gè)工具,并融入互聯(lián)網(wǎng)技術(shù)、通信技術(shù)、數(shù)據(jù)庫(kù)技術(shù)等來(lái)實(shí)現(xiàn)的,可應(yīng)用于UG運(yùn)行環(huán)境的定制、能以UG為平臺(tái)實(shí)現(xiàn)特定功能的專(zhuān)業(yè)軟件的開(kāi)發(fā)和提供與外部環(huán)境集成的接口等多個(gè)方面。
目前,隨著機(jī)械工業(yè)數(shù)字化、信息化的飛速發(fā)展,UG二次開(kāi)發(fā)在機(jī)械設(shè)計(jì)、制造、檢測(cè)等多個(gè)方面得到了廣泛的應(yīng)用?,F(xiàn)階段在構(gòu)建零件庫(kù)系統(tǒng)和系統(tǒng)數(shù)字化檢測(cè)2方面應(yīng)用較多,特別是伴隨著基于模型定義(Model Based Definition,MBD)技術(shù)的發(fā)展,設(shè)計(jì)和制造過(guò)程中數(shù)字化已日益成熟,在很多環(huán)節(jié),直接在3D軟件中基于3D模型和系統(tǒng)的標(biāo)注以及可視化技術(shù)正逐漸替代傳統(tǒng)的2D圖紙,在航空航天領(lǐng)域尤其突出[4-6]。因此,一方面,UG二次開(kāi)發(fā)的應(yīng)用并不僅限于傳統(tǒng)的零件參數(shù)化設(shè)計(jì),還包括零件庫(kù)系統(tǒng)的開(kāi)發(fā),例如:文獻(xiàn)[7]面向機(jī)電行業(yè),基于.NET二次開(kāi)發(fā)出了網(wǎng)絡(luò)零件庫(kù)系統(tǒng),綜合應(yīng)用了通信技術(shù)和互聯(lián)網(wǎng)技術(shù),可在網(wǎng)絡(luò)環(huán)境下實(shí)現(xiàn)零件庫(kù)系統(tǒng)的查詢(xún)、在線編輯和自動(dòng)刷新等功能;另一方面,通過(guò)二次開(kāi)發(fā),在3D軟件里直接進(jìn)行模型和系統(tǒng)的自動(dòng)化、智能化檢測(cè),也正在逐步代替原先的人工檢測(cè),這就要求軟件能實(shí)現(xiàn)檢測(cè)對(duì)象的信息自動(dòng)提取和自動(dòng)檢測(cè)功能,例如:文獻(xiàn)[8]基于.NET二次開(kāi)發(fā)出了檢測(cè)信息自動(dòng)提取功能,實(shí)現(xiàn)了檢測(cè)所需的所有幾何信息和非幾何信息的準(zhǔn)確和無(wú)遺漏提取,并能規(guī)范地輸出這些信息,為后續(xù)的自動(dòng)檢測(cè)環(huán)節(jié)提供了數(shù)據(jù)支撐;文獻(xiàn)[9]面向航空行業(yè),基于VC++二次開(kāi)發(fā)出了MBD自動(dòng)檢測(cè)系統(tǒng),通過(guò)將OPEN API與MFC庫(kù)相結(jié)合的方式,使UG OPEN API的強(qiáng)大圖形操作功能和MFC豐富的函數(shù)庫(kù)相結(jié)合,最終開(kāi)發(fā)出了高效、可靠的自動(dòng)檢測(cè)系統(tǒng)。
由于用到的電纜根據(jù)結(jié)構(gòu)的不同可分為A、B、C三類(lèi),每一類(lèi)包括若干型號(hào),同一類(lèi)各種不同型號(hào)的電纜結(jié)構(gòu)相似,只是具體參數(shù)不同,因此該“電纜自動(dòng)布線及自動(dòng)檢測(cè)程序”有如下幾個(gè)模塊:
1)進(jìn)行電纜模型參數(shù)化設(shè)計(jì),設(shè)計(jì)出各種自動(dòng)布線所需的電纜模型,為下一步提供模型基礎(chǔ)。故開(kāi)發(fā)“電纜模型參數(shù)化設(shè)計(jì)”子程序,包括“A類(lèi)電纜參數(shù)化設(shè)計(jì)”、“B類(lèi)電纜參數(shù)化設(shè)計(jì)”和“C類(lèi)電纜參數(shù)化設(shè)計(jì)”。
2)使用前一步建立的模型,選用合適的電纜以及對(duì)應(yīng)的欲連接的部件,進(jìn)行自動(dòng)布線。故開(kāi)發(fā)“電纜自動(dòng)布線”子程序,包括“A類(lèi)電纜自動(dòng)布線”、“B類(lèi)電纜自動(dòng)布線”和“C類(lèi)電纜自動(dòng)布線”。
3)對(duì)上面自動(dòng)布線的結(jié)果進(jìn)行檢查,以確保力學(xué)性能和電學(xué)性能等性能要求。也就是檢查前面布置完成的電纜空間布置是否合理,包括是否存在空間干涉、最小彎曲半徑過(guò)小等問(wèn)題,如果有,會(huì)提醒用戶(hù),在圖形區(qū)高亮顯示檢測(cè)出的問(wèn)題,并附上說(shuō)明。故開(kāi)發(fā)“布線結(jié)果自動(dòng)檢測(cè)”子程序,包括“全面檢測(cè)”、“僅檢測(cè)長(zhǎng)度特征”和“僅檢測(cè)彎曲半徑特征”等?!叭鏅z測(cè)”集成了所有的檢測(cè)規(guī)則,使用這個(gè)功能可一次性進(jìn)行所有規(guī)則的檢測(cè),集成度高;“僅檢測(cè)長(zhǎng)度特征”和“僅檢測(cè)彎曲半徑特征”的針對(duì)性強(qiáng),一次只針對(duì)某一類(lèi)特征進(jìn)行檢查,可重點(diǎn)針對(duì)某些規(guī)則進(jìn)行檢測(cè)。
4)針對(duì)電纜參數(shù)化設(shè)計(jì)中用到的模型庫(kù)、自動(dòng)布線設(shè)計(jì)中用到的知識(shí)庫(kù)以及布線結(jié)果自動(dòng)檢測(cè)用到的知識(shí)庫(kù),開(kāi)發(fā)“布線數(shù)據(jù)庫(kù)”子程序,包括“模型庫(kù)”、“知識(shí)庫(kù)”和“規(guī)則庫(kù)”3部分,可進(jìn)行數(shù)據(jù)庫(kù)的查詢(xún)和編輯。
5)開(kāi)發(fā)“幫助”子程序,以幫助用戶(hù)查看此“電纜自動(dòng)布線及自動(dòng)檢測(cè)程序”的使用方法和注意事項(xiàng)。
2.2.1 菜單開(kāi)發(fā)
開(kāi)發(fā)出一個(gè)三級(jí)菜單,第一級(jí)為電纜自動(dòng)布線及自動(dòng)檢測(cè)程序;第二級(jí)包含電纜模型參數(shù)化設(shè)計(jì)、電纜自動(dòng)布線、布線結(jié)果自動(dòng)檢測(cè)、布線數(shù)據(jù)庫(kù)和幫助;第三級(jí)包括所有二級(jí)菜單對(duì)應(yīng)的子菜單。菜單開(kāi)發(fā)步驟如下:
第一步,設(shè)置系統(tǒng)變量。首先創(chuàng)建二次開(kāi)發(fā)文件夾,在G盤(pán)里新建一個(gè)文件夾,命名為UG_yxkf,并在此文件夾目錄下新建startup、application文件夾。Startup用于存放菜單程序,application用來(lái)存放對(duì)話框程序。然后,打開(kāi)“我的電腦”,依次進(jìn)入“系統(tǒng)屬性”、“高級(jí)系統(tǒng)設(shè)置”、“環(huán)境變量”、新建用戶(hù)變量,其變量名為UGII_USER_DIR,變量值為G:UG_yxkf。二次開(kāi)發(fā)文件夾不一定要在G盤(pán),別的盤(pán)也可以,但新建環(huán)境變量時(shí)變量值一定要與二次開(kāi)發(fā)文件夾的路徑一致[10]。
第二步,使用UG/OPEN MENUSCRIPT進(jìn)行菜單設(shè)計(jì)。在前面創(chuàng)建的startup文件夾里面新建一個(gè).men文件,即形成一個(gè)菜單腳本文件,命名為yangxu_ecka.men,其代碼可分為6個(gè)部分,各部分具體代碼為:
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP
CASCADE_BUTTON yxkf_1
LABEL 電纜自動(dòng)布線及自動(dòng)檢測(cè)程序
END_OF_BEFORE
此部分相當(dāng)于“申明部分”,指明版本號(hào)為VERSION 120,并指明此次開(kāi)發(fā)的程序在剛啟動(dòng)的時(shí)候就可以在菜單里找到,以及開(kāi)發(fā)的程序在菜單里面的位置(即在“幫助”程序的前面),并定義一級(jí)菜單“電纜自動(dòng)布線及自動(dòng)檢測(cè)程序”,其中CASCADE_BUTTON 用來(lái)指明這個(gè)菜單是有下拉菜單的那種類(lèi)型,yxkf_1是標(biāo)識(shí)符, END_OF_BEFORE結(jié)束一級(jí)菜單的制作。
MENU yxkf_1
CASCADE_BUTTON yxkf_1_1
LABEL 電纜模型參數(shù)化設(shè)計(jì)
CASCADE_BUTTON yxkf_1_2
LABEL 電纜自動(dòng)布線
CASCADE_BUTTON yxkf_1_3
LABEL 布線結(jié)果自動(dòng)檢測(cè)
CASCADE_BUTTON yxkf_1_4
LABEL 布線數(shù)據(jù)庫(kù)
BUTTON yxkf_1_5
LABEL 幫助
ACTIONS yxkf_0
END_OF_MENU
此部分用來(lái)定義5個(gè)二級(jí)菜單,即“電纜模型參數(shù)化設(shè)計(jì)”、“電纜自動(dòng)布線”、“布線結(jié)果自動(dòng)檢測(cè)”、“布線數(shù)據(jù)庫(kù)”和“幫助”,以END_OF_MENU結(jié)束所有二級(jí)菜單的制作。
MENU yxkf_1_1
BUTTON yxkf_1_1_1
LABEL A類(lèi)電纜參數(shù)化設(shè)計(jì)
ACTIONS yxkf_1_1_1
BUTTON yxkf_1_1_2
LABEL B類(lèi)電纜參數(shù)化設(shè)計(jì)
ACTIONS yxkf_1_1_2
BUTTON yxkf_1_1_3
LABEL C類(lèi)電纜參數(shù)化設(shè)計(jì)
ACTIONS yxkf_1_1_3
END_OF_MENU
此部分用來(lái)定義“電纜模型參數(shù)化設(shè)計(jì)”二級(jí)菜單的三級(jí)菜單,即“A類(lèi)電纜參數(shù)化設(shè)計(jì)”、“B類(lèi)電纜參數(shù)化設(shè)計(jì)”和“C類(lèi)電纜參數(shù)化設(shè)計(jì)”,BUTTON表示此菜單下不再有下一級(jí)菜單,ACTIONS用來(lái)指向?qū)?yīng)的對(duì)話框文件,以END_OF_MENU結(jié)束這些三級(jí)菜單的制作。
MENU yxkf_1_2
BUTTON yxkf_1_2_1
LABEL A類(lèi)電纜自動(dòng)布線
ACTIONS yxkf_1_2_1
BUTTON yxkf_1_2_2
LABEL B類(lèi)電纜自動(dòng)布線
ACTIONS yxkf_1_2_2
BUTTON yxkf_1_2_3
LABEL C類(lèi)電纜自動(dòng)布線
ACTIONS yxkf_1_2_3
END_OF_MENU
此部分用來(lái)定義“電纜自動(dòng)布線”二級(jí)菜單的三級(jí)菜單,即“A類(lèi)電纜自動(dòng)布線”、“B類(lèi)電纜自動(dòng)布線”和“C類(lèi)電纜自動(dòng)布線”,以END_OF_MENU結(jié)束這些三級(jí)菜單的制作。
MENU yxkf_1_3
BUTTON yxkf_1_3_1
LABEL 全面檢測(cè)
ACTIONS yxkf_1_3_1
LABEL 僅檢測(cè)長(zhǎng)度特征
ACTIONS yxkf_1_3_2
BUTTON yxkf_1_3_3
LABEL 僅檢測(cè)彎曲半徑特征
ACTIONS yxkf_1_3_3
END_OF_MENU
此部分用來(lái)定義“布線結(jié)果自動(dòng)檢測(cè)”二級(jí)菜單的三級(jí)菜單,即“全面檢測(cè)”、“僅檢測(cè)長(zhǎng)度特征”和“僅檢測(cè)彎曲半徑特征”,以END_OF_MENU結(jié)束這些三級(jí)菜單的制作。
MENU yxkf_1_4
BUTTON yxkf_1_4_1
LABEL 模型庫(kù)
ACTIONS yxkf_1_4_1
BUTTON yxkf_1_4_2
LABEL 知識(shí)庫(kù)
ACTIONS yxkf_1_4_2
BUTTON yxkf_1_4_3
LABEL 規(guī)則庫(kù)
ACTIONS yxkf_1_4_3
END_OF_MENU
此部分用來(lái)定義“布線數(shù)據(jù)庫(kù)”二級(jí)菜單的三級(jí)菜單,即“模型庫(kù)”、“知識(shí)庫(kù)”和“規(guī)則庫(kù)”,以END_OF_MENU結(jié)束這些三級(jí)菜單的制作。另外,“幫助”二級(jí)菜單下沒(méi)有三級(jí)菜單,不需要再另外編制代碼。
再次打開(kāi)UG 10.0,進(jìn)入菜單,則可在“幫助”菜單上面出現(xiàn)“電纜自動(dòng)布線及自動(dòng)檢測(cè)程序”菜單,如圖1所示。至此,菜單的開(kāi)發(fā)完成,后續(xù)還可以根據(jù)需要,為一些功能設(shè)置快捷鍵,例如“全面檢測(cè)”功能,則可以實(shí)現(xiàn)一鍵檢測(cè),無(wú)需逐級(jí)打開(kāi)菜單進(jìn)行選擇。
圖1 二次開(kāi)發(fā)菜單界面
2.2.2 對(duì)話框開(kāi)發(fā)
打開(kāi)UG 10.0,新建一個(gè)模型,然后在應(yīng)用模塊中進(jìn)入“塊UI樣式編輯器”。新版本(UG6.0以后的版本)都用到了塊的概念,每個(gè)塊可相當(dāng)于具有一定獨(dú)立功能的小模塊,這更體現(xiàn)了模塊化的思想。以電纜參數(shù)化設(shè)計(jì)的對(duì)話框?yàn)槔?,在左?cè)“基本”塊集合器里選擇“對(duì)象顏色拾取器”,用以指定內(nèi)層顏色和外層顏色,在“數(shù)字”塊集合器里選擇“雙精度”,用以指定內(nèi)徑和外徑大小,在“選擇”塊集合器里選擇“指定點(diǎn)”,用以確定電纜的起始點(diǎn)和目標(biāo)點(diǎn),添加完所有塊后,通過(guò)“上移塊”和“下移塊”命令優(yōu)化布局,使每個(gè)塊對(duì)應(yīng)合適的位置。設(shè)計(jì)完成后的對(duì)話框界面如圖2所示。
圖2 二次開(kāi)發(fā)對(duì)話框界面
對(duì)話框創(chuàng)建完成后,保存在application文件夾中,將生成.dlx文件、.hpp文件和.cpp文件。
2.2.3 建立程序的框架
第一步,啟動(dòng)VC++,由于首次用C語(yǔ)言來(lái)進(jìn)行UG二次開(kāi)發(fā)時(shí),缺少與UG的接口,要添加庫(kù)文件UgOpen_v19.awx和UgOpen_v19.hlp到VC++安裝目錄中的對(duì)應(yīng)文件夾中。
第二步,重新啟動(dòng)VC++,在projects下選擇用 于UG二次開(kāi)發(fā)的project選項(xiàng)Unigraphics NX AppWizard V1,將project name命名為UG_yxkf,存放在UG二次開(kāi)發(fā)文件夾中,則其對(duì)應(yīng)的Location 為G:UG_yxkfUG_yxkf。將前面創(chuàng)建對(duì)話框生成的.hpp文件和.cpp文件復(fù)制一份到 G:UG_yxkfUG_yxkf文件夾里。
第三步,進(jìn)入VC++左側(cè)Workspace的FileView界面,分別移除原先的Source Files目錄下的.cpp文件和Header Files目錄下的.h文件,用前面創(chuàng)建對(duì)話框生成的.cpp文件和.hpp文件進(jìn)行相應(yīng)覆蓋。
第四步,打開(kāi).cpp文件,編寫(xiě)回調(diào)函數(shù)程序代碼,完成后在VC中依次進(jìn)入“工具”、“選項(xiàng)”命令,將UG10.0安裝文件夾里的UGOPEN文件夾(UG自帶的API函數(shù)庫(kù)默認(rèn)存放在這個(gè)文件夾里)所在路徑指定為"“路徑”,從而實(shí)現(xiàn)API函數(shù)的調(diào)用。最后進(jìn)行編譯和連接,生成.dll文件,并將其復(fù)制到G:UG_yxkfstartup中即可。
完成以上操作后,重啟UG,此部分開(kāi)發(fā)完成。后續(xù)還需繼續(xù)編制相關(guān)代碼,建立數(shù)據(jù)庫(kù)和開(kāi)發(fā)用戶(hù)交互界面,并通過(guò)不斷調(diào)試,才能最終實(shí)現(xiàn)和逐步完善電纜自動(dòng)布線及自動(dòng)檢測(cè)功能。
UG二次開(kāi)發(fā)技術(shù)現(xiàn)已在參數(shù)化建模、零件庫(kù)開(kāi)發(fā)、自動(dòng)檢測(cè)、數(shù)字化工廠建設(shè)等多個(gè)領(lǐng)域得到了成功應(yīng)用。本文開(kāi)發(fā)的自動(dòng)布線及自動(dòng)檢測(cè)功能使用了新版的UG軟件,包含了從初始建模到最終檢測(cè)評(píng)估的全過(guò)程,功能更加完善。隨著信息和通信技術(shù)的發(fā)展,UG二次開(kāi)發(fā)技術(shù)正逐步和智能技術(shù)、通信技術(shù)、互聯(lián)網(wǎng)技術(shù)、大數(shù)據(jù)技術(shù)等信息技術(shù)相結(jié)合,日后在智能識(shí)別和檢測(cè)、智能制造等方面將有較好的發(fā)展前景。