陳圣明
(廣東工業(yè)大學(xué) 機(jī)電工程學(xué)院,廣東 廣州 510006)
任何一個(gè)CAD系統(tǒng)都不可能完全符合用戶的需求,因此工程師有必要對其進(jìn)行專業(yè)化和本地化的二次開發(fā),使CAD系統(tǒng)能更好地符合國標(biāo)、行標(biāo)和企標(biāo)[1]。標(biāo)準(zhǔn)件庫的參數(shù)化自動(dòng)建模系統(tǒng)是CAD系統(tǒng)二次開發(fā)的典型應(yīng)用,任何一個(gè)機(jī)械產(chǎn)品都需要許多諸如螺栓、螺釘、軸承之類的通用標(biāo)準(zhǔn)件,因此可以基于企業(yè)所用的CAD系統(tǒng),對這些標(biāo)準(zhǔn)件進(jìn)行參數(shù)化二次開發(fā),建立其自動(dòng)建模系統(tǒng)以減少重復(fù)勞動(dòng),進(jìn)而提高產(chǎn)品設(shè)計(jì)效率。本文闡述了基于Solid Works的通用標(biāo)準(zhǔn)件庫參數(shù)化建模系統(tǒng)的開發(fā)與應(yīng)用。
本系統(tǒng)要實(shí)現(xiàn)的功能是在Solid Works環(huán)境下,結(jié)合Toolbox的基礎(chǔ)性資源實(shí)現(xiàn)標(biāo)準(zhǔn)件的自動(dòng)化和系列化建模,給工程師提供一種直觀、簡便的標(biāo)準(zhǔn)件快速建模方法。目前,常用的方式是:CAD供應(yīng)商對用戶提供開放的可擴(kuò)性接口(Application Programming Interface,API),設(shè)計(jì)人員采用可支持COM編程的開發(fā)工具,如VB、VC++、C#、Delphi等對其進(jìn)行相關(guān)接口函數(shù)調(diào)用,通過這些函數(shù)來驅(qū)動(dòng)CAD系統(tǒng)自動(dòng)完成所需模型的建立[2]。
公司所使用的CAD平臺(tái)是Solid Works。它提供了支持二次開發(fā)的應(yīng)用程序接口,通過該接口可以開發(fā)嵌入式功能插件(*.dll)或獨(dú)立的應(yīng)用程序(*.exe)以擴(kuò)充原Solid Works的功能,最終形成用戶定制或用戶驅(qū)動(dòng)的參數(shù)化系統(tǒng)。開發(fā)工具我們選擇VB.NET,開發(fā)環(huán)境為Visual Studio 2010,它擁有完善的圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)系統(tǒng)(RAD),可以輕易的使用ADO.NET(Active Data Objects)連接和訪問數(shù)據(jù)庫,因而完全能夠滿足本參數(shù)化系統(tǒng)的開發(fā)。
我們的設(shè)計(jì)思路是以面向?qū)ο蟮腣B.NET為開發(fā)工具,基于Access建立標(biāo)準(zhǔn)件尺寸參數(shù)數(shù)據(jù)庫,通過編程調(diào)用Solid Works API相關(guān)對象、屬性和方法,結(jié)合ADO.NET數(shù)據(jù)庫訪問技術(shù)實(shí)現(xiàn)系統(tǒng)參數(shù)化建模功能。
CAD系統(tǒng)實(shí)現(xiàn)參數(shù)化的關(guān)鍵在于模型庫的建立與尺寸驅(qū)動(dòng)技術(shù)[3]。因此,首先得對需要參數(shù)化的標(biāo)準(zhǔn)件進(jìn)行三維建模,獲得標(biāo)準(zhǔn)件模型庫。將這些源模型作為尺寸驅(qū)動(dòng)模板,當(dāng)程序運(yùn)行的時(shí)候,根據(jù)用戶的選擇,更新模板文件即可自動(dòng)建立所需零件的3D模型。在編程實(shí)現(xiàn)階段,采用的是特征參數(shù)法和編程法相結(jié)合的方式,通過繪制模板文件先獲得宏錄制代碼,然后將代碼中的特征尺寸進(jìn)行常量變量化,再將這些變量傳遞給API函數(shù)。這樣做的優(yōu)點(diǎn)是最大限度的將設(shè)計(jì)人員從眾多的Solid Works API函數(shù)中解放出來,設(shè)計(jì)人員只需稍加修改相關(guān)API的參數(shù),刪減宏錄制代碼中一些無用代碼即可。至于程序調(diào)用模式,我們選擇將所編輯的程序以.exe格式保存,并將其添加至Solid Works的宏工具欄中以方便工程師調(diào)用。系統(tǒng)運(yùn)作流程如圖1所示。
圖1 系統(tǒng)運(yùn)作流程
標(biāo)準(zhǔn)件包括螺栓、螺釘、軸承等大類,每個(gè)大類包括不同的型號,每個(gè)型號又包括不同的尺寸系列。通過對系統(tǒng)設(shè)計(jì)理論和應(yīng)用方面的分析,我們確定了系統(tǒng)開發(fā)的決定性要素:
(1)需要建立完善的標(biāo)準(zhǔn)件模型庫。可利用Toolbox自帶的標(biāo)準(zhǔn)庫模型文件,在Solid W-orks安裝目錄的“SOLIDWORKS DATArowser”文件夾下,找到標(biāo)準(zhǔn)件模型,我們只需將相應(yīng)的模型修改為中文名稱。
(2)明確各類標(biāo)準(zhǔn)件下不同型號的特征尺寸,建立尺寸參數(shù)數(shù)據(jù)表。
(3)設(shè)計(jì)友好的人機(jī)交互界面,添加響應(yīng)功能函數(shù)并建立數(shù)據(jù)庫訪問機(jī)制實(shí)現(xiàn)系統(tǒng)功能。界面中提供參數(shù)輸入接口,程序接受各種參數(shù),按用戶設(shè)計(jì)意圖重建模型。
(4)編寫完程序之后,需要進(jìn)行反復(fù)測試以保證程序的正確性與建模的精確性。
基于Solid Works平臺(tái)二次開發(fā)的自動(dòng)建模關(guān)鍵在于三個(gè)方面:Solid Works API、VB.NET編程和數(shù)據(jù)庫技術(shù)。
(1)Solid Works API:它包括了數(shù)以百計(jì)的Solid Works內(nèi)部功能函數(shù),設(shè)計(jì)人員可以編寫程序調(diào)用這些功能函數(shù),來實(shí)現(xiàn)所需要的功能。
(2)VB.NET:(VB.NET 嵌入在 VS2010 環(huán)境下)作為本系統(tǒng)的開發(fā)工具,通過我們編寫的代碼操縱相關(guān)Solid Works API對象,控制其屬性并調(diào)用相關(guān)方法實(shí)現(xiàn)系統(tǒng)參數(shù)化自動(dòng)建模的要求。
(3)數(shù)據(jù)庫訪問技術(shù):采用ADO.NET技術(shù),它是一種和編程語言無關(guān)的COM組件系統(tǒng),提供了訪問各種數(shù)據(jù)類型的連接機(jī)制,通過其內(nèi)部的屬性和方法提供統(tǒng)一的數(shù)據(jù)訪問接口[3]。通過它我們可以訪問由Access建立的尺寸參數(shù)數(shù)據(jù)表,進(jìn)而通過程序調(diào)用其中的數(shù)據(jù)來完成零件的參數(shù)驅(qū)動(dòng),實(shí)現(xiàn)自動(dòng)建模功能。
機(jī)械標(biāo)準(zhǔn)件可按層次分為標(biāo)準(zhǔn)、類型、子類型和零件[4]。以軸承為例,我們所面向的標(biāo)準(zhǔn)是GB和JB,軸承的類型包含深溝球軸承、圓柱滾子軸承等子類型,而這些子類型又分別包含不同規(guī)格、不同尺寸系列。由于同一子類型的零件結(jié)構(gòu)和拓?fù)潢P(guān)系是相同的,它們的區(qū)別僅僅在于驅(qū)動(dòng)尺寸的不同。因此整體標(biāo)準(zhǔn)件庫的開發(fā)可針對不同類型不同型號的標(biāo)準(zhǔn)件進(jìn)行尺寸驅(qū)動(dòng)建模。系統(tǒng)開發(fā)的具體流程如下:①建立子類型的模板文件(*.prtdot);②建立驅(qū)動(dòng)尺寸數(shù)據(jù)表(*.mdb);③編輯該子類型建模代碼,實(shí)現(xiàn)尺寸驅(qū)動(dòng);④重復(fù)步驟1,2,3,完成其余類型;⑤系統(tǒng)整合在VS2010環(huán)境中,由VB.NET實(shí)現(xiàn)。
以下以深溝球軸承為例,詳細(xì)介紹VB.NET對Solid Works進(jìn)行常用標(biāo)準(zhǔn)件參數(shù)化二次開發(fā)的具體流程和實(shí)現(xiàn)方法,其余型號和類型的標(biāo)準(zhǔn)件采用完全類似的方法即可實(shí)現(xiàn),最終完成標(biāo)準(zhǔn)件庫參數(shù)化系統(tǒng)的構(gòu)建。
查閱國標(biāo),以尺寸系列代號16001的深溝球軸承為例按照正確尺寸約束和設(shè)計(jì)意圖在Solid Works中建立三維模型。將其作為模板文件,此型號的深溝球軸承標(biāo)準(zhǔn)件庫的所有模型均基于此模板文件創(chuàng)建、修改和編輯。這里要完成的是:
(1)明確從動(dòng)尺寸與驅(qū)動(dòng)尺寸。深溝球軸承的造型由外圈外徑DD、內(nèi)圈內(nèi)徑d、軸承寬度B和倒圓角半徑rs這四個(gè)參數(shù)唯一確定。因此,可選擇這四個(gè)參數(shù)作為驅(qū)動(dòng)尺寸,剩下的一些建模時(shí)的定位尺寸作為從動(dòng)尺寸。如圖2所示,尺寸前有∑表示從動(dòng)尺寸,沒有∑表示驅(qū)動(dòng)尺寸。
圖2 主動(dòng)尺寸和從動(dòng)尺寸
(2)定義關(guān)聯(lián)關(guān)系。為利于編寫代碼與建立尺寸數(shù)據(jù)表實(shí)現(xiàn)對模型尺寸的賦值與重建,首先對驅(qū)動(dòng)尺寸重命名,如上例中的DD、d、rs、B。此外,在繪圖過程中有一些尺寸大小是相同的,而Solid Works系統(tǒng)自身不允許有相同尺寸名稱,所以為了使相同的尺寸在名稱不同的情況下具有同時(shí)更改的性能,需要定義尺寸間的關(guān)聯(lián)關(guān)系。再者,要實(shí)現(xiàn)參數(shù)化實(shí)體造型,必須滿足全尺寸約束與數(shù)據(jù)全相關(guān)這兩個(gè)基本條件。因此,我們可以在Solid Works菜單欄,單擊“工具”/“方程式”,添加從動(dòng)尺寸和驅(qū)動(dòng)尺寸之間的關(guān)聯(lián)關(guān)系式。關(guān)系表如圖3所示。
圖3 尺寸方程式
采用Microsoft Access2010建立驅(qū)動(dòng)尺寸數(shù)據(jù)表。首先要明確數(shù)據(jù)表的字段,根據(jù)上一步的內(nèi)容可以知道深溝球軸承的造型由外圈外徑DD、內(nèi)圈內(nèi)徑d、軸承寬度B和倒圓角rs這4個(gè)參數(shù)唯一確定。因此,數(shù)據(jù)表的字段只需用這4個(gè)參數(shù)即可。查閱國標(biāo)(GB/T276-1994)建立它的尺寸數(shù)據(jù)表如圖4所示。每一種標(biāo)準(zhǔn)件的子類型需要對應(yīng)一張數(shù)據(jù)表,建立過程完全與此相類似,整體標(biāo)準(zhǔn)件庫的數(shù)據(jù)表整合在“gb.mdb”。
圖4 尺寸數(shù)據(jù)表
完成以上步驟后,即可在VS2010環(huán)境下設(shè)計(jì)系統(tǒng)的界面,按照系統(tǒng)功能需求,我們選擇Tree View、Data Grid View、Tool Strip、Splitter、Panel控件,分別設(shè)計(jì)相應(yīng)的屬性并進(jìn)行合理的布局,具體界面見3.4節(jié)。
需要編寫的代碼包括數(shù)據(jù)處理與自動(dòng)建模兩部分,下面分別對其進(jìn)行介紹:
(1)數(shù)據(jù)處理:核心是用戶數(shù)據(jù)顯示、查詢。根據(jù)第一部分內(nèi)容所述,我們選擇的是ADO.NET技術(shù)訪問Access數(shù)據(jù)庫,它通過相關(guān)對象的屬性、方法完成相應(yīng)的數(shù)據(jù)庫操作。一般而言,ADO.NET處理數(shù)據(jù)庫的步驟:a.創(chuàng)建數(shù)據(jù)庫連接對象;b.使用連接對象打開數(shù)據(jù)庫;c.使用命令對象操作數(shù)據(jù)庫;d.關(guān)閉數(shù)據(jù)庫[5]。數(shù)據(jù)的顯示相對簡單,運(yùn)用Tree View和Data Grid View控件,對其進(jìn)行相應(yīng)屬性設(shè)置與代碼編輯即能輕松實(shí)現(xiàn)。
數(shù)據(jù)查詢是方便用戶在種類繁多的標(biāo)準(zhǔn)件中快速找到所需的種類或型號。它的算法如下:當(dāng)用戶輸入標(biāo)準(zhǔn)件的名稱或代號后,點(diǎn)擊查詢按鈕,系統(tǒng)自動(dòng)查詢Tree View控件中節(jié)點(diǎn)數(shù)據(jù)。
(2)數(shù)據(jù)的傳遞與自動(dòng)建模
通過在程序界面中Text控件與用戶進(jìn)行人機(jī)交互,用戶在數(shù)據(jù)表中選中某行或某行的一個(gè)單元后,Text控件組自動(dòng)顯示被選中行的各個(gè)參數(shù),然后編寫相應(yīng)程序?qū)ext控件組的Text屬性值作為API函數(shù)的參數(shù),這樣既可實(shí)現(xiàn)尺寸驅(qū)動(dòng)完成自動(dòng)建模又能保證數(shù)據(jù)庫和建模代碼之間相對獨(dú)立。
自動(dòng)建模部分的代碼(節(jié)選):
Dim PartAs Object
Dim SelMgrAs Object
Dim boolstatus As Boolean
Dim Feature As Object’ 定義對象
SetswApp=CreateObject("SldWorks.App
lication")
Set Part=swApp.NewDocument("E:標(biāo)準(zhǔn)件模板earings gb.SLDPRT",0,0,0)’打開標(biāo)準(zhǔn)件模板
SetPart=swApp.ActiveDoc
Set SelMgr=Part.SelectionManager
Boolstatus=Part.Extension.SelectByID2("d@Sketch2@bearings gb.SLDPRT","DIMENSION",0,0,0,True,0,Nothing,0)’根據(jù)打開的標(biāo)準(zhǔn)件模板,對特征尺寸重新賦值
Part.Parameter("d@Sketch2").SystemValue=Val(d.Text)/1000
……
boolstatus=Part.Extension.SelectByID2("r@Fillet1@bearingsgb.SLDPRT","DIMENSION",0,0,0,True,0,Nothing,0)
Part.Parameter("r@Fillet1").SystemValue=Val(r.Text)/1000
boolstatus=Part.EditRebuild3’重建特征建立模型
End Sub
最終的標(biāo)準(zhǔn)件庫參數(shù)化原型系統(tǒng)如圖5所示。運(yùn)行時(shí),在程序界面左側(cè)檢索到需要的標(biāo)準(zhǔn)件,在彈出的窗口中選擇需要的型號和尺寸系列,即可自動(dòng)生成所需的模型。
圖5 系統(tǒng)最終界面
通過對參數(shù)化系統(tǒng)的設(shè)計(jì)方案分析和二次開發(fā)具體工作的研究與實(shí)踐,本文從理論和實(shí)例兩個(gè)方面詳細(xì)討論了基于Solid Works的標(biāo)準(zhǔn)件庫自動(dòng)化建模技術(shù),開發(fā)了在Solid Works環(huán)境下通用標(biāo)準(zhǔn)件庫參數(shù)化建模系統(tǒng),并以深溝球軸承為例,詳細(xì)說明了建立參數(shù)化建模系統(tǒng)的具體設(shè)計(jì)流程和實(shí)現(xiàn)方法。整個(gè)原型系統(tǒng)的設(shè)計(jì)與開發(fā),經(jīng)企業(yè)測試可快速、穩(wěn)定地實(shí)現(xiàn)標(biāo)準(zhǔn)件的自動(dòng)化建模,對基于Solid Works進(jìn)行標(biāo)準(zhǔn)件庫、非標(biāo)件庫或產(chǎn)品參數(shù)化二次開發(fā)的用戶具有一定的借鑒作用。
[1] 彭龑,李淇陽.基于Solid Works二次開發(fā)的自動(dòng)建模技術(shù)與方法[J].制造業(yè)信息化.
[2] 劉慶立,曹巨江,姚素芬等.基于Solid Works二次打開技術(shù)[J].煤礦機(jī)械,2009,30(8):202-204.
[3] 肖麗雯等.參數(shù)化圖庫建立工具的開發(fā)與應(yīng)用[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2001,14(5):444-448.
[4] 劉萍萍.面向企業(yè)應(yīng)用的Solid Works軟件開發(fā)[D].南京理工大學(xué),2004.
[5] 高春艷,李艷,谷偉東編著.Visual Basic數(shù)據(jù)庫開發(fā)關(guān)鍵技術(shù)與實(shí)例應(yīng)用[M].北京:人民郵電出版社,20.