李之圓,吳群彪,,梁 濤,陳 濤,方海峰,
(1.江蘇科技大學(xué)機(jī)電與動力工程學(xué)院,江蘇 張家港 215600) (2.江蘇科技大學(xué)蘇州理工學(xué)院,江蘇 張家港 215600)
減速器作為獨(dú)立的閉式傳動裝置連接原動機(jī)和工作機(jī),用來增大轉(zhuǎn)矩和降低轉(zhuǎn)速,滿足不同的工作需求。減速器的種類很多,按照傳動類型可分為齒輪減速器、蝸桿減速器、行星減速器以及它們互相組合而成的減速器。按照傳動級數(shù)可以分為單級減速器和多級減速器;按照齒輪形狀可以分為圓柱齒輪減速器、圓錐齒輪減速器和圓錐圓柱齒輪減速器;按照傳動的布置形式可以分為展開式、分流式和同軸式減速器。
國外首先使用個人計(jì)算機(jī)進(jìn)行參數(shù)化建模與界面實(shí)現(xiàn),并且取得了令人矚目的成就。Chugunov等[1]研究了SolidWorks二次開發(fā)程序在實(shí)際應(yīng)用和優(yōu)化方面的一些問題,對參數(shù)化建模與界面實(shí)現(xiàn)進(jìn)行了比較全面的概述;Yu[2]系統(tǒng)闡述了基于SolidWorks的參數(shù)化設(shè)計(jì)和智能化裝配的工作原理與簡單的開發(fā)方法;Reddy等[3]基于SolidWorks API開發(fā)了一套智能化的軸承設(shè)計(jì)數(shù)據(jù)庫。
目前,國內(nèi)關(guān)于SolidWorks二次開發(fā)的研究主要是使用SolidWorks自帶的二次開發(fā)語言VBA進(jìn)行各種簡單零件加工程序的開發(fā)。顧忠新等[4]在減速器箱體類零件的參數(shù)化設(shè)計(jì)中使用SolidWorks自帶的VBA工具設(shè)計(jì)了一款能夠快速創(chuàng)建減速器箱體零件的窗口程序,但程序比較簡單,只能實(shí)現(xiàn)箱體零件的快速建模,不能實(shí)現(xiàn)箱體零件的自動化裝配;柏子剛[5]利用SolidWorks開發(fā)了一款簡易軟件進(jìn)行壓縮機(jī)連桿類零件的快速參數(shù)化設(shè)計(jì);印立康等[6]利用SolidWorks進(jìn)行了中型鋼設(shè)計(jì)的二次開發(fā)研究。
國內(nèi)除了利用VBA進(jìn)行了一些簡單零件體的二次開發(fā),還進(jìn)行了一些關(guān)于復(fù)雜系統(tǒng)和運(yùn)動仿真方面的深入研究。劉勛[7]基于SolidWorks進(jìn)行了帶式輸送機(jī)機(jī)架CAD(computer aided design)/CAE(computer aided engineering)系統(tǒng)的開發(fā)與研究;汪志軍[8]基于SolidWorks二次開發(fā)進(jìn)行了帶式輸送機(jī)CAD系統(tǒng)的研究;趙方舟[9]基于SolidWorks進(jìn)行了計(jì)算機(jī)輔助公差優(yōu)化設(shè)計(jì)的研究。
VBA比較適合制作一些簡單的或者是個人工作用的小工具,VBA編程比C#復(fù)雜,VBA所用到類庫少,且加載麻煩,而C#編程簡單且功能比VBA功能更加全面,因此本文著重介紹C#語言的使用。
本文運(yùn)用開發(fā)工具Visual Studio中的C#編寫控制臺程序,再用編寫好的程序?qū)崿F(xiàn)SolidWorks的二次開發(fā)。
SolidWorks二次開發(fā)的工作原理是:通過調(diào)用不同的API函數(shù)打開SolidWorks以進(jìn)行不同的操作,如創(chuàng)建坐標(biāo)系、繪制草圖、拉伸實(shí)體、對稱陣列等等。API工具保證不同應(yīng)用之間用同一種編程語言進(jìn)行交互,傳遞參數(shù),并且這種語言編寫的代碼在兩個程序之間能夠互相通過數(shù)據(jù)傳遞確保二次開發(fā)的程序能成功運(yùn)行,如C#語言對應(yīng)的API函數(shù)保證了Microsoft.NET平臺與SolidWorks三維軟件之間的交互與二次開發(fā)程序的順利運(yùn)行。除了調(diào)用相應(yīng)的API函數(shù)外,在SolidWorks與其他平臺進(jìn)行交互與共同開發(fā)時,還需要添加相應(yīng)的引用協(xié)議,如在進(jìn)行二次開發(fā)之前,需要添加Microsoft.NET平臺與SolidWorks三維軟件的引用協(xié)議SolidWorks. Interop.sldworks.dll和SolidWorks.Interop.swconst.dll。SolidWorks二次開發(fā)工作過程如圖1所示。
圖1 SolidWorks二次開發(fā)工作過程
二次開發(fā)的減速器箱體設(shè)計(jì)程序包含3個窗體界面,其中主界面是程序打開后展現(xiàn)的首個界面,包括1個裝配完成狀態(tài)下的減速器箱體二維示意圖和6個按鈕控件,6個按鈕分別為“打開SolidWorks”“箱體設(shè)計(jì)”“箱蓋設(shè)計(jì)”“打開裝配體”“生成工程圖”“退出”。主界面設(shè)計(jì)如圖2所示。
圖2 二級減速器箱體設(shè)計(jì)軟件主界面
減速器箱體裝配體的示意圖通過圖片框應(yīng)用(PictureBox)實(shí)現(xiàn)。在進(jìn)行二次開發(fā)時,根據(jù)實(shí)際圖片大小和整個開發(fā)窗口的大小,將圖片框位置設(shè)置為(22,30),圖片框大小設(shè)置為448×336,將圖片來源設(shè)置為存放減速器箱體裝配體二維示意圖的文件夾,并且選擇經(jīng)過調(diào)整和修飾的圖片。
通過主窗口界面上的箱體設(shè)計(jì)按鈕,鏈接到箱體設(shè)計(jì)的子界面上,進(jìn)行箱體數(shù)據(jù)的采集與錄入。箱體設(shè)計(jì)界面如圖3所示。
圖3 箱體設(shè)計(jì)的子界面
減速器箱體設(shè)計(jì)的子界面包含25個標(biāo)簽控件(Label)、25個文本框控件(TextBox)和3個按鈕控件(Button)。其中,標(biāo)簽控件用來設(shè)置提示文本,文本框控件用來錄入數(shù)據(jù),按鈕控件用來執(zhí)行保存數(shù)據(jù)、建立箱體三維零件、繪制二維工程圖與關(guān)閉當(dāng)前箱體設(shè)計(jì)子窗口等操作。
在完成箱體的設(shè)計(jì)之后,用戶返回主界面,再通過主界面上的箱蓋設(shè)計(jì)按鈕,鏈接到箱蓋設(shè)計(jì)的子界面上,進(jìn)行箱蓋數(shù)據(jù)的采集與錄入。箱蓋設(shè)計(jì)界面如圖4所示。
圖4 箱蓋設(shè)計(jì)的子界面
箱蓋設(shè)計(jì)子界面一共包含9個標(biāo)簽控件(Label)、9個文本框控件(TextBox)和3個按鈕控件(Button)。與箱體設(shè)計(jì)界面類似,標(biāo)簽控件用來設(shè)置提示文本,文本框控件用來錄入數(shù)據(jù),創(chuàng)建三維圖按鈕控件用來繪制三維模型,繪制工程圖按鈕用來繪制對應(yīng)工程圖并且進(jìn)行標(biāo)注,退出按鈕用來關(guān)閉當(dāng)前子界面并返回主界面。
在SolidWorks二次開發(fā)中,API函數(shù)中包含一個通用sldwork對象,sldwork對象存在一個通用的文檔對象ModelDoc2,可以通過SolidWorks API函數(shù)將SolidWorks中的零件體、裝配體和工程圖3種文檔賦給文檔ModelDoc2,然后運(yùn)用ModelDoc2中的方法對3種文檔進(jìn)行修改與調(diào)整。
3.1.1預(yù)備工作
進(jìn)行零件體的SolidWorks二次開發(fā)時,首先要根據(jù)零件體文檔的存儲地址找到對應(yīng)的零件體文檔,然后將零件體文檔賦給文檔ModelDoc2,再使用ModelDoc2包含的方法對零件體的各種參數(shù)進(jìn)行修改。以箱蓋零件體為例,箱蓋零件體的參數(shù)來源比較復(fù)雜,一部分是從箱體零件上提取的,另一部分是從箱蓋設(shè)計(jì)界面上提取的,首先需要對這些數(shù)據(jù)進(jìn)行處理,然后再使用這些數(shù)據(jù)驅(qū)動箱蓋零件進(jìn)行修改。
創(chuàng)建箱蓋三維模型之前需要先提取箱體的部分參數(shù),將箱體文檔賦給ModelDoc2所創(chuàng)建的對象。根據(jù)箱體文檔的存儲目錄,將箱體文檔賦給ModelDoc2類對象SWPartDoc,對應(yīng)步驟和代碼如下。
1)打開文檔,判斷進(jìn)程:
open_swfile("",getProcesson("SLDWORKS"), "SldWorks.Application");
2)文件目錄賦值:
int IntError=-1;
int IntWraning=-1;
string filepath1=ModleRoot+@"箱體.SLDPRT";
3)打開對應(yīng)路徑下的文檔,并將這文檔賦給SwPartModelDoc2:
SwPartDoc=swApp.OpenDoc6(filepath1,(int)swDocumentTypes_e.swDocPART,(int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
3.1.2尺寸驅(qū)動法使用
箱體的參數(shù)賦給ModelDoc2類對象SWPartDoc,運(yùn)用ModelDoc2中的方法獲得箱體所包含的數(shù)據(jù),例如下箱體尺寸部分代碼見表1。
表1 下箱體尺寸的部分代碼
3.1.3后續(xù)工作
在修改完草圖尺寸之后,箱蓋的三維零件并不會發(fā)生改變,還需要使用代碼重新編輯箱蓋的零件體,才能改變箱蓋零件三維模型的尺寸。
在重新編輯完零件體之后,按照輸入的尺寸使用尺寸驅(qū)動法生成箱蓋零件體,如圖5所示。
圖5 箱蓋零件體
SolidWorks二次開發(fā)的另一項(xiàng)重要功能是繪制工程圖,并且實(shí)現(xiàn)自動化標(biāo)注,這項(xiàng)功能能夠極大節(jié)省設(shè)計(jì)人員繪制二維圖的時間,設(shè)計(jì)人員可以在二次開發(fā)生成的工程圖的基礎(chǔ)之上,進(jìn)行簡單的修改與零件剖視圖的生成,快速完成零件體與裝配體的二維圖繪制。
利用SolidWorks生成零件體的工程圖并進(jìn)行修改的方法與三維模型的修改與裝配方法類似,需要先打開零件體的工程圖,其步驟和代碼如下。
1)打開文檔,判斷進(jìn)程:
open_swfile("", getProcesson("SLDWORKS"), "SldWorks.Application");
2)文件目錄賦值:
int IntError=-1;
int IntWraning=-1;
string filepath2=ModleRoot+@"蓋.SLDDRW";
3)創(chuàng)建一個新的ModelDoc2的文檔用來存放打開工程圖:
ModelDoc2 SwDrawDoc=swApp.OpenDoc6(filepath2,int)swDocumentTypes_e.swDocDRAWING,(int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
4)重新編輯工程圖:
SwDrawDoc.EditRebuild3();
在生成的基礎(chǔ)零件圖上,開發(fā)者可以預(yù)先進(jìn)行一些簡單的參數(shù)標(biāo)注,標(biāo)注樣式如圖6所示。使用者還可以根據(jù)具體情況,在基礎(chǔ)零件圖上再增加或者刪除一些參數(shù),以滿足自己的設(shè)計(jì)要求。
零件體工程圖的標(biāo)注包含了很多細(xì)節(jié),如圖7所示是箱蓋零件體俯視圖的局部展示。
圖6 零件體三視工程圖
圖7 零件體工程圖局部展示
與3.1.1相同,步驟和代碼如下。
1)打開文檔,判斷進(jìn)程:
open_swfile("", getProcesson("SLDWORKS"), "SldWorks.Application");
2)文件目錄賦值:
式中:GNOx為澳斯麥特爐產(chǎn)生的氮氧化合物質(zhì)量;B為消耗的粉煤量,暫定4 700 kg/h;β為燃料中氮的轉(zhuǎn)化率,25%;N為燃料中的含氮量,某冶煉廠燃煤中含氮量為1.29%。
int IntError=-1;
int IntWraning=-1;
string filepath1=ModleRoot+@"減速器.SLDASM";
3)創(chuàng)建一個新的ModelDoc2的文檔用來存放打開裝配體:
ModelDoc2SwAssemDoc = swApp.OpenDoc6(filepath1,(int)swDocumentTypes_e.swDocASSEMBLY,(int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
以一組裝配基準(zhǔn)為例,說明配合驅(qū)動的方法,首先定義兩個零件體上需要配合的特征,然后選擇合適的裝配方法進(jìn)行裝配,步驟和代碼如下。
1)定義需要裝配的一組基準(zhǔn)對應(yīng)的SelectByID2的字符串名稱:
#region 裝配一對基準(zhǔn);
2)清空選擇集后,選中基準(zhǔn)面:
string MateBaseName2="RectangleWireConnectFace@PlugBottomBox-1@PowerStrip";
3)清空選擇集后,選中基準(zhǔn)面:
swAssemModleDoc.Extension.SelectByID2(MateBaseName1, "PLANE", 0, 0, 0, false, 1, null, 0);
4)在選擇集中附加選擇與之配對的基準(zhǔn): swAssemModleDoc.Extension.SelectByID2(MateBaseName2, "PLANE", 0, 0, 0, true, 1, null, 0);
5)添加兩個基準(zhǔn)之間距離為20 mm的距離配合:
int x=-1;
Mate2 SwMate = SwAssem.AddMate5(5, 1, true, 0.02, 0.02, 0.02, 0, 0, 0, 0, 0, false, true, 0, out x);
6)配合也是特征,將其轉(zhuǎn)化為特征對象:
Feature swMateFeature=(Feature)SwMate;
7)配合特征重命名:
if (swMateFeature !=null)
{
swMateFeature.Name="測試距離配合";
}
#endregion
利用SolidWorks生成零件體工程圖并進(jìn)行修改,需要先打開裝配體的工程圖,步驟和代碼如下。
1)打開文檔,判斷進(jìn)程:
open_swfile("", getProcesson("SLDWORKS"),
"SldWorks.Application");
2)文件目錄賦值:
int IntError=-1;
int IntWraning=-1;
string filepath2=ModleRoot+@"減速器.SLDDRW";
3)創(chuàng)建一個新的ModelDoc2的文檔用來存放打開的工程圖:
ModelDoc2 SwDrawDoc=swApp.OpenDoc6 (file path2, (int)swDocumentTypes_e.swDocDRAWING, (int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
4)重新編輯工程圖:
SwDrawDoc.EditRebuild3();
在生成的基礎(chǔ)裝配圖上,開發(fā)者可以預(yù)先進(jìn)行一些簡單的參數(shù)標(biāo)注,標(biāo)注樣式如圖8所示。使用者也可以根據(jù)具體情況,在基礎(chǔ)裝配圖上再增加或者刪除一些參數(shù),以滿足自己設(shè)計(jì)的要求。
圖8 裝配體三視工程圖
裝配體工程圖的標(biāo)注包含了很多細(xì)節(jié),如圖9所示是減速器箱體主視圖的局部展示。
圖9 裝配體工程圖局部展示
本文運(yùn)用C# 語言結(jié)合API函數(shù)對SolidWorks進(jìn)行二次開發(fā),設(shè)計(jì)了一款能在Windows系統(tǒng)中獨(dú)立運(yùn)行的減速器箱體設(shè)計(jì)軟件,該軟件能夠?qū)崿F(xiàn)減速器箱體零件的快速參數(shù)化建模和工程圖生成,并能夠?qū)崿F(xiàn)自動化裝配和生成裝配圖。本文的方法能夠大大提高減速器箱體的設(shè)計(jì)效率,并可為其他復(fù)雜曲面結(jié)構(gòu)的參數(shù)化建模與裝配提供具有參考意義的思路。