胡 迪,羅 輝,張 偉,申逸騁
(合肥工業(yè)大學(xué) 智能制造技術(shù)研究院,安徽 合肥 230000)
參數(shù)化設(shè)計可提高設(shè)計效率,其基本原理是:采用三維模型與程序控制相結(jié)合的方式,根據(jù)零件或組件的設(shè)計要求,建立一組能控制三維模型形狀和拓?fù)潢P(guān)系的設(shè)計參數(shù),參數(shù)化程序通過對零件或組件的設(shè)計參數(shù)編程來實(shí)現(xiàn)設(shè)計參數(shù)的檢索、修改以及三維模型的再生[1]。
Creo是目前最流行的三維CAD軟件之一,也是國內(nèi)外CAD/CAM軟件中用戶數(shù)最多的軟件之一,提供了 Creo/Toolkit、VB API、J-Link等多種二次開發(fā)接口[2-5],方便用戶通過 C/C++、Basic、Java等常用開發(fā)語言進(jìn)行系統(tǒng)的二次開發(fā)。針對Creo二次開發(fā)進(jìn)行參數(shù)化設(shè)計問題,國內(nèi)外學(xué)者做了大量的研究。臧巖[6]使用Pro/Toolkit構(gòu)建了注塑模架的參數(shù)化設(shè)計系統(tǒng),實(shí)現(xiàn)了模架設(shè)計的自動化。張文彬等[7]使用Creo/Toolkit實(shí)現(xiàn)了階梯軸零件的參數(shù)化變型設(shè)計。李潤泉等[8]則依托Creo/Toolkit實(shí)現(xiàn)澆口套零件的參數(shù)化變型設(shè)計。孫太良[9]基于Creo二次開發(fā)了外嚙合圓柱齒輪優(yōu)化設(shè)計系統(tǒng)。以上利用Creo/Toolkit二次開發(fā)工具進(jìn)行二次開發(fā)的參數(shù)化設(shè)計系統(tǒng)多聚焦于某些具體零件的參數(shù)化設(shè)計系統(tǒng)開發(fā),當(dāng)需要擴(kuò)充參數(shù)化設(shè)計系統(tǒng)庫時,需要重新修改代碼,以至于開發(fā)的產(chǎn)品使用范圍受限,靈活度大打折扣。此外,Creo/Toolkit使用C語言進(jìn)行開發(fā),其開發(fā)周期長,學(xué)習(xí)曲線相對陡峭,也限制了行業(yè)從業(yè)人員參與系統(tǒng)的開發(fā)和維護(hù)。
Excel作為電子報表工具,內(nèi)置宏計算和VBA二次開發(fā)工具,在產(chǎn)品設(shè)計和工程計算中得到了廣泛的應(yīng)用,是企業(yè)常用的設(shè)計開發(fā)工具之一[10-13]。本文使用Creo提供的VB API開發(fā)接口,在Excel平臺下開發(fā)零件參數(shù)化設(shè)計系統(tǒng),以期實(shí)現(xiàn)一套易于擴(kuò)展和維護(hù)的零件參數(shù)化設(shè)計系統(tǒng)。
參數(shù)化設(shè)計的零件在構(gòu)型上相同,設(shè)計過程主要是對各尺寸進(jìn)行修改,故零件參數(shù)化設(shè)計主要由“確定構(gòu)型”到“確定參數(shù)”兩個步驟組成。設(shè)計人員首先在參數(shù)化設(shè)計庫中選擇與設(shè)計目標(biāo)一致的零件三維模型,確定通用件構(gòu)型,獲取須修改的主要參數(shù)。在確定參數(shù)后,通過系統(tǒng)計算或直接輸入確定所有參數(shù)值。最后,通過參數(shù)化設(shè)計接口在Creo中對已有模型進(jìn)行修改,獲得最終的設(shè)計結(jié)果。零件參數(shù)化設(shè)計流程如圖1所示。
參數(shù)化設(shè)計系統(tǒng)主要包含兩個關(guān)鍵模塊:一是參數(shù)修改模塊,主要用于確定需要修改的參數(shù)及其數(shù)值;二是零件信息快速查找模塊,能夠幫助設(shè)計人員快速找到需要修改的零件。
1.2.1 參數(shù)模塊修改
與用戶直接使用CAD工具畫圖不同,參數(shù)化設(shè)計系統(tǒng)并不需要在三維模型中確定所有尺寸參數(shù),利用零件尺寸與一些工程參數(shù)(壓強(qiáng)、力、材料牌號以及相關(guān)的某一配合或驅(qū)動尺寸等)的相關(guān)性可以確定部分關(guān)鍵尺寸參數(shù),另外諸如倒角等一些尺寸無需修改。由于參數(shù)間存在一定的關(guān)聯(lián)性,參數(shù)的修改主要包括以下兩種類型:
(1)主動修改。必須人工輸入?yún)?shù)的值,所有直接參數(shù)及部分間接參數(shù)均需通過此類修改方式進(jìn)行修改。參數(shù)修改的方式有兩種,一種為設(shè)計人員根據(jù)實(shí)際情況輸入任意數(shù)值,另一種為已標(biāo)準(zhǔn)化的數(shù)據(jù),用戶只能在定義好的表格數(shù)據(jù)中選取合適的數(shù)值。
(2)聯(lián)動修改。部分參數(shù)之間存在一定的關(guān)系,某些參數(shù)值可以根據(jù)相關(guān)參數(shù)值通過一定的映射進(jìn)行修改,如在缸體的設(shè)計過程中,壁厚尺寸值可通過內(nèi)部液體的壓強(qiáng)值計算得出,無需人工填寫。由于Creo提供了關(guān)系這一工具,實(shí)現(xiàn)了參數(shù)的關(guān)聯(lián)功能,故只要在模型中設(shè)置好關(guān)系,確定需要主動修改的參數(shù)后聯(lián)動修改即可直接計算得到關(guān)聯(lián)的參數(shù)。
參數(shù)值的修改流程如圖2所示。用戶根據(jù)實(shí)際情況,首先輸入主動修改的參數(shù)值;之后系統(tǒng)根據(jù)設(shè)定好的關(guān)系計算得到聯(lián)動修改參數(shù)的值;最后通過參數(shù)化設(shè)計接口在三維軟件系統(tǒng)下修改已有模型的相關(guān)尺寸,完成參數(shù)的修改過程。
圖1 零件參數(shù)化設(shè)計流程
圖2 參數(shù)值的修改流程
1.2.2 零件信息快速查找模塊
參數(shù)化設(shè)計系統(tǒng)需考慮系統(tǒng)的可擴(kuò)展性和維護(hù)性,應(yīng)只需一次編碼后僅需維護(hù)零件庫和相關(guān)參數(shù)設(shè)計信息即可。零件信息快速查找模塊的關(guān)鍵技術(shù)包括以下兩個方面:
(1)零件通用信息模板的建立。確保所有零件的信息能夠以標(biāo)準(zhǔn)化的方式保存,由模板記錄零件的路徑以及相關(guān)參數(shù)的名稱、類型等信息,如圖3所示。
圖3 零件通用信息模板
(2)零件庫的建立。Excel文件本身與數(shù)據(jù)庫有點(diǎn)類似,一個Excel文件即一個工作簿,包含了多張工作表,每個工作表均能記錄獨(dú)立的信息,并且各工作表之間的信息可以互相關(guān)聯(lián)。故為便于維護(hù),系統(tǒng)不使用專業(yè)數(shù)據(jù)庫系統(tǒng),將所有的信息均存放在一個單獨(dú)的文件中,每個零件的信息以標(biāo)準(zhǔn)化模板的形式保存在對應(yīng)的工作表內(nèi),在工作表內(nèi)進(jìn)行參數(shù)的修改;在Excel工作簿內(nèi)設(shè)置一個工作表專門進(jìn)行零件選擇和零件的生成等操作。零件庫的構(gòu)架如圖4所示。
系統(tǒng)使用 Creo 2.0M060和 Excel 2016進(jìn)行開發(fā),需要一定的配置后方能進(jìn)行代碼編寫。
2.1.1 VB API環(huán)境配置
系統(tǒng)使用VB API對Creo進(jìn)行二次開發(fā),需要首先配置VB API的開發(fā)環(huán)境,主要包括以下3個步驟:
(1)設(shè)置系統(tǒng)環(huán)境變量。添加PRO_COMM_M(jìn)SG_EXE到環(huán)境變量,變量值填寫pro_comm_msg.exe所在的路徑加文件全名。pro_comm_msg.exe位于CREO安裝目錄中Common Files\datecode\machine type\obj目錄下。
(2)注冊COM服務(wù)器。以管理員權(quán)限運(yùn)行CREO安裝目錄下Parametric/bin中的vb_api_register.bat文件即可。如需反注冊,以管理員權(quán)限運(yùn)行vb_api_unregister.bat即可。
(3)配置選項。該步可選,主要解決二次開發(fā)過程中使用函數(shù)進(jìn)行重生操作出現(xiàn)的IpfcXToolkitBadContext錯誤,在CREO配置編輯器中將選項regen_failure_h(yuǎn)andling的值設(shè)為resolve_mode。
圖4 零件庫的構(gòu)架
2.1.2 添加VB API項目引用
代碼在Excel內(nèi)嵌VBA環(huán)境下編寫,首先要添加VB API項目引用。打開Excel內(nèi)嵌的宏編輯器,點(diǎn)擊工具-引用菜單,在彈出的對話框中選中“Creo VB API Type Library for Creo Parametric”即可,如圖5所示。
圖5 添加Creo VB API引用
系統(tǒng)主要包含模型的快速檢索、Creo會話操作、Creo模型操作、參數(shù)修改等四部分關(guān)鍵內(nèi)容。
(1)模型的快速檢索。如前文所述,模型庫中每個模型對應(yīng)一個Excel工作表,工作表名為模型的模板名稱,系統(tǒng)通過讀取所有的工作表名形成模型庫清單供用戶選取,其關(guān)鍵代碼如下:
Private Sub Worksheet_Activate()
Dim s As String
Dim i As Integer
s=""
For i=2To Sheets.Count
s=s &Sheets(i).Name & ","
Next
s=Left(s,Len(s)-1)
Range("A6").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList,F(xiàn)ormula1:=s
End With
End Sub
(2)Creo會話操作。VB API只能使用異步模式進(jìn)行開發(fā),系統(tǒng)首先需要創(chuàng)建一個會話再進(jìn)行Creo的相關(guān)操作。由于VBA環(huán)境使用老式的vb6的語法,因此代碼與VB API的語法稍有不同,如對對象的賦值需要使用Set語句進(jìn)行賦值等。新建會話關(guān)鍵代碼如下:
Dim asyncConnection As IpfcAsyncConnection
Dim cAC As CCpfcAsyncConnection
Dim baseSession As IpfcBaseSession
Dim creoapp As String
creoapp=Sheets("計算界面").Range("B3")+"-g:no_graphics-i:rpc_input"//參數(shù)表示不顯示Creo界面
Set cAC=New CCpfcAsyncConnection
Set asyncConnection=cAC.Start(creoapp,"")
Set baseSession=asyncConnection.Session
(3)Creo模型操作。系統(tǒng)首先將模板文件復(fù)制到用戶指定的目錄,之后在新建的會話中打開模型并進(jìn)行參數(shù)操作,其關(guān)鍵代碼如下:
Dim model As IpfcModel
Dim modelDesc As IpfcModelDescriptor
Dim retrieveModelOptions As IpfcRetrieveModelOptions
Dim cmodelDescriptor As New CCpfcModelDescriptor
Dim cretrieveModelOptions As New CCpfcRetrieveModelOptions
outputfile=Sheets("計算界面").Range("B4")
modelname=Sheets("計算界面").Range("A6")
modelfile=Sheets(modelname).Range("B2")
Call FileCopy(modelfile,outputfile)
Set modelDesc=cmodelDescriptor.Create(EpfcModelType.EpfcMDL_PART,"","")
modelDesc.Path=outputfile
Set retrieveModelOptions=cretrieveModelOptions.Create
retrieveModelOptions.AskUserAboutReps=False
Set model= baseSession.RetrieveModelWithOpts(modelDesc,retrieveModelOptions)
(4)參數(shù)修改。這是系統(tǒng)實(shí)現(xiàn)的最核心部分,系統(tǒng)讀取工作表中相關(guān)參數(shù)信息對模型進(jìn)行修改,其關(guān)鍵代碼如下:
For i=4To Sheets(modelname).UsedRange.Rows.Count
Call Modifiy_Param(model,Sheets(modelname).Range("A"+Trim(Str(i))),Sheets(modelname).Range("B"+Trim(Str(i))),Sheets(modelname).Range("C"+Trim(Str(i))))
Next
Private Sub Modifiy_Param(model As IpfcModel,ParamName As String,ParamType As String,ParamValue As String)
Dim iParameterOwner As IpfcParameterOwner
Dim iParamValue As IpfcParamValue
Dim cmodelItem As New CMpfcModelItem
Dim parameter As IpfcParameter
'Create iParamValue類
If(ParamType="浮點(diǎn)型")Then
Set iParamValue = cmodelItem.CreateDoubleParamValue(CSng(ParamValue))
ElseIf(ParamType="整形")Then
Set iParamValue=cmodelItem.CreateIntParamValue(CLng(ParamValue))
ElseIf(ParamType="字符串")Then
Set iParamValue=cmodelItem.CreateStringParamValue(ParamValue)
ElseIf(ParamType="布爾型")Then
Set iParamValue=cmodelItem.CreateBoolParamValue(CBool(ParamValue))Else
Set iParamValue=cmodelItem.CreateNoteParamValue(CLng(ParamValue))
End If
Set iParameterOwner=model
Set parameter=iParameterOwner.GetParam(ParamName)
Call parameter.SetScaledValue(iParamValue,Nothing)
End Sub
在上述研究的基礎(chǔ)上,綜合設(shè)計經(jīng)驗(yàn),開發(fā)了液壓機(jī)板材參數(shù)化設(shè)計系統(tǒng),系統(tǒng)主要操作界面如圖6所示。
圖6 液壓機(jī)板材參數(shù)化設(shè)計系統(tǒng)主要操作界面
設(shè)計人員首先在圖6的下拉框中選擇需要生成的零件,同時修改文件保存路徑;打開如圖7所示的對應(yīng)工作表,修改參數(shù)值;確定參數(shù)之后,點(diǎn)擊圖7上的生成按鈕,系統(tǒng)會自動修改參數(shù)生成對應(yīng)的模型。如果用戶需要添加新零件時,可以新建一個工作表,按照圖7的內(nèi)容模板添加修改對應(yīng)的文件、參數(shù)等信息,即可完成零件庫的增加操作。
圖7 參數(shù)修改界面
本文闡述了利用Excel二次開發(fā)Creo的設(shè)計流程和方法,并利用Creo提供的VB API接口開發(fā)了一套零件參數(shù)化設(shè)計系統(tǒng)。開發(fā)的系統(tǒng)編碼簡單,同時具有較強(qiáng)的可擴(kuò)展性,無需修改源碼即可完成參數(shù)化設(shè)計零件庫的維護(hù),有利于技術(shù)員的掌握、維護(hù)和擴(kuò)充。該系統(tǒng)能夠節(jié)省設(shè)計時間,提高設(shè)計效率。此外,本文的二次開發(fā)方式相較基于Creo/Toolkit的二次開發(fā)具有易于理解、編程和維護(hù)方便等特點(diǎn),也為開發(fā)人員提供了新的二次開發(fā)思路。