(1.中國兵器裝備研究院, 北京 102209; 2.中國兵器工業(yè)第二〇八研究所, 北京 102202)
NX是Siemens PLM Software公司出品的一個產品開發(fā)解決方案,通過為用戶提供面向設計、仿真和制造的高性能集成解決方案,實現整個產品開發(fā)過程的轉型[1]。
彈簧由于能吸收振動和沖擊能量,且具有自動復位的功能,所以彈簧廣泛應用于液壓閥門、車輛減振裝置、沖壓設備的復位機構和槍械、火炮等機械設備中。隨著數字化設計與制造技術的迅速發(fā)展,彈簧零件的手工設計步驟繁瑣、工作量比較大并且容易出錯,效率低、成本高,已不能滿足新的設計模式與生產模式需要。
彈簧的設計計算屬常規(guī)設計,但在三維模型設計過程中,計算繁瑣,建模復雜,較適合CAD開發(fā),因此利用三維CAD技術開發(fā)彈簧模型自動生成工具是必要的,也是可行的。
結合當前制造行業(yè)三維CAD的應用狀況,選擇基于NX軟件進行三維彈簧設計軟件開發(fā),提高彈簧設計質量和效率。利用三維彈簧設計軟件,輸入相關參數,軟件進行幾何參數計算,幾何參數通過驅動彈簧設計模板生成三維彈簧模型,并進行變形處理。
通過二次開發(fā),直接提供特征參數輸入界面,通過參數的交互輸入,進行幾何參數計算,并驅動設計模板生成三維零件模型,簡化了零件設計流程,規(guī)范了零件特征結構,節(jié)省設計時間,提高工作效率[2-3]。
本文在論述了基于C#的NX10二次開發(fā)的環(huán)境設置、二次開發(fā)窗體設計以及二次開發(fā)的程序調試等模塊設置,以矩形壓縮彈簧為例,進一步說了基于C#的NX10二次開發(fā)方法及機械零件參數化設計的實現過程。
在NX眾多的二次開發(fā)技術中,NX Open API是NX提供的一個高級二次開發(fā)編程語言工具集,幾乎所有能在NX界面上的操作都可以調用相應的NX Open API函數來實現,并同NX進行無縫連接,從而擴展NX的功能,使其更具專業(yè)化[4-5]。其中C#是面向對象的編程語言,作為一種解釋性語言,編譯的程序可以在32位與64位系統(tǒng)中完美運行,而且其操作方便易懂、語法簡明。
二次開發(fā)環(huán)境設置主要包括開發(fā)工具配置和開發(fā)環(huán)境設置。
1.1.1 開發(fā)環(huán)境設置
基本環(huán)境變量:環(huán)境變量在NX的運行過程中有著重要的應用,一些環(huán)境變量在安裝NX之后便已經設置。其中最常用的基本環(huán)境變量包括:
UGII_BASE_DIR:NX安裝的文件夾路徑;
UGII_ROOT_DIR:NX安裝文件夾中UGII的位置;
UGS_LICENSE_SERVER:28000@#######(IP地址或主機名);
UGII_LANG:ENGLISH。
其它常用的環(huán)境變量在ugii_env_ug.dat文件中定制。該文件默認位于UGII_ROOT_DIR目錄下。用戶可以修改同目錄下的ugii_env.dat文件。添加一些環(huán)境變量覆蓋已有的環(huán)境變量以控制NX的運行方式該文件可以通過環(huán)境變量UGII_ENV_FILE進行設定。
命令行環(huán)境變量設置:編輯%UGII_BASE_DIR%/UGOPEN/ufvars.bat,設定MS VC Dir到正確目錄。具體配置如下所示:
Rem Your might install them in a different location.
Rem
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio/VC98
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio .NET/Vc7
Rem set MSVCDir=C:/Program Files/Microsoft SDK
Rem NX7
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 8/VC
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 8/VC
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 9/VC
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 9/VC
Rem NX8.0/NX8.5 wntx64
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 10/VC
Rem NX8.0/NX8.5 wntx32
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 10/VC
Rem NX9.0/NX10.0 wntx64
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 11/VC
Rem NX9.0/NX10.0 wntx32
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 11/VC
1.1.2 應用向導創(chuàng)建
開發(fā)工作開始前需對NX10.0以及Visual Studio 2010進行配置。Project Wizard是NX為用戶提供的向導自動生成開發(fā)工程的工具,其VC#開發(fā)向導保存在%UGII_BASE_DIR%/UGOPEN/vs_files/VC#目錄下,復制%UGII_BASE_DIR%/UGOPEN/vs_files/VC#/CSharp Projects文件夾中所有的文件到Microsoft Visual Studio2010/VC#/CSharp Projects目錄中;復制%UGII_BASE_DIR%/UGOPEN/vs_files/VC#/VC#Wizards文件夾中所有的文件到Microsoft Visual Studio2010/VC#/VC#Wizards目錄中。
在NX10.0命令提示符窗口執(zhí)行“devenv”運行VS2010,在Visual C#工程模板中選擇NX10 Open C# Wizard向導創(chuàng)建工程。
圖1 向導創(chuàng)建
利用向導創(chuàng)建的程序由“引用”和“主程序”兩部分組成:其中“引用”中包含了NX自帶的函數庫(如NXOPEN.dll等)和程序中的數據包(如System等)?!爸鞒绦颉钡哪J名稱為mycalss.cs,主要負責執(zhí)行程序的開始、調用及結束。調用的程序一般寫在窗體程序中,窗體通過主程序激活。
采用NX Block UI Styler制作對話框,使用Block UI Styler可以生成包含文本輸入、參數輸入、目標選擇、按鈕響應、圖片插入等要素的對話框,完全支持NX操作。創(chuàng)建對話框后,生成C#語言源程序代碼文件(.cs文件)與NX對話框文件(.dlx文件)。其中.cs文件需要通過API進行編譯,生成動態(tài)鏈接庫即可以在NX中執(zhí)行的.dll文件。
通過 Block UI Styler設計的對話框文件是后綴名為“dlx”的文件通常稱其為DLX文件。從文件格式上來說.DLX檔是一個標準的XML文件,包含了在運行時構建對話框的所有信息客戶應用程序使用了DLX對話框文件和編譯生成的DLL文件一樣,都需要放置在開發(fā)根目錄的 Application路徑下,提供給NX運行時加載使用。
Block UI Styler用戶接口主要包含以下幾個部分:菜單工具欄,配置對話框,包括布局設計器,屬性編輯器,代碼生成管理器。
組塊目錄如圖2所示。
圖2 組塊目錄
第一次運行程序調試時,需要將程序附加到NX進程中,在“工具”選項下選擇“附加到進程”。
在彈出的窗口中,選擇NX10進程,單擊“附加”完成。此時,運行調試命令,程序將啟動NX10軟件,同時程序將自動生成動態(tài)鏈接庫文件(*.dll)。激活NX10,按下Ctrl+U,將彈出調試串口,選擇動態(tài)鏈接庫文件,完成調試操作。
圖3 調試串口
程序調試沒有問題后,需要對應用程序進行簽名后,才能正式發(fā)布,應用程序簽名主要包括:添加NXSigningResource.res到方案中,編譯成功后,執(zhí)行SignDotNet.exe,也可以設定在方案中的Post-Bulid event來自動執(zhí)行簽名。
彈簧設計向導工具在NX建模環(huán)境下具備快速打開的接口,并能方便的選擇所需設計的彈簧零件向導工具。提供與NX一致的交互式、向導式用戶界面,并通過指定矢量和點指定彈簧在三維NX CAD模型空間的位置,包括矩形壓縮彈簧、矩形拉伸彈簧、扭簧、多股壓縮彈簧、多股拉伸彈簧和片簧等六種類型的定義、參數的輸入界面、幾何參數的計算結果顯示界面。利用交互式用戶界面,通過對彈簧名稱的定義、彈簧位置的確定、彈簧參數化的輸入以及顯示結果的檢查,將自動生成矩形拉伸彈簧三維模型,并同時完成對彈簧三維模型的變形處理[6],以上六類彈簧的輸入輸出參數如表1~6所示。
表1 矩形壓縮彈簧輸入輸出參數
表2 矩形拉伸彈簧輸入輸出參數
續(xù)表2
輸入參數輸出結果3)圓鉤環(huán)壓中心7)螺旋角提供如下參數的輸入:8)K1)中間直徑2)垂直邊長3)平行邊長4)有效圈數
表3 扭簧輸入輸出參數
表4 多股壓縮彈簧輸入輸出參數
表5 多股拉伸彈簧輸入輸出參數
表6 片簧輸入輸出參數
典型彈簧設計向導結構方案如圖4所示。
圖4 設計向導結構
在NX環(huán)境中,創(chuàng)建典型彈簧三維設計、彈簧簡化視圖的接口,方便調用。
在NX建模環(huán)境中,選擇“典型彈簧三維設計”菜單,在彈出的下拉菜單中選擇“XX簧”,或者在“典型彈簧三維設計”工具條中選擇“XX簧”圖標,即可進入相應的彈簧向導界面;
在彈簧向導界面中“名稱與位置”步驟,在“彈簧名稱”控件中輸入彈簧的名稱,在“指定矢量”和“指定點”控件中選擇彈簧旋轉的方向及放置位置;
進入“輸入參數”步驟界面,進行一些參數的選擇或者輸入,在“旋向”控件中可選擇“左旋”或者“右旋”。在“彈簧樣式”中可選擇“矩形”或者”圓柱形”,在“端部結構”控件中,選擇“并緊磨平”、“并緊不磨平”、“不并緊”三種端部情況。然后在“輸入參數”中輸入:中間直徑、自由高度、有效圈數等彈簧參數;
進入“顯示結果”步驟界面,在此步驟中,可以查看彈簧的相關輸入參數及一些計算參數,若符合設計要求,點擊完成即可生成相應的彈簧三維模型。若不符合則可以點擊“上一步”進行參數修改,生成相應的彈簧三維模型。
圖5 典型彈簧三維設計邏輯流程圖
以矩形壓縮彈簧為實例,主要包括建立彈簧相關參數表達式,創(chuàng)建彈簧三維模型,進行二次程序開發(fā)。矩形壓縮彈簧按鋼絲旋轉方向可分為左旋和右旋,按彈簧橫截面可分為圓柱形截面和矩形截面,按端部結構可分為端部不并緊、端部并緊、端部并緊并磨平。在進行參數表達式建立以及二次開發(fā)時,都要能夠滿足。
建立彈簧相關參數表達式,基于表達式驅動創(chuàng)建彈簧三維模型。
圖6 參數表達式
主要包括創(chuàng)建項目、編寫代碼、進行程序編輯與調試、編制菜單文件,進行程序注冊。
其中源代碼最主要的就是建立程序與表達式之間的聯(lián)系,使用C#語言與NX Open API完成表達式與程序之間關系的建立,主要代碼如下:
stringarraylist01[1] = "輸入參數:";
stringarraylist01[2] = "彈簧中徑D = " + eD.GetProperties().GetDouble("Value").ToString();
stringarraylist01[3] = "垂直邊長a = " + ea.GetProperties().GetDouble("Value").ToString();
stringarraylist01[4] = "平等邊長b = " + eb.GetProperties().GetDouble("Value").ToString();
stringarraylist01[5] = "自由高 H0= " + eH0.GetProperties().GetDouble("Value").ToString();
stringarraylist01[6] = "有效圈數n = " + en.GetProperties().GetDouble("Value").ToString();
stringarraylist01[7] = "總圈數 n1= " + en1.GetProperties().GetDouble("Value").ToString();
編制菜單文件:
VERSION 143
EDIT UG GATEWAY_MAIN_MENUBAR
AFTER UG HELP
!MENU INTEGRAT
CASCADE_BUTTON_MENU_CLASSIC_PART_DESIGN
LABEL 典型彈簧三維設計
!END_OF_MENU
END_OF AFTER
MENU_MENU_CLASSIC_PART_DESIGN
BUTTON BTN SPRING_Rectangle_Cylinder_Compression
LABEL 矩形壓縮彈簧
BITMAP Rectangle_Cylinder_Compression_Spring.bmp
ACTIONS Rectangle_Cylinder_Compression_Spring _cs.dll
基于上述創(chuàng)建的表達式,利用NX的規(guī)律曲線命令創(chuàng)建彈簧螺旋線,如圖7所示。
圖7 螺旋線視圖
利用草圖命令創(chuàng)建彈簧矩形截面,再利用掃掠命令創(chuàng)建彈簧實體模型,如圖8所示。
圖8 截面及實體視圖
二次開發(fā)調試完成后,可形成彈簧設計向導,本次以矩形壓縮彈簧為例,首先分析矩形彈簧的主要參數如下。
彈簧絲截面尺寸:垂直軸向方向的垂直邊長a,平行軸向方向的邊長b,其對角線長度為d;
彈簧外徑D:彈簧的最大外徑;
彈簧內徑D1:彈簧的最小內徑;
彈簧中徑D2:彈簧的平均直徑,計算公式為:D2=(D+D1)÷2=D1+a=D-a。
有效圈數n:彈簧能保持相同節(jié)距的圈數。
支撐圈數n2:為了使彈簧在工作時受力均勻,保證軸線垂直端面,制造時,常將彈簧兩端并緊。并緊的圈數僅起支撐作用,稱為支撐圈。一般有1.5、2 T、2.5 T,常用的是2 T。
總圈數n1:有效圈數與支撐圈的和。即n1=n+n2。
自由高H0:彈簧在未受外力作用下的高度。
其次明確彈簧的計算輸出參數,主要包括螺距、展開長度、螺旋角、曲度系數。
展開長度:繞制彈簧時所需鋼絲的長度。L≈πD2(2+n)。
設定其幾何參數為:中間直徑20 cm、垂直邊長1 cm、平行邊長4 cm、自由高度65 cm、有效圈數6、總圈數8;其特性參數為:工作高度1為59 cm、工作高度2為54 cm、試驗高度為51 cm、工作載荷1為15 N、工作載荷2為30 N、試驗載荷為39 N。
根據輸入的彈簧參數進行理論計算,可生成螺距t=9.83 mm、展開長度L=502.65 mm、螺旋角α=8.9、曲度系數K=1.32,隨后即可在NX環(huán)境內生成具體彈簧模型。
從圖9可以看出,應用此設計程序建成的矩形壓縮彈簧符合設計輸入要求,其三維標注的參數與理論計算保持一致,且能便捷的生成二維簡化彈簧圖。
圖9 彈簧視圖
本文應用基于C#的NX OPEN API二次開發(fā)的方法以及三維零件參數化設計,最終實現了矩形壓縮彈簧、矩形拉伸彈簧、扭簧、多股壓縮彈簧、多股拉伸彈簧和片簧等6種彈簧的快速設計以及彈簧簡化視圖。目前,已經在實際產品設計過程中得到了應用和驗證,大幅減少了設計師的重復勞動,有效提升了常用彈簧設計效率和質量。