王 宣,代曉波,董玉德
(1.合肥工業(yè)大學(xué) 數(shù)字化設(shè)計(jì)與研究中心,安徽 合肥230000;2.阜陽職業(yè)技術(shù)學(xué)院 工程科技學(xué)院,安徽 阜陽236031)
我國的陶瓷墻地磚模具制造業(yè)已經(jīng)發(fā)展成為規(guī)模型產(chǎn)業(yè)[1],但項(xiàng)目調(diào)研發(fā)現(xiàn),模具的設(shè)計(jì)普遍沿用二維CAD軟件,不能充分滿足當(dāng)前模具設(shè)計(jì)系列化、快速化的市場需求.基于三維CAD軟件的模具參數(shù)化設(shè)計(jì)系統(tǒng),將會減少設(shè)計(jì)人員的重復(fù)性工作,提高設(shè)計(jì)效率,是模具行業(yè)提高設(shè)計(jì)手段的發(fā)展趨勢.
SolidWorks作為目前主流三維CAD軟件之一,不僅具有功能強(qiáng)大、易學(xué)易用和技術(shù)創(chuàng)新的特色,而且SolidWorks還提供了開發(fā)性和兼容性良好的應(yīng)用程序開發(fā)接口 (SolidWorks API),凡是支持OLE和COM的編程語言如Visual C++、Visual Basic、Delphi等均可用于SolidWorks的二次開發(fā)[2].VC++6.0是當(dāng)今流行的軟件開發(fā)工具之一,是程序員的首選編程利器[3].使用VC++6.0對SolidWorks進(jìn)行二次開發(fā),能夠充分利用SolidWorks API,而且開發(fā)出的DLL應(yīng)用程序作為插件直接嵌入到SolidWorks內(nèi)部,加載成功后專用系統(tǒng)菜單直接出現(xiàn)在SolidWorks主菜單上,如SolidWorks原有菜單一樣操作方便,極大地提高了設(shè)計(jì)效率,但使用VC++進(jìn)行二次開發(fā)對開發(fā)人員的要求較高.目前,對金屬和塑料模具二次開發(fā)的研究已有不少先例,如姚敏敏等人利用Visual Basic開發(fā)了基于SolidWorks的精沖模設(shè)計(jì)系統(tǒng)[4];李凱嶺等人在Visual Basic環(huán)境下開發(fā)了一個基于SolidWorks的智能注塑模具CAD系統(tǒng)[5]等,而采用VC++二次開發(fā)陶瓷模具專用系統(tǒng)的研究卻較少.因此,根據(jù)模具市場需求,本文研究用VC++6.0基于SolidWorks二次開發(fā)的陶瓷墻地磚模具參數(shù)化設(shè)計(jì)系統(tǒng),具有重要的現(xiàn)實(shí)意義.
在SolidWorks中,由二次開發(fā)實(shí)現(xiàn)的零件參數(shù)化設(shè)計(jì)方法主要是尺寸驅(qū)動法和程序驅(qū)動法[6].尺寸驅(qū)動法需要先建立零件模板再通過程序生成新零件,而程序驅(qū)動法不需要建立零件模板就可以通過程序驅(qū)動生成新零件.尺寸驅(qū)動法程序代碼簡潔高效,是目前參數(shù)化設(shè)計(jì)較常用的方法,選用此方法作為陶瓷墻地磚模具的參數(shù)化設(shè)計(jì),其設(shè)計(jì)流程如圖1所示.實(shí)現(xiàn)這種參數(shù)化設(shè)計(jì)的關(guān)鍵技術(shù)是SolidWorks API、ATL技術(shù)、參數(shù)化建模技術(shù)、數(shù)據(jù)庫建立與訪問技術(shù).
SolidWorks通過OLE(Object Linking and Embedding,對象鏈接與嵌套)技術(shù)為用戶提供了強(qiáng)大的應(yīng)用程序開發(fā)接口API.在SolidWorks API內(nèi)封裝了大量的采用COM(Component Object Model,組件對象模型)技術(shù)構(gòu)造的接口對象,每個接口對象都是由接口、屬性、方法與事件組成[3].在進(jìn)行SolidWorks二次開發(fā)時,需要先得到SolidWorks API對象的接口,然后才能使用對象的方法和屬性.這些對象呈樹狀層次結(jié)構(gòu)分布,位于頂端的SolidWorks對象是所有其它接口對象的父類,如果想要訪問某一對象,必須先從SolidWorks對象對其子對象進(jìn)行遍歷,直到找到該對象[3].
接口對象的方法或?qū)傩跃褪茿PI函數(shù),這些API函數(shù)可被Visual C++、Visual Basic、Delphi等編程工具調(diào)用,使得開發(fā)出的程序具有直接訪問SolidWorks的能力.用戶通過對這些對象屬性的設(shè)置和方法的調(diào)用,就可以在自己開發(fā)的程序中對SolidWorks進(jìn)行各種操作,完成零件草圖的繪制和修改,零件各種特征的建立和修改,零件的特征信息、裝配信息及工程圖紙信息的提取等.
圖1 零件參數(shù)化設(shè)計(jì)流程圖
微軟公司推出的COM開發(fā)工具ATL實(shí)質(zhì)上是一套C++模板庫,它采用特定的基本實(shí)現(xiàn)技術(shù)(包括COM技術(shù)、C++模板類技術(shù)及C++多重繼承技術(shù)等).由于其擺脫了大量冗余代碼,開發(fā)出來的COM應(yīng)用程序代碼簡潔高效,因而迅速成為開發(fā)COM組件的得力工具.從SolidWorks2006版本開始,在該軟件提供的二次開發(fā)向?qū)е校琕isual C++6.0平臺上的向?qū)Ь褪腔贏TL技術(shù)構(gòu)造的[7].
使用ATL開發(fā)一個COM組件一般有以下幾個步驟[8]:(1)創(chuàng)建一個新的ATL工程.(2)向工程添加新的ATL對象.(3)根據(jù)COM應(yīng)用要求向新的ATL對象添加接口.(4)完成代碼編寫,編譯鏈接工程,注冊COM組件.
參數(shù)化建模是以約束來表達(dá)產(chǎn)品模型的形狀特征,通過定義一組參數(shù)控制設(shè)計(jì)結(jié)果,實(shí)現(xiàn)通過調(diào)整參數(shù)修改設(shè)計(jì)模型的目的,從而設(shè)計(jì)一簇在形狀或功能上具有相似性特征的零件設(shè)計(jì)方案.目前,參數(shù)化建模可分為基于尺寸驅(qū)動的參數(shù)化建模,基于約束驅(qū)動的參數(shù)化建模,基于特征的參數(shù)化建模3種方法[9].基于尺寸驅(qū)動的參數(shù)化建模,是指通過修改模型的幾何尺寸,達(dá)到改變模型形狀的目的,它是目前最基本的、應(yīng)用最為廣泛的建模方法,本文模具零件模板就是采用這種三維建模方法的.零件模板參數(shù)化建模時,應(yīng)注意:(1)合理設(shè)計(jì)建模思路,使實(shí)體模型生成的驅(qū)動尺寸為參數(shù)尺寸.(2)滿足草圖全約束,保證尺寸驅(qū)動模型重建的可靠性.(3)對于與參數(shù)尺寸有數(shù)學(xué)關(guān)系的其它模型尺寸,利用So1idWorks的方程式功能,建立以參數(shù)尺寸為自變量的關(guān)系式使之關(guān)聯(lián).
為了方便快捷地通過參數(shù)化設(shè)計(jì)生成相似零件,需要將參數(shù)數(shù)據(jù)存儲在數(shù)據(jù)庫中,目前可供選擇的數(shù)據(jù)庫很多.其中Access簡單易用,接口靈活,完全滿足零件參數(shù)化設(shè)計(jì)對數(shù)據(jù)管理的要求,因此常選用Access作為管理數(shù)據(jù)的工具,本文采用Access建立尺寸參數(shù)數(shù)據(jù)庫.
對數(shù)據(jù)庫的訪問就是通過建立與數(shù)據(jù)源的數(shù)據(jù)通道,利用此通道實(shí)現(xiàn)人機(jī)交互,完成對數(shù)據(jù)庫的查詢、修改等操作.VC++提供了多種數(shù)據(jù)庫訪問技術(shù),如ODBC、DAO、OLE DB、ADO等.考慮ADO功能強(qiáng)大,編程簡潔高效,本實(shí)例使用ADO訪問數(shù)據(jù)庫.ADO包含了3個獨(dú)立對象和4個非獨(dú)立對象,其中獨(dú)立對象Connection(連接對象)代表與數(shù)據(jù)源的連接,是ADO對象模型的基礎(chǔ);獨(dú)立對象Recordset(記錄集對象)用于建立記錄集,并負(fù)責(zé)處理記錄集中的數(shù)據(jù),是ADO對象模型的核心;獨(dú)立對象Command(命令對象)主要用于查詢數(shù)據(jù)庫,并返回記錄集對象中的記錄[10].
陶瓷墻地磚模具是一種生產(chǎn)一定形狀和尺寸要求的陶瓷墻地磚坯的模具[11].陶瓷墻地磚坯品種變化多樣,為了滿足不同生產(chǎn)廠家的需求,模具企業(yè)需要不斷改變設(shè)計(jì),快速生產(chǎn)出不同系列不同規(guī)格的模具.圖2所示為本項(xiàng)目開發(fā)的YP系列模具參數(shù)化設(shè)計(jì)系統(tǒng)主界面,從左側(cè)樹形圖中可知,底板是模具的基礎(chǔ)零件,盡管模具系列相同,但底板尺寸規(guī)格多達(dá)近十種.底板零件的參數(shù)化設(shè)計(jì),可明顯提高設(shè)計(jì)效率.下面就以底板為例,詳細(xì)說明零件參數(shù)化設(shè)計(jì)實(shí)現(xiàn)過程.
在So1idWorks中建立零件模板的三維模型時,最好重命名模型驅(qū)動尺寸使之與參數(shù)尺寸名稱一致,便于程序識別.本文以“底板.SLDPRT"保存在“D:\模具參數(shù)化設(shè)計(jì)\模板模型\”為底板模型,以備調(diào)用.
在Access中創(chuàng)建“YP4000-800-800-1W.mdb”數(shù)據(jù)庫,在庫中建立底板尺寸參數(shù)數(shù)據(jù)表等關(guān)聯(lián)表,如圖3所示,保存路徑為“D:\模具參數(shù)化設(shè)計(jì)\數(shù)據(jù)庫\YP系列\YP4000-800-800-1W.mdb”.
(1)創(chuàng)建新的ATL工程并添加ATL對象 在Visual C++6.0環(huán)境中,使用ATL COM AppWizard對象向?qū)ЫLL工程,自定義名稱為mold,然后在工程中添加新的ATL對象mpd,向?qū)ё詣由山涌贗mpd,該接口是所開發(fā)的模具參數(shù)化設(shè)計(jì)系統(tǒng)插件與SolidWorks的通信接口,接下來通過添加代碼實(shí)現(xiàn)本插件所要具備的功能.
(2)添加菜單和菜單項(xiàng) 在工程資源的String Table(字串表)中定制菜單資源,在IDS-MOLD-message-ITEM欄中添加顯示內(nèi)容:YP系列模具@模具參數(shù)化設(shè)計(jì),其中“模具參數(shù)化設(shè)計(jì)”是添加到So1idWorks界面的菜單名稱,“YP系列模具”是該下拉菜單的菜單項(xiàng),在IDS-MOLD-message-METHOD欄中添加顯示方法,效果如圖2所示.
圖2 模具參數(shù)化設(shè)計(jì)系統(tǒng)主界面圖
圖3 數(shù)據(jù)庫部分關(guān)聯(lián)表展示圖
(3)創(chuàng)建用戶操作界面 首先用對話框資源編輯器創(chuàng)建底板對話框模板資源.然后利用類向?qū)lass Wizard添加對話框類dbandlg,并向?qū)υ捒蝾愄砑酉⑻幚砗瘮?shù)、成員變量等,向?qū)ё詣由稍搶υ捒蝾惖膁bandlg.h和dbandlg.cpp文件.最后聲明對話框類的對象以便激活對話框,添加的主要代碼如下:
(4)訪問數(shù)據(jù)庫 將已建立的底板尺寸參數(shù)數(shù)據(jù)表載入底板操作界面的列表框中,主要實(shí)現(xiàn)步驟是:①在工程的StdAfx.h文件里引入ADO庫文件,添加代碼如下:#import"C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"no-namespace rename("EOF","adoEOF")rename("Parameter","adoParameter")msado15.dll動態(tài)鏈接庫中定義了ADO接口對象.②連接數(shù)據(jù)庫獲取數(shù)據(jù)表.一般使用函數(shù)open或使用UDL文件連接數(shù)據(jù)庫.采用UDL文件的方便之處是,當(dāng)數(shù)據(jù)源改變后,只需雙擊相應(yīng)的UDI文件打開屬性對話框重置數(shù)據(jù)源即可,不用更改軟件編制的程序.實(shí)例選用了此方法,建立了TCCSH.udl文件.在dbandlg.h和dbandlg.cpp文件中添加的主要代碼是:
(5)參數(shù)尺寸驅(qū)動模板模型改變,生成新零件 ①將底板操作界面列表框內(nèi)的一行數(shù)據(jù),賦值給對話框中的編輯框,獲得驅(qū)動尺寸參數(shù),如圖4所示.
圖4 底板操作界面圖
主要代碼:
在SolidWorks中,通過點(diǎn)擊菜單“工具/插件”,打開插件對話框,選擇mold插件完成加載;也可點(diǎn)擊菜單“文件/打開”,選擇文件類型Add-Ins,打開mold.dll文件實(shí)現(xiàn)加載.
圖5 底板三維模型圖
打開SolidWorks菜單欄里“模具參數(shù)化設(shè)計(jì)”下拉菜單,選擇“YP系列模具”選項(xiàng),打開系統(tǒng)主界面,雙擊主界面樹形圖中“底板”選項(xiàng),彈出“底板”操作界面,雙擊列表框中“圖號”是“YP4881DB-2”的一行數(shù)據(jù),編輯框內(nèi)出現(xiàn)相應(yīng)尺寸參數(shù),也可手動輸入尺寸參數(shù),然后單擊“三維模型”按鈕,生成新的底板三維模型,如圖5所示.
以SolidWorks為平臺,運(yùn)用VC++6.0二次開發(fā)工具,開發(fā)陶瓷墻地磚模具參數(shù)化設(shè)計(jì)系統(tǒng),實(shí)現(xiàn)相似零件的快速設(shè)計(jì),有利于滿足模具產(chǎn)品系列化、快速化的設(shè)計(jì)需求.同時零件的參數(shù)化設(shè)計(jì)方法,對其他品種規(guī)格多樣的零件實(shí)現(xiàn)企業(yè)標(biāo)準(zhǔn)化設(shè)計(jì)具有一定的參考價值,達(dá)到減少零件種類、縮短設(shè)計(jì)周期、減少工藝裝備、降低生產(chǎn)成本、提高企業(yè)經(jīng)濟(jì)效益的目的.
[1]姚德良,呂暉.陶瓷墻地磚模具制造業(yè)現(xiàn)狀、問題及建議[J].陶瓷,1996(4):3-5.
[2]董玉德,趙韓.CAD二次開發(fā)理論與技術(shù)[M].合肥:合肥工業(yè)大學(xué)出版社,2009:7-11.
[3]王文波,涂海寧,熊君星.SolidWorks2008二次開發(fā)基礎(chǔ)與實(shí)例(VC++)[M].北京:清華大學(xué)出版社,2009:4-12.
[4]姚敏敏,陳昊哲,許樹勤.基于SolidWorks二次開發(fā)的精沖模設(shè)計(jì)系統(tǒng)[J].液壓裝備與制造技術(shù),2009(1):93-95.
[5]李凱嶺,孫乃坤,朱連富,等.基于SolidWorks的注塑模具CAD系統(tǒng)[J].山東大學(xué)學(xué)報(bào),2004,34(2):22-26.
[6]王東,蒲小瓊.基于SolidWorks的機(jī)械零件參數(shù)化設(shè)計(jì)[J].機(jī)械制造與研究,2004,33(5):15-17.
[7]陳岳坪,高健.基于 ATL技術(shù)的SolidWorks二次開發(fā)新方法[J].模具工業(yè),2009,35(6):5-7.
[8]王影.VC++中訪問COM 組件的五種方法[J].計(jì)算機(jī)時代,2005(12):69-71.
[9]陳璐.基于SolidWorks的參數(shù)化建模[J].CAD/CAM 與制造業(yè)信息化,2007(2-3):72-73.
[10]李明星.起重機(jī)運(yùn)行機(jī)構(gòu)三維參數(shù)化系統(tǒng)的設(shè)計(jì)與研究[D].太原:太原科技大學(xué),2012:21-25.
[11]向衛(wèi)兵,王剛.陶瓷墻地磚模具類型與分析[J].佛山陶瓷,2008(3):29-32.