王皓宇 何定全 楊繼偉 鹿小亮 鄭萬清 葛源坤



摘要:為提高工作效率,基于NX平臺,研究了一種非參數圓孔實現參數化的方法。對本研究所采用的NX二次開發方式進行了分析,通過定制菜單按鈕動作,實現順序調用基于NXOpen C++開發的動態鏈接庫文件和宏文件。同時,基于MenuScript腳本語言,在標準菜單欄和工具條中添加了定制菜單欄和工具條方便程序動態調用,通過在UIStyler模塊中定制對話框實現程序的人機交互與參數傳遞,聯合NXOpen C++和宏命令編寫了非參數圓孔的參數化程序。在單基準面和多基準面非參數圓孔實現參數化的實例中,通過與傳統參數化方式對比,采用本研究的程序化方法均用時較少。經分析和計算,得出:本文研究的非參數圓孔實現參數化的方法,能有效實現模型大批量非參數圓孔的參數化,能提高工作效率約50%。
關鍵詞:NX二次開發;參數化;圓孔;宏命令;C++
中圖分類號:TP311.1 文獻標志碼: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++
在實際機械設計中,對于大型復雜的機械結構,常采用協同化設計方法。在協同設計過程中,由于各設計人員使用的三維設計軟件各不相同,一般采用STP或X_T的中間格式文件實現數據傳遞,而這種數據傳遞方式主要傳遞結構的拓撲數據,沒有傳遞設計的各項參數,不方便后續設計更改和參數優化[1-2]。
隨著計算機輔助設計(Computer Aided Design,CAD)的發展,各三維結構設計軟件為滿足用戶需求,開放了軟件接口(Application Programming Interface,API)[3-4]。本文根據企業結構設計人員的需求,以提高工作效率為目的,基于NX軟件平臺,研究了非參數化圓孔實現參數化的方法。
1? NX二次開發技術
NX實現二次開發的主要方式包括:GRIP(Graphics Interactive Programming,圖形交互編程)、NXOpen C\C++、MenuScript、UIStyler、KF(Knowledge Fusion,知識熔接技術)和調用宏命令等。雖二次開發方式眾多,但最終還是歸結于調用內部C/C++ API執行相關操作[5]。
1.1? GRIP和KF
二者均是面向對象的解釋性編程語言,簡單易學,對編程基礎要求較低,但功能均沒有NXOpen C\C++全面。GRIP幾乎可以執行UG界面下所有的圖形交互操作,采用GRIP二次開發可以提高客戶在交互界面的操作效率。KF是一種基于知識驅動的開發方式,可用于智能CAD系統的開發[6-7]。
1.2? NXOpen C\C++
NXOpen C\C++提供的API包含一系列的過程與函數,是所有二次開發方式中功能最齊全的,且可通過相關API調用其他二次開發方式生成的執行文件實現聯合開發。常通過API調用UIStyler生成的用戶定義對話框文件*.dlg或*.dlx,實現人機交互式操作。
1.3? MenuScript和UIStyler
MenuScript是一種用于用戶定制開發的菜單腳本語言,遵循特定的語法規則,可實現對標準菜單欄和工具條的增添、刪除和更改[8-9]。為實現與用戶交互式操作,可采用UIStyler模塊定制用戶對話框,類似MFC(Microsoft Foundation Classes,微軟基礎類庫)形式的定制模式,且UIStyler模塊內部集成了大量NX風格的控件,能實現大部份交互操作,不僅能生成對話框文件*.dlg或*.dlx,同時能生成指定編程語言的調用源文件和頭文件[10]。
1.4 宏命令
在NX二次開發過程中,對于某個功能是NX自帶的,但又需要配合二次開發的程序文件來使用,便可通過調用宏命令實現,極大提高開發效率,減少開發錯誤率。調用宏命令一般是通過調用包含宏命令的宏文件來執行相關操作。主要有兩種調用宏文件的方式:一是在二次開發的源程序文件中采用相關API調用;二是通過菜單按鈕順序調用[11]。
2 非參數圓孔實現參數化的方法
對于非參特征,要實現參數化,只能通過特征重建的方式。傳統方式實現非參圓孔的參數化主要流程如圖1所示,
首先建立孔位的基準點,再刪除非參圓孔所包含的面,最后建立圓孔特征。對于多個圓孔,如果有類似陣列和鏡像等關聯性質的,可適當采用此方法,但在射頻前端模塊設計中,一般圓孔不具有關聯性質且數量龐大,如采用傳統方式,需手動對模型中每個非參圓孔重復上述流程,這極大降低了設計人員的工作效率。對于重復的工作流程,一般采用批量化的方式進行簡化。本文對可批量化實現非參數圓孔參數化的方法進行研究。
如果只是簡單地將圖1所示流程進行批量化處理,則在創建圓孔特征的過程中,需要手動編寫孔特征程序,并采用UIStyler模塊設計圓孔特征的對話框。通過NX自帶的孔特征對話框可知,重新生成圓孔特征的對話框需要大量控件,且造成了開發資源的浪費。而采用批量創建基準點,同時刪除構成圓孔的所有面,再通過定制按鈕的動作調用宏文件,啟動NX自帶的孔特征命令完成批量操作,則能極大提高設計開發效率,同時充分利用了NX自帶的孔特征命令。
基于以上分析,完成非參圓孔參數化流程如圖2所示。
其中,參數輸入流程調用UIStyler模塊定制參數輸入對話框,程序主體采用NXOpen C++調用相關API實現操作,通過定制菜單欄和工具條,實現該程序與NX軟件無縫鏈接。
2.1 定制菜單欄和工具條
通過定制菜單欄和工具條,可方便用戶直接調用二次開發程序。與一般的菜單按鈕執行單一的ACTIONS(動作)不同,在本研究方法中,菜單按鈕需依次調用程序主體動態鏈接庫文件(*.dll)和創建孔特征的宏文件(*.macro)。因此,按鈕的ACTIONS需要采用/POST設置在調用*.dll文件后調用*.macro文件。具體程序如下:
VERSION 120 !版本號
EDIT UG_GATEWAY_MAIN_MENUBAR !對主框架進行編輯
AFTER UG_HELP!在“幫助”后進行編輯
CASCADE_BUTTON MyModeTool !添加下聯式菜單
LABEL 自建建模工具 !標簽
END_OF_AFTER !結束編輯
BUTTON UnparamHolesCreateParamHoles!添加按鈕
LABEL 非參孔轉參數孔 !按鈕標簽
MESSAGE 選擇非參孔轉為參數孔 !按鈕提示
BITMAP 非參孔創建參數孔 !按鈕位圖
ACTIONS *.dll !按鈕執行的標準動作
END_OF_MENU
MODIFY !對按鈕進行修改
BUTTON UnparamHolesCreateParamHoles
ACTIONS/POST createholes.macro !按鈕執行完標準動作后繼續調用宏文件
END_OF_MODIFY
啟動NX主程序,打開建模模塊時,定制菜單欄和工具條如圖3和圖4所示。
2.2 定制參數輸入對話框
在實際模型中,含有多類型的面,需要用戶選擇性輸入相關圓孔面。為方便選擇圓孔,將選擇過濾器設置為僅選擇圓柱面,圓孔包含的其余面通過NXOpenC++相關API完成自動集成。對話框(圖5)同時需要輸入基準面,以實現轉換過程中自動更改基準面,如圖6所示,基準面1和基準面2分別為方塊的上下表面,選擇不同基準面,在轉換過程中可實現對圓孔的基準面更改。
2.3? NXOpen C++過程
NXOpen C++程序流程如圖7所示,根據用戶輸入的圓柱面,自動集成圓孔所有面并刪除,同時在基準平面上創建圓孔基準點,為后續調用宏文件創建孔特征提供草圖依據。圓孔所有面自動集成過程為workPart→ScRuleFactory()→CreateRuleFaceBossPocket(Face, true),其中CreateRuleFaceBossPocket()方法表示選擇槽孔的所有面,槽孔的種子面儲存在Face變量中。刪除面的過程需定義一個NXOpen::Features:: DeleteFaceBuilder類,并添加自動集成的所有面,當執行類中Commit()方法時,完成刪除面操作。
創建圓孔基準點有兩種方式。方式一:循環圓柱面的兩圓弧邊,當邊位于基準面內時,通過圓弧邊創建圓心點即為基準點。方式二:提取圓柱面中心線,其與基準平面的交點即為基準點。當圓孔為通孔時,方式一可實現基準面變換;當圓孔為非通孔時,方式一無法實現基準面變換,則采用方式二來創建基準點,提取圓柱面中心線需創建NXOpen::Features:: VirtualCurveBuilder類,中心線與基準平面的交點通過草圖工具“相交”所對應的NXOpen:: SketchIntersectionPointBuilder類實現。創建中心線與基準平面交點的部分代碼如下:
NXOpen::SketchIntersectionPoint *nullNXOpen_SketchIntersectionPoint(NULL);
std::vector
std::vector
NXOpen::CurveDumbRule *curveDumbRule1;//每條中心線對應的規則
std::vector
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
NXOpen::Point3d POINT; //基準平面參考點
std::vector
std::vector
for (int i = 0; i { sketchIntersectionPointBuilder[i] = workPart->Sketches()->CreateIntersectionPointBuilder(nullNXOpen_SketchIntersectionPoint); section[i] = sketchIntersectionPointBuilder[i]->Rail(); //僅通過曲線與草圖相交創建點 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); //退出草圖 為方便用戶統計,可調用模態化窗口反饋給用戶相關信息。其代碼如下: char out_num[256]; sprintf(out_num,"您選擇了 %d 個圓柱面!",num_of_lines); theUI->NXMessageBox()->Show("統計", NXOpen::NXMessageBox::DialogTypeInformation, out_num); 3 方法運用實例 3.1 單基準面非參圓孔參數化 以某射頻連接器安裝面板(圖8)為例,該模型由電路設計人員導出,儲存為STP的中間格式文件,模型包含兩類孔共128個,現需將大孔調整為直徑為4.9 mm的通孔,將小孔調整為M1.6的螺紋孔。根據分析,有三種方式重建圓孔,分別為:采用傳統方式逐一重建圓孔(逐一法)、采用矩陣方式重建圓孔(矩陣法)以及本研究所述方式重建圓孔(程序法)。在64位16G內存的電腦中,基于NX10.0軟件分別采用三種方式對非參數圓孔參數化,參數化結果如圖9所示,耗時統計如表1所示。 由表1可知,在本模型中相較于逐一法,程序法所用時間約為其1/5,建模效率提升了約80%;相較于矩陣法,程序法所用時間約為其1/2,建模效率提升了約50%。矩陣法雖然省去了手動逐一重建圓孔的過程,但測量矩陣間距同樣耗費時間,程序法只需輸入要重建的圓孔,即可自動化實現參數化重建。 3.2 多基準面非參圓孔參數化 以某天線測試轉臺底架(圖10)為例,底架四周均有直徑為2.5 mm的通孔,現將其參數化為M3的螺紋孔。同樣采用逐一法和程序法參數化圓孔,相比于矩陣法,鏡像法更適用于本實例,因此,用鏡像法代替矩陣法參與對比,所用時間如表2所示。 由表2可知,在本模型中逐一法和鏡像法所用時間幾乎相等,而程序法所用時間約為這二者的1/2,建模效率提升了50%以上。 4 結語 分析了NX二次開發技術的主要途徑,并基于參數化設計,研究了一種將非參圓孔參數化的方法。基于NX平臺編寫了非參圓孔批量實現參數化的程序,實現了利用定制按鈕順序調用動態鏈接庫文件和宏文件,將非參圓孔的參數化過程程序化。經實例驗證,工作效率提高了約50%。本文的研究是一次完整的NX二次開發流程,不僅為非參模型實現參數化提供了一種指導方法,同時也為設計人員提高結構建模效率提供借鑒。 參考文獻: [1]王小明,王耕耘,張文明,等. 基于知識與UG二次開發的吊具參數化設計系統[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 二次開發在CAD模型離散中的應用[J]. 機床與液壓,2020,48(5):146-149. [4]王志雄. 基于UG的焊縫自動清理軟件開發和應用[J]. 現代制造技術與裝備,2020(5):121-122. [5]唐康林. Siemens NX二次開發[M]. 北京:電子工業出版社,2021. [6]李明新,李斌. UG NX 二次開發在產品圖樣標準化管理中的應用[J]. 現代制造工程,2016(10):26-50. [7]潘泓誼,劉淑梅,毛欣然. 基于 UG 二次開發的GRIP標準件庫制作系統研究[J]. 現代制造技術與裝備,2021(4):64-65. [8]李麗芳,王燕,陳開朗,等. 基于UG的汽車覆蓋件小圓角識別二次開發[J]. 模具制造,2019(12):7-10. [9]侯永濤,丁向陽. UG/Open二次開發與實例精解[M]. 北京:化學工業出版社,2007. [10]趙玉善,郭慧. 基于NX/Open的懸掛式爬坡輸送線的碰撞檢測仿真系統開發[J]. 圖學學報,2015(6):950-954. [11]張樂林,祝錫晶,葉林征. 基于UG二次開發的參數化建模方法[J]. 計算機系統應用,2016(1):146-149. [12]張偉,劉葵,謝正武,等. 基于UG宏程序后置處理的二次開發技術研究[J]. 新技術新工藝,2022(2):52-56. 收稿日期:2022-04-02 作者簡介:王皓宇(1994-),男,四川廣元人,碩士研究生,主要研究方向為天線雷達結構設計與仿真、CAD/CAE軟件二次開發,E-mail:601531072@qq.com。