王皓宇 何定全 楊繼偉 鹿小亮 鄭萬清 葛源坤
摘要:為提高工作效率,基于NX平臺,研究了一種非參數(shù)圓孔實(shí)現(xiàn)參數(shù)化的方法。對本研究所采用的NX二次開發(fā)方式進(jìn)行了分析,通過定制菜單按鈕動作,實(shí)現(xiàn)順序調(diào)用基于NXOpen C++開發(fā)的動態(tài)鏈接庫文件和宏文件。同時,基于MenuScript腳本語言,在標(biāo)準(zhǔn)菜單欄和工具條中添加了定制菜單欄和工具條方便程序動態(tài)調(diào)用,通過在UIStyler模塊中定制對話框?qū)崿F(xiàn)程序的人機(jī)交互與參數(shù)傳遞,聯(lián)合NXOpen C++和宏命令編寫了非參數(shù)圓孔的參數(shù)化程序。在單基準(zhǔn)面和多基準(zhǔn)面非參數(shù)圓孔實(shí)現(xiàn)參數(shù)化的實(shí)例中,通過與傳統(tǒng)參數(shù)化方式對比,采用本研究的程序化方法均用時較少。經(jīng)分析和計算,得出:本文研究的非參數(shù)圓孔實(shí)現(xiàn)參數(shù)化的方法,能有效實(shí)現(xiàn)模型大批量非參數(shù)圓孔的參數(shù)化,能提高工作效率約50%。
關(guān)鍵詞:NX二次開發(fā);參數(shù)化;圓孔;宏命令;C++
中圖分類號:TP311.1 文獻(xiàn)標(biāo)志碼:A doi:10.3969/j.issn.1006-0316.2023.03.004
文章編號:1006-0316 (2023) 03-0021-06
A Parametric Approach to Nonparametric Circular Hole Based on NX Secondary Development
WANG Haoyu,HE Dingquan,YANG Jiwei,LU Xiaoliang,ZHENG Wanqing,GE Yuankun
( Sichuan Jiuzhou Electric Appliance Group Co., Ltd., Mianyang 621000, China )
Abstract:In order to improve the work efficiency, based on the NX platform, a non-parametric circular hole parameterization method is studied. The NX secondary development method adopted in this study is analyzed, and the dynamic link library files and macro files developed based on NXOpen C++ are called sequentially by customizing the menu button actions. At the same time, based on the MenuScript scripting language, a custom menu bar and a toolbar are added to the standard menu bar and the tool bar to facilitate the dynamic call of the program, the human-computer interaction and parameter transfer of the program are realized by customizing the dialog box in the UIStyler module, and a parametric program for the non-parametric circular hole is written through NXOpen C++ and macro command. In the case of parameterization of single-base and multi-base non-parametric circular holes, compared with the traditional parameterization method, the programming method in this study takes less time. Through the analysis and calculation, it is concluded that the method of realizing the parameterization of non-parametric circular holes studied in this paper can effectively realize the parameterization of large-scale non-parametric circular holes in the model, and can improve the work efficiency by about 50%.
Key words:NX secondary development;parameterization;round hole;macro command;C++
在實(shí)際機(jī)械設(shè)計中,對于大型復(fù)雜的機(jī)械結(jié)構(gòu),常采用協(xié)同化設(shè)計方法。在協(xié)同設(shè)計過程中,由于各設(shè)計人員使用的三維設(shè)計軟件各不相同,一般采用STP或X_T的中間格式文件實(shí)現(xiàn)數(shù)據(jù)傳遞,而這種數(shù)據(jù)傳遞方式主要傳遞結(jié)構(gòu)的拓?fù)鋽?shù)據(jù),沒有傳遞設(shè)計的各項參數(shù),不方便后續(xù)設(shè)計更改和參數(shù)優(yōu)化[1-2]。
隨著計算機(jī)輔助設(shè)計(Computer Aided Design,CAD)的發(fā)展,各三維結(jié)構(gòu)設(shè)計軟件為滿足用戶需求,開放了軟件接口(Application Programming Interface,API)[3-4]。本文根據(jù)企業(yè)結(jié)構(gòu)設(shè)計人員的需求,以提高工作效率為目的,基于NX軟件平臺,研究了非參數(shù)化圓孔實(shí)現(xiàn)參數(shù)化的方法。
1? NX二次開發(fā)技術(shù)
NX實(shí)現(xiàn)二次開發(fā)的主要方式包括:GRIP(Graphics Interactive Programming,圖形交互編程)、NXOpen C\C++、MenuScript、UIStyler、KF(Knowledge Fusion,知識熔接技術(shù))和調(diào)用宏命令等。雖二次開發(fā)方式眾多,但最終還是歸結(jié)于調(diào)用內(nèi)部C/C++ API執(zhí)行相關(guān)操作[5]。
1.1? GRIP和KF
二者均是面向?qū)ο蟮慕忉屝跃幊陶Z言,簡單易學(xué),對編程基礎(chǔ)要求較低,但功能均沒有NXOpen C\C++全面。GRIP幾乎可以執(zhí)行UG界面下所有的圖形交互操作,采用GRIP二次開發(fā)可以提高客戶在交互界面的操作效率。KF是一種基于知識驅(qū)動的開發(fā)方式,可用于智能CAD系統(tǒng)的開發(fā)[6-7]。
1.2? NXOpen C\C++
NXOpen C\C++提供的API包含一系列的過程與函數(shù),是所有二次開發(fā)方式中功能最齊全的,且可通過相關(guān)API調(diào)用其他二次開發(fā)方式生成的執(zhí)行文件實(shí)現(xiàn)聯(lián)合開發(fā)。常通過API調(diào)用UIStyler生成的用戶定義對話框文件*.dlg或*.dlx,實(shí)現(xiàn)人機(jī)交互式操作。
1.3? MenuScript和UIStyler
MenuScript是一種用于用戶定制開發(fā)的菜單腳本語言,遵循特定的語法規(guī)則,可實(shí)現(xiàn)對標(biāo)準(zhǔn)菜單欄和工具條的增添、刪除和更改[8-9]。為實(shí)現(xiàn)與用戶交互式操作,可采用UIStyler模塊定制用戶對話框,類似MFC(Microsoft Foundation Classes,微軟基礎(chǔ)類庫)形式的定制模式,且UIStyler模塊內(nèi)部集成了大量NX風(fēng)格的控件,能實(shí)現(xiàn)大部份交互操作,不僅能生成對話框文件*.dlg或*.dlx,同時能生成指定編程語言的調(diào)用源文件和頭文件[10]。
1.4 宏命令
在NX二次開發(fā)過程中,對于某個功能是NX自帶的,但又需要配合二次開發(fā)的程序文件來使用,便可通過調(diào)用宏命令實(shí)現(xiàn),極大提高開發(fā)效率,減少開發(fā)錯誤率。調(diào)用宏命令一般是通過調(diào)用包含宏命令的宏文件來執(zhí)行相關(guān)操作。主要有兩種調(diào)用宏文件的方式:一是在二次開發(fā)的源程序文件中采用相關(guān)API調(diào)用;二是通過菜單按鈕順序調(diào)用[11]。
2 非參數(shù)圓孔實(shí)現(xiàn)參數(shù)化的方法
對于非參特征,要實(shí)現(xiàn)參數(shù)化,只能通過特征重建的方式。傳統(tǒng)方式實(shí)現(xiàn)非參圓孔的參數(shù)化主要流程如圖1所示,
首先建立孔位的基準(zhǔn)點(diǎn),再刪除非參圓孔所包含的面,最后建立圓孔特征。對于多個圓孔,如果有類似陣列和鏡像等關(guān)聯(lián)性質(zhì)的,可適當(dāng)采用此方法,但在射頻前端模塊設(shè)計中,一般圓孔不具有關(guān)聯(lián)性質(zhì)且數(shù)量龐大,如采用傳統(tǒng)方式,需手動對模型中每個非參圓孔重復(fù)上述流程,這極大降低了設(shè)計人員的工作效率。對于重復(fù)的工作流程,一般采用批量化的方式進(jìn)行簡化。本文對可批量化實(shí)現(xiàn)非參數(shù)圓孔參數(shù)化的方法進(jìn)行研究。
如果只是簡單地將圖1所示流程進(jìn)行批量化處理,則在創(chuàng)建圓孔特征的過程中,需要手動編寫孔特征程序,并采用UIStyler模塊設(shè)計圓孔特征的對話框。通過NX自帶的孔特征對話框可知,重新生成圓孔特征的對話框需要大量控件,且造成了開發(fā)資源的浪費(fèi)。而采用批量創(chuàng)建基準(zhǔn)點(diǎn),同時刪除構(gòu)成圓孔的所有面,再通過定制按鈕的動作調(diào)用宏文件,啟動NX自帶的孔特征命令完成批量操作,則能極大提高設(shè)計開發(fā)效率,同時充分利用了NX自帶的孔特征命令。
基于以上分析,完成非參圓孔參數(shù)化流程如圖2所示。
其中,參數(shù)輸入流程調(diào)用UIStyler模塊定制參數(shù)輸入對話框,程序主體采用NXOpen C++調(diào)用相關(guān)API實(shí)現(xiàn)操作,通過定制菜單欄和工具條,實(shí)現(xiàn)該程序與NX軟件無縫鏈接。
2.1 定制菜單欄和工具條
通過定制菜單欄和工具條,可方便用戶直接調(diào)用二次開發(fā)程序。與一般的菜單按鈕執(zhí)行單一的ACTIONS(動作)不同,在本研究方法中,菜單按鈕需依次調(diào)用程序主體動態(tài)鏈接庫文件(*.dll)和創(chuàng)建孔特征的宏文件(*.macro)。因此,按鈕的ACTIONS需要采用/POST設(shè)置在調(diào)用*.dll文件后調(diào)用*.macro文件。具體程序如下:
VERSION 120 !版本號
EDIT UG_GATEWAY_MAIN_MENUBAR !對主框架進(jìn)行編輯
AFTER UG_HELP!在“幫助”后進(jìn)行編輯
CASCADE_BUTTON MyModeTool !添加下聯(lián)式菜單
LABEL 自建建模工具 !標(biāo)簽
END_OF_AFTER !結(jié)束編輯
BUTTON UnparamHolesCreateParamHoles!添加按鈕
LABEL 非參孔轉(zhuǎn)參數(shù)孔 !按鈕標(biāo)簽
MESSAGE 選擇非參孔轉(zhuǎn)為參數(shù)孔 !按鈕提示
BITMAP 非參孔創(chuàng)建參數(shù)孔 !按鈕位圖
ACTIONS *.dll !按鈕執(zhí)行的標(biāo)準(zhǔn)動作
END_OF_MENU
MODIFY !對按鈕進(jìn)行修改
BUTTON UnparamHolesCreateParamHoles
ACTIONS/POST createholes.macro !按鈕執(zhí)行完標(biāo)準(zhǔn)動作后繼續(xù)調(diào)用宏文件
END_OF_MODIFY
啟動NX主程序,打開建模模塊時,定制菜單欄和工具條如圖3和圖4所示。
2.2 定制參數(shù)輸入對話框
在實(shí)際模型中,含有多類型的面,需要用戶選擇性輸入相關(guān)圓孔面。為方便選擇圓孔,將選擇過濾器設(shè)置為僅選擇圓柱面,圓孔包含的其余面通過NXOpenC++相關(guān)API完成自動集成。對話框(圖5)同時需要輸入基準(zhǔn)面,以實(shí)現(xiàn)轉(zhuǎn)換過程中自動更改基準(zhǔn)面,如圖6所示,基準(zhǔn)面1和基準(zhǔn)面2分別為方塊的上下表面,選擇不同基準(zhǔn)面,在轉(zhuǎn)換過程中可實(shí)現(xiàn)對圓孔的基準(zhǔn)面更改。
2.3? NXOpen C++過程
NXOpen C++程序流程如圖7所示,根據(jù)用戶輸入的圓柱面,自動集成圓孔所有面并刪除,同時在基準(zhǔn)平面上創(chuàng)建圓孔基準(zhǔn)點(diǎn),為后續(xù)調(diào)用宏文件創(chuàng)建孔特征提供草圖依據(jù)。圓孔所有面自動集成過程為workPart→ScRuleFactory()→CreateRuleFaceBossPocket(Face, true),其中CreateRuleFaceBossPocket()方法表示選擇槽孔的所有面,槽孔的種子面儲存在Face變量中。刪除面的過程需定義一個NXOpen::Features:: DeleteFaceBuilder類,并添加自動集成的所有面,當(dāng)執(zhí)行類中Commit()方法時,完成刪除面操作。
創(chuàng)建圓孔基準(zhǔn)點(diǎn)有兩種方式。方式一:循環(huán)圓柱面的兩圓弧邊,當(dāng)邊位于基準(zhǔn)面內(nèi)時,通過圓弧邊創(chuàng)建圓心點(diǎn)即為基準(zhǔn)點(diǎn)。方式二:提取圓柱面中心線,其與基準(zhǔn)平面的交點(diǎn)即為基準(zhǔn)點(diǎn)。當(dāng)圓孔為通孔時,方式一可實(shí)現(xiàn)基準(zhǔn)面變換;當(dāng)圓孔為非通孔時,方式一無法實(shí)現(xiàn)基準(zhǔn)面變換,則采用方式二來創(chuàng)建基準(zhǔn)點(diǎn),提取圓柱面中心線需創(chuàng)建NXOpen::Features:: VirtualCurveBuilder類,中心線與基準(zhǔn)平面的交點(diǎn)通過草圖工具“相交”所對應(yīng)的NXOpen:: SketchIntersectionPointBuilder類實(shí)現(xiàn)。創(chuàng)建中心線與基準(zhǔn)平面交點(diǎn)的部分代碼如下:
NXOpen::SketchIntersectionPoint *nullNXOpen_SketchIntersectionPoint(NULL);
std::vector
std::vector
NXOpen::CurveDumbRule *curveDumbRule1;//每條中心線對應(yīng)的規(guī)則
std::vector
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
NXOpen::Point3d POINT; //基準(zhǔn)平面參考點(diǎn)
std::vector
std::vector
for (int i = 0; i { sketchIntersectionPointBuilder[i] = workPart->Sketches()->CreateIntersectionPointBuilder(nullNXOpen_SketchIntersectionPoint); section[i] = sketchIntersectionPointBuilder[i]->Rail(); //僅通過曲線與草圖相交創(chuàng)建點(diǎn) section[i]->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves); curves[0] = LinesArray[i];//分別傳遞每條中心線 curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves); rules2[0]=curveDumbRule1; section[i]->AddToSection(rules2, LinesArray[i], nullNXOpen_NXObject, nullNXOpen_NXObject,POINT, NXOpen::Section::ModeCreate, false); sketchIntersectionPointBuilder[i]->UpdateData(); features[i]= sketchIntersectionPointBuilder[i]->CommitFeature(); sketchIntersectionPointBuilder[i]->Destroy(); } theSession->ActiveSketch()->Deactivate(NXOpen::Sketch::ViewReorientFalse, NXOpen::Sketch::UpdateLevelModel); //退出草圖 為方便用戶統(tǒng)計,可調(diào)用模態(tài)化窗口反饋給用戶相關(guān)信息。其代碼如下: char out_num[256]; sprintf(out_num,"您選擇了 %d 個圓柱面!",num_of_lines); theUI->NXMessageBox()->Show("統(tǒng)計", NXOpen::NXMessageBox::DialogTypeInformation, out_num); 3 方法運(yùn)用實(shí)例 3.1 單基準(zhǔn)面非參圓孔參數(shù)化 以某射頻連接器安裝面板(圖8)為例,該模型由電路設(shè)計人員導(dǎo)出,儲存為STP的中間格式文件,模型包含兩類孔共128個,現(xiàn)需將大孔調(diào)整為直徑為4.9 mm的通孔,將小孔調(diào)整為M1.6的螺紋孔。根據(jù)分析,有三種方式重建圓孔,分別為:采用傳統(tǒng)方式逐一重建圓孔(逐一法)、采用矩陣方式重建圓孔(矩陣法)以及本研究所述方式重建圓孔(程序法)。在64位16G內(nèi)存的電腦中,基于NX10.0軟件分別采用三種方式對非參數(shù)圓孔參數(shù)化,參數(shù)化結(jié)果如圖9所示,耗時統(tǒng)計如表1所示。 由表1可知,在本模型中相較于逐一法,程序法所用時間約為其1/5,建模效率提升了約80%;相較于矩陣法,程序法所用時間約為其1/2,建模效率提升了約50%。矩陣法雖然省去了手動逐一重建圓孔的過程,但測量矩陣間距同樣耗費(fèi)時間,程序法只需輸入要重建的圓孔,即可自動化實(shí)現(xiàn)參數(shù)化重建。 3.2 多基準(zhǔn)面非參圓孔參數(shù)化 以某天線測試轉(zhuǎn)臺底架(圖10)為例,底架四周均有直徑為2.5 mm的通孔,現(xiàn)將其參數(shù)化為M3的螺紋孔。同樣采用逐一法和程序法參數(shù)化圓孔,相比于矩陣法,鏡像法更適用于本實(shí)例,因此,用鏡像法代替矩陣法參與對比,所用時間如表2所示。 由表2可知,在本模型中逐一法和鏡像法所用時間幾乎相等,而程序法所用時間約為這二者的1/2,建模效率提升了50%以上。 4 結(jié)語 分析了NX二次開發(fā)技術(shù)的主要途徑,并基于參數(shù)化設(shè)計,研究了一種將非參圓孔參數(shù)化的方法?;贜X平臺編寫了非參圓孔批量實(shí)現(xiàn)參數(shù)化的程序,實(shí)現(xiàn)了利用定制按鈕順序調(diào)用動態(tài)鏈接庫文件和宏文件,將非參圓孔的參數(shù)化過程程序化。經(jīng)實(shí)例驗證,工作效率提高了約50%。本文的研究是一次完整的NX二次開發(fā)流程,不僅為非參模型實(shí)現(xiàn)參數(shù)化提供了一種指導(dǎo)方法,同時也為設(shè)計人員提高結(jié)構(gòu)建模效率提供借鑒。 參考文獻(xiàn): [1]王小明,王耕耘,張文明,等. 基于知識與UG二次開發(fā)的吊具參數(shù)化設(shè)計系統(tǒng)[J]. 機(jī)械工程與自動化,2016(1):83-85. [2]Liu Xinhua,Li Qi,Liu Youhui,et al. Development of a Rapid Design System for Aerial Work Truck Subframe with UG Secondary Development Framework[J]. Procedia Engineering,2011(15):2961-2965. [3]項輝宇,周哲人,馬麗萍,等. UG NX 二次開發(fā)在CAD模型離散中的應(yīng)用[J]. 機(jī)床與液壓,2020,48(5):146-149. [4]王志雄. 基于UG的焊縫自動清理軟件開發(fā)和應(yīng)用[J]. 現(xiàn)代制造技術(shù)與裝備,2020(5):121-122. [5]唐康林. Siemens NX二次開發(fā)[M]. 北京:電子工業(yè)出版社,2021. [6]李明新,李斌. UG NX 二次開發(fā)在產(chǎn)品圖樣標(biāo)準(zhǔn)化管理中的應(yīng)用[J]. 現(xiàn)代制造工程,2016(10):26-50. [7]潘泓誼,劉淑梅,毛欣然. 基于 UG 二次開發(fā)的GRIP標(biāo)準(zhǔn)件庫制作系統(tǒng)研究[J]. 現(xiàn)代制造技術(shù)與裝備,2021(4):64-65. [8]李麗芳,王燕,陳開朗,等. 基于UG的汽車覆蓋件小圓角識別二次開發(fā)[J]. 模具制造,2019(12):7-10. [9]侯永濤,丁向陽. UG/Open二次開發(fā)與實(shí)例精解[M]. 北京:化學(xué)工業(yè)出版社,2007. [10]趙玉善,郭慧. 基于NX/Open的懸掛式爬坡輸送線的碰撞檢測仿真系統(tǒng)開發(fā)[J]. 圖學(xué)學(xué)報,2015(6):950-954. [11]張樂林,祝錫晶,葉林征. 基于UG二次開發(fā)的參數(shù)化建模方法[J]. 計算機(jī)系統(tǒng)應(yīng)用,2016(1):146-149. [12]張偉,劉葵,謝正武,等. 基于UG宏程序后置處理的二次開發(fā)技術(shù)研究[J]. 新技術(shù)新工藝,2022(2):52-56. 收稿日期:2022-04-02 作者簡介:王皓宇(1994-),男,四川廣元人,碩士研究生,主要研究方向為天線雷達(dá)結(jié)構(gòu)設(shè)計與仿真、CAD/CAE軟件二次開發(fā),E-mail:601531072@qq.com。