張小鵬,王洪申,王學(xué)豐
(1. 蘭州理工大學(xué) 機(jī)電工程學(xué)院,甘肅 蘭州 730050; 2. 維都利閥門(mén)有限公司,浙江 溫州 325024)
SolidWorks是一款基于windows的三維CAD軟件,因其具有操作簡(jiǎn)單、易學(xué)易用的特點(diǎn)而廣泛運(yùn)用于各行各業(yè)[1]。閥門(mén)是工業(yè)生產(chǎn)中不可缺少的流體設(shè)備之一。球閥被廣泛應(yīng)用在石油煉制、長(zhǎng)輸管線(xiàn)、化工、造紙、制藥等行業(yè)。在國(guó)家標(biāo)準(zhǔn)中定義球閥為閥桿帶動(dòng)球體、球體繞球閥軸線(xiàn)作旋轉(zhuǎn)運(yùn)動(dòng)的一類(lèi)閥門(mén)[2]。球閥形狀特點(diǎn)是結(jié)構(gòu)相對(duì)固定,同類(lèi)球閥拓?fù)浣Y(jié)構(gòu)具有高度一致性,產(chǎn)品型號(hào)具有系列化特征,是進(jìn)行參數(shù)化設(shè)計(jì)的理想對(duì)象。通過(guò)二次開(kāi)發(fā)三維軟件的方法將同一型號(hào)的閥門(mén)參數(shù)歸納、整理,并通過(guò)可視化窗口統(tǒng)一輸入,自動(dòng)生成三維模型,可提高閥門(mén)的設(shè)計(jì)效率,降低開(kāi)發(fā)成本,縮短新產(chǎn)品的開(kāi)發(fā)周期。
球閥是帶有圓形通道的啟閉件,通過(guò)手柄繞垂直于通道的軸線(xiàn)旋轉(zhuǎn),球體隨著閥桿的轉(zhuǎn)動(dòng)從而達(dá)到啟閉通道的作用[3]。設(shè)計(jì)時(shí),閥體的流道孔中心與球體(啟閉作用)流道中心對(duì)準(zhǔn)時(shí)為全開(kāi)狀態(tài),通過(guò)閥桿傳力將球體繞轉(zhuǎn)軸轉(zhuǎn)動(dòng)90°時(shí),球閥將處于完全關(guān)閉狀態(tài),如圖1所示。球閥的結(jié)構(gòu)使得它有以下幾點(diǎn)優(yōu)點(diǎn):
1) 因球閥左右通道相同,故其安裝位置相對(duì)自由,介質(zhì)的流向可以任意給定,流體阻力小;
2) 結(jié)構(gòu)簡(jiǎn)單,密封性能良好且容易維修;
3) 球閥適用于經(jīng)常操作、啟閉迅速方便的場(chǎng)合,適用范圍廣。

圖1 球閥工程圖
SolidWorks的應(yīng)用程序接口(application program interface,API)是一個(gè)基于對(duì)象的嵌入與鏈接(object linking and embedding, OLE)或組件對(duì)象模型(component object model, COM)的編程接口[4]。目前對(duì)于SolidWorks的二次開(kāi)發(fā)大概分為兩種,SolidWorks內(nèi)置宏和微軟的Visual Studio(支持VB.NET、C#、C++)。SolidWorks API是一個(gè)多層次的自上而下的樹(shù)形網(wǎng)絡(luò)結(jié)構(gòu),如圖2所示。因此,對(duì)于SolidWorks類(lèi)對(duì)象的訪問(wèn)也是通過(guò)自上而下訪問(wèn)的方法。SldWorks是根目錄對(duì)象類(lèi),位于應(yīng)用程序的底層,是訪問(wèn)SolidWorks API所有對(duì)象的入口[5]。本文使用SolidWorks-API-SDK 2016提供的接口,通過(guò)Microsoft Visual Studio 2010進(jìn)行二次開(kāi)發(fā)。

圖2 SolidWorks API接口對(duì)象
基于SolidWorks的二次開(kāi)發(fā)思路有兩種,一種是完全程序化參數(shù)建模,這種方法是一種自下而上的建模方法,由最底層的點(diǎn)、線(xiàn)、面構(gòu)成圖形,該方法的缺陷是若零件較為復(fù)雜,則編程量太大,且專(zhuān)業(yè)要求較高。另一種方法是在三維模型的基礎(chǔ)上驅(qū)動(dòng)尺寸,這種方法是一種自上而下的建模方法,即在保證零件結(jié)構(gòu)不發(fā)生變化的情況下,建立好零件模板,運(yùn)行時(shí)只需指定尺寸值,由尺寸自動(dòng)定位到相應(yīng)的尺寸變量。該方法的優(yōu)點(diǎn)是編程量少,特征間約束由模型自動(dòng)產(chǎn)生,采用這種方法可以利用SolidWorks自身的參數(shù)化及編程技術(shù)優(yōu)勢(shì),因此所需編寫(xiě)的程序代碼相對(duì)簡(jiǎn)單[6]。圖3為閥門(mén)參數(shù)化流程。

圖3 閥門(mén)參數(shù)化設(shè)計(jì)流程
作為參數(shù)化設(shè)計(jì)的基礎(chǔ),零件的三維建模顯得尤為重要,建模的方法及順序會(huì)直接影響參數(shù)化設(shè)計(jì)的結(jié)果。為確保參數(shù)化的正確性,在建模過(guò)程中必須要添加合理的約束,以實(shí)現(xiàn)參數(shù)的全約束,包括幾何約束和工程約束。幾何約束分為結(jié)構(gòu)約束和尺寸約束,如長(zhǎng)度、寬度、角度等約束為尺寸約束;如平行、垂直等指幾何元素之間的拓?fù)潢P(guān)系的約束為結(jié)構(gòu)約束[7]。繪制完成后,在特征樹(shù)中右鍵單擊【注解】,選中顯示特征尺寸,并在【立即視圖工具欄區(qū)】選中顯示尺寸名稱(chēng),也可以通過(guò)設(shè)計(jì)需要改變名稱(chēng)。在球閥的設(shè)計(jì)過(guò)程中,涉及的主要參數(shù)包括法蘭尺寸、壁厚、球閥結(jié)構(gòu)長(zhǎng)度等,將這些參數(shù)作為全局變量,如表1所示。

表1 全局參數(shù) 單位:mm
全局變量可以用于驅(qū)動(dòng)尺寸作為唯一的數(shù)值,通過(guò)SolidWorks自帶的方程式功能將參數(shù)之間建立關(guān)聯(lián),在SolidWorks中方程的形式是:因變量=自變量。
例如在方程式“D9@草圖1”=“D8@草圖1” / 2中,系統(tǒng)會(huì)根據(jù)尺寸D8求解尺寸D9,一旦方程式寫(xiě)好并應(yīng)用到模型之后,尺寸D9就不能直接修改,方程式建立完成之后的模型如圖4所示。

圖4 建立模型
在SolidWorks軟件中,配置管理器是SolidWorks中非常獨(dú)特的一部分功能,它提供了簡(jiǎn)便的方法來(lái)開(kāi)發(fā)和管理一組尺寸不同、特征相似的一系列零件。在工具欄【插入】中點(diǎn)擊設(shè)計(jì)表,在彈出的對(duì)話(huà)框中選擇上一步的全局尺寸作為參數(shù)添加到設(shè)計(jì)表中,如圖5所示。

圖5 系列零件表
根據(jù)上述步驟,通過(guò)SolidWorks二次開(kāi)發(fā)接口,對(duì)配置管理進(jìn)行二次開(kāi)發(fā),創(chuàng)建人機(jī)交互對(duì)話(huà)框,輸入?yún)?shù)生成不同尺寸的零件,從而實(shí)現(xiàn)參數(shù)化。
在SolidWorks二次開(kāi)發(fā)過(guò)程中,非模態(tài)對(duì)話(huà)框創(chuàng)建的過(guò)程如下:
1) 插入一個(gè)新的對(duì)話(huà)框,ID默認(rèn)即可;
2) 可以直接雙擊對(duì)話(huà)框空白處或者在右鍵為對(duì)話(huà)框添加類(lèi),在彈出的類(lèi)對(duì)話(huà)框中輸入類(lèi)名(BallDlg),點(diǎn)擊確定;
3) 在工程.cpp文件中添加包含對(duì)話(huà)框頭文件的語(yǔ)句#include “FirstDlg.h”,并添加非模態(tài)對(duì)話(huà)框的初始化代碼:
BallDlg dlg=new BallDlg (AfxGetMainWnd());
4) 將設(shè)計(jì)好的對(duì)話(huà)框與SldWorks對(duì)象聯(lián)系起來(lái),即為對(duì)話(huà)框添加成員函數(shù)。
在BallDlg.h中定義:
voidgetSW(ISldWorks *Sw);
在BallDlg.cpp中聲明:
void BallDlg::getSW(ISldWorks *Sw)
this->ball_iSldWorks_dlg=Sw;
}
添加如圖6所示控件,在資源管理器選項(xiàng)卡bitmap中,將球閥閥體的位圖加入到界面中。為生成三維圖按鈕添加事件處理程序,關(guān)鍵代碼如4.3節(jié)所述。

圖6 球閥參數(shù)輸入界面
UpdateData(TRUE);
CComBSTRfileName(_T("..\ball valve.SLDPRT")); //打開(kāi)文件
CComPtr
VARIANT_BOOL retval=VARIANT_TRUE;
計(jì)劃建設(shè)是執(zhí)行實(shí)施的基礎(chǔ),執(zhí)行實(shí)施是評(píng)價(jià)檢查的前提,評(píng)價(jià)檢查是優(yōu)化改進(jìn)的關(guān)鍵,上一環(huán)是下一環(huán)有序開(kāi)展的先決條件。優(yōu)化改進(jìn)階段是內(nèi)控閉環(huán)建設(shè)的核心和關(guān)鍵點(diǎn),是內(nèi)控閉環(huán)形成的重要環(huán)節(jié)。
m_iSldWorks_dlg->OpenDoc6(fileName,swDocPART,Options,NULL,&Errors,&Warnings,&m_iModelDoc); //打開(kāi)文件
CComPtr
CComPtr
m_iModelDoc->get_ConfigurationManager(&pConfigurationManager); //獲得配置名
CString a0=L"D1@草圖2";
CString a1=L"D111@草圖14";
CString a2=L"D2@草圖14";
……
pConfigurationManager->ISetConfigurationParams ( Name, paramCount, paramNames, paramValues, &retval);
m_iModelDoc->ViewZoomtofit( ); //視圖設(shè)定
在本程序中,首先輸入配置的名稱(chēng)和各尺寸的參數(shù)值,獲得當(dāng)前模型的配置管理器對(duì)象并使用程序接口添加一個(gè)新的配置,然后通過(guò)程序更改三維模型的參數(shù),實(shí)現(xiàn)零件的參數(shù)化設(shè)計(jì)。表2說(shuō)明了在SolidWorks API函數(shù)中打開(kāi)文件函數(shù)OpenDoc6各參數(shù)的意義。

表2 SldWorks->OpenDoc6各參數(shù)的說(shuō)明
在Addmenus()函數(shù)中,將自動(dòng)生成的代碼改為
hret = icmdGroup->AddCommandItem2(L“閥體參數(shù)化”, -1, L“閥體參數(shù)化對(duì)話(huà)框”, L“閥體參數(shù)化”, 0, callback, enable, MAIN_ITEM_ID1, menuToolbarOption, &cmdIndex0)。
在程序中增加條件語(yǔ)句,對(duì)其進(jìn)行判斷,不僅可以有效地提示用戶(hù)出現(xiàn)錯(cuò)誤的類(lèi)型和位置,還可以通過(guò)return()函數(shù)實(shí)現(xiàn)跳轉(zhuǎn),避免SolidWorks出現(xiàn)運(yùn)算錯(cuò)誤而重啟。例如:
If(swPart=NULL)
{
AfxMessageBox(“閥體參數(shù)化設(shè)計(jì)失敗!”);
Return;
}
將設(shè)計(jì)好的閥體參數(shù)輸入到可視化界面中,尺寸參數(shù)通過(guò)從人機(jī)交互界面讀取并驅(qū)動(dòng)模型得到如圖7所示結(jié)果。

圖7 運(yùn)行結(jié)果
本文介紹了在visual studio 2010環(huán)境下開(kāi)發(fā)動(dòng)態(tài)連接庫(kù)的方法,最終將編譯生成的DLL文件注冊(cè)到SolidWorks軟件中,實(shí)現(xiàn)了基于SolidWorks平臺(tái)的球閥閥體參數(shù)化設(shè)計(jì),使同類(lèi)球閥的設(shè)計(jì)難度降低,加快產(chǎn)品的設(shè)計(jì)效率。