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