摘要:利用SolidWorks工具對螺母標(biāo)準(zhǔn)件進(jìn)行建模的二次開發(fā),極大方便用戶在機(jī)械產(chǎn)品設(shè)計(jì)方面的工作,可以讓用戶有更多的精力用于新零件的設(shè)計(jì)開發(fā)上,減少設(shè)計(jì)開發(fā)周期,大幅度提高產(chǎn)品設(shè)計(jì)的效率,提高市場效益,降低人工成本。鑒于VB語言存在的不足,使用C#語言,結(jié)合SolidWorks API函數(shù),以六角螺母為例,采用尺寸驅(qū)動法,通過數(shù)據(jù)庫中的參數(shù)來驅(qū)動零件重新建模,開發(fā)了基于SolidWorks的六角螺母標(biāo)準(zhǔn)件庫。詳細(xì)介紹了主要開發(fā)步驟包括創(chuàng)建數(shù)據(jù)庫、設(shè)計(jì)零件模板以及編寫程序等。運(yùn)行結(jié)果表明,該設(shè)計(jì)結(jié)果可以降低勞務(wù)的重復(fù)性,提升設(shè)計(jì)的效率,具有比較好的實(shí)用性。
關(guān)鍵詞:SolidWorks;建模設(shè)計(jì);C#語言
Abstract:Using SolidWorks tools to model the secondary development of nuts standard parts greatly facilitates users'work in mechanical product design. It can make users have more energy for the design and development of new parts,reduce the design and development cycle,greatly improve product design efficiency,improve efficiency and reduce costs. In view of the deficiencies of VB language,using C# language and SolidWorks API function,taking hexagonal nuts as an example,using dimension-driven method,driving parts to re-model through the parameters in the database,the standard parts library of hexagonal nuts based on SolidWorks is developed. The main development steps are introduced in detail,including creating database,designing part template and compiling program. The operation results show that the design results can reduce the repeatability of labor services,improve the efficiency of design,and have good practicability.
Key words:SolidWorks;Modeling Design;C#;
引言
Solid Works是一款優(yōu)秀的產(chǎn)品設(shè)計(jì)軟件,因其設(shè)計(jì)過程簡便、建模功能強(qiáng)大、開放性與兼容性較好,為廣大機(jī)械產(chǎn)品設(shè)計(jì)人員和工程師所接受[1]。
雖然SolidWorks有強(qiáng)大的功能,但該軟件是針對整個機(jī)械制造行業(yè)的通用型軟件,不是針對具體企業(yè)和行業(yè)所設(shè)計(jì)的,不能滿足特定的產(chǎn)品設(shè)計(jì)用戶的建模過程與簡化要求。例如,國外制圖標(biāo)準(zhǔn)與國內(nèi)不一致,在生成設(shè)計(jì)工程圖時,沒有中國的制圖GB標(biāo)準(zhǔn)(尤其是基準(zhǔn)符號、放大圖標(biāo)注、粗糙度標(biāo)注、裝配圖序號、標(biāo)題欄、明細(xì)表等),也不存在適合我國制圖標(biāo)準(zhǔn)的標(biāo)準(zhǔn)件庫[2]。因此,如何通過SolidWorks的二次開發(fā)創(chuàng)建類似于螺母這樣的標(biāo)準(zhǔn)件庫,讓用戶有更多的精力用于新零件的設(shè)計(jì)上,極大方便我國用戶在機(jī)械產(chǎn)品設(shè)計(jì)開發(fā)的工作,提升設(shè)計(jì)效率,減少設(shè)計(jì)開發(fā)時間,提高效益,降低成本,是一項(xiàng)非常有意義且必要的工作[3]。
雖Visual Basic擁有其簡單易用和“所見即所得”的特性,使得它目前依然較多SolidWorks二次開發(fā)者使用的工具。然而Visual Basic語言不支持繼承性、無多線程技術(shù)支持、功能不全的異常處理能力等多項(xiàng)明顯缺點(diǎn),在SolidWorks二次開發(fā)的技術(shù)發(fā)展中無法滿足需求[4]。C#是由微軟公司開發(fā)的較新的、現(xiàn)代的、簡單的、面向?qū)ο蟮摹㈩愋桶踩?、且是介于C和C++之間的開發(fā)編程工具,功能十分強(qiáng)大[5]。
鑒于VB語言的不足,使用C#語言,結(jié)合SolidWorks的API函數(shù),以六角螺母為例,開發(fā)了基于SolidWorks的六角螺母標(biāo)準(zhǔn)件庫。運(yùn)行結(jié)果表明,該設(shè)計(jì)結(jié)果可以降低勞務(wù)的重復(fù)性,提升設(shè)計(jì)的效率,具有比較好的實(shí)用性。
1.六角螺母標(biāo)準(zhǔn)件庫二次開發(fā)方法
編程法和尺寸驅(qū)動法是SolidWorks的二次開發(fā)過程中的常用兩種方法。
比較兩種SolidWorks建模過程的二次開發(fā),雖使用軟件自帶的宏錄制功能來簡化編程任務(wù),然而其簡化程度不同。使用編程法時,在三維造型過程中使用宏錄制功能將造型過程全部錄制下來,然后通過修改宏代碼的方式,賦以相關(guān)的變量。雖然簡化了編程工作,仍存在避免不了的缺點(diǎn)。在使用宏功能錄制整體造型時,不能錄制全部的設(shè)計(jì)過程,開發(fā)者依然需要用SolidWorks API函數(shù)對遺漏的設(shè)計(jì)過程進(jìn)行代碼編寫。
比較尺寸驅(qū)動法,不需要通過宏錄制功能記錄整個造型設(shè)計(jì)的過程,而是產(chǎn)品零件建模工作完成后,只需對參數(shù)化的尺寸進(jìn)行修改即更新零件,使用宏錄制功能將尺寸的修改過程錄制下來。這樣就不用考慮模型的設(shè)計(jì)建模過程是怎樣,只關(guān)心對零件建模的修改,而且很大程序上減少了SolidWorks API 函數(shù)的使用[6]。
考慮到編程法的不足和尺寸驅(qū)動法的優(yōu)勢,因此在本文采用尺寸驅(qū)動法對六角螺母標(biāo)準(zhǔn)件進(jìn)行二次開發(fā)。
2. 主要開發(fā)步驟
2.1數(shù)據(jù)庫的創(chuàng)建
使用尺寸驅(qū)動方法進(jìn)行SolidWorks二次開發(fā)時,尺寸參數(shù)的名稱必須和SolidWorks模型中相對應(yīng)的尺寸的名稱相同。因此,合理的設(shè)計(jì)數(shù)據(jù)庫,才能實(shí)現(xiàn)預(yù)期的功能。本文創(chuàng)建的六角螺母庫參數(shù)數(shù)據(jù)庫如圖1所示。圖1中,主動參數(shù)為M*P,其它所有從動參數(shù)的參數(shù)值可以通過主動參數(shù)直接確定。
2.2設(shè)計(jì)零件模板
尺寸驅(qū)動方法在重新生成模型時,模型中的每一個尺寸都需要獲得相應(yīng)的尺寸來驅(qū)動重新建模。本文設(shè)計(jì)的六角螺母標(biāo)準(zhǔn)件的零件模板如圖2所示。
2.3編寫程序
在六角螺母參數(shù)數(shù)據(jù)庫以及零件模板建立好后,接下來的編寫程序是最重要也是最復(fù)雜的步驟。以下關(guān)鍵代碼的主要功能是實(shí)現(xiàn)用戶在裝配體環(huán)境下從設(shè)計(jì)庫中插入標(biāo)準(zhǔn)件時,觸發(fā)一個插入零件的事件,系統(tǒng)會自動打開這個零件,同時彈出參數(shù)對話框,在用戶選擇了相應(yīng)參數(shù)重新建模后,能夠?qū)⑿律a(chǎn)的零件自動保存在一個固定的地方。在保存零件時應(yīng)該判斷是否已經(jīng)有完全相同尺寸的零件存在,如果已經(jīng)存在,需要用已存在的零件來替換這個零件。在保存零件后應(yīng)該關(guān)閉該零件,返回到裝配體環(huán)境。具體的程序如下:
if(SwApp.ActivateDoc("六角厚螺母")!= null)//判斷需要保存的零件是否已經(jīng)存在
{
string NewFileName;
FrmParam.ShowDlgParam(@"D:\螺母\nut1.flx");
NewFileName = FrmParam.filename();//設(shè)置零件保存的名稱
NewFileName = "E:\螺母\" + NewFileName;
if(File.Exists(NewFileName)== false)//保存的零件不存在
{ //保存該零件,同時關(guān)閉該零件,返回到裝配體環(huán)境
SldWorks swApp =(SldWorks)Marshal.GetActiveObject("SldWorks.Application");
ModelDoc2 swActiveDoc =(ModelDoc2)swApp.ActiveDoc;
swActiveDoc.SaveAs2(NewFileName,0,false,false);
swApp.CloseDoc(NewFileName);
}
Else //保存的零件已經(jīng)存在
{ //用已有的零件來替換該零件,同時關(guān)閉該零件,返回到裝配體環(huán)境
bool bResult = doc.ReplaceComponents(NewFileName,"默認(rèn)",false,false);
SldWorks swApp =(SldWorks)Marshal.GetActiveObject("SldWorks.Application");
ModelDoc2 swActiveDoc =(ModelDoc2)swApp.ActiveDoc;
swActiveDoc.SaveAs2(@"E:\螺母\nut2.SLDPRT",0,false,false);
swApp.CloseDoc(@"E:\螺母\nut2.SLDPRT");
File.Delete(@"E:\螺母\nut2.SLDPRT");
}
3 總結(jié)
通過對SolidWorks二次開發(fā)的工具和SolidWorks二次開發(fā)的方法的比較,選擇了尺寸驅(qū)動的方法與C#語言,結(jié)合SolidWorks API函數(shù),以六角螺母為例,通過數(shù)據(jù)庫中的參數(shù)來驅(qū)動零件重新建模,開發(fā)了基于SolidWorks的六角螺母標(biāo)準(zhǔn)件庫。詳細(xì)介紹了主要開發(fā)步驟包括創(chuàng)建數(shù)據(jù)庫、設(shè)計(jì)零件模板以及編寫程序等。運(yùn)行結(jié)果表明,該設(shè)計(jì)結(jié)果可以降低勞務(wù)的重復(fù)性,提升設(shè)計(jì)的效率,具有比較好的實(shí)用性。
參考文獻(xiàn)
[1]吳志林,張凱還. 基于SolidWorks尺寸驅(qū)動建模的二次開發(fā)[J]. 計(jì)算機(jī)時代,2013(01):14.
[2] 嚴(yán)竹生. SolidWorks二次開發(fā)關(guān)鍵技術(shù)研究[J]. 中國科技信息,2006(21):146.
[3] 王曉麗、季忠.SolidWorks的二次開發(fā)方法比較[J].現(xiàn)在制造技術(shù)與裝備,2006(2):50.
[4]許陳. 基于紅外投影的駕駛員頭部姿勢探測實(shí)驗(yàn)系統(tǒng)的開發(fā)[D].南京理工大學(xué),2014.
[5]唐敏康,李永兵. 基于C#.NET的Solidworks二次開發(fā)在數(shù)字礦山中的應(yīng)用[J]. 現(xiàn)代礦業(yè),2009(05):63.
[6]王曉麗、季忠.SolidWorks的二次開發(fā)方法比較[J].現(xiàn)在制造技術(shù)與裝備,2006(2):50.
基金項(xiàng)目:國家自然科學(xué)基金資助項(xiàng)目“基于本體的復(fù)雜產(chǎn)品功能語義表示與智能分解研究”(61772247);
浙江省科技計(jì)劃項(xiàng)目“面向復(fù)雜地形環(huán)境下中小型橋梁的安全檢測系統(tǒng)研發(fā)”(LGF8E070001);
浙江省教育廳科研項(xiàng)目“面向龍泉青瓷的視覺上釉機(jī)械手系統(tǒng)研究”(Y201636936)
作者簡介:李培遠(yuǎn),男(漢族),浙江蒼南人,助理實(shí)驗(yàn)師,研究方向:CAD/CAM技術(shù)研究與應(yīng)用、3D打印技術(shù)研究與產(chǎn)業(yè)化。
(作者單位:麗水學(xué)院工學(xué)院;浙江省特色文創(chuàng)產(chǎn)品數(shù)字化設(shè)計(jì)與智能制造重點(diǎn)實(shí)驗(yàn)室)