胡 迪,羅 輝,張 偉,申逸騁
(合肥工業(yè)大學 智能制造技術研究院,安徽 合肥 230000)
參數(shù)化設計可提高設計效率,其基本原理是:采用三維模型與程序控制相結(jié)合的方式,根據(jù)零件或組件的設計要求,建立一組能控制三維模型形狀和拓撲關系的設計參數(shù),參數(shù)化程序通過對零件或組件的設計參數(shù)編程來實現(xiàn)設計參數(shù)的檢索、修改以及三維模型的再生[1]。
Creo是目前最流行的三維CAD軟件之一,也是國內(nèi)外CAD/CAM軟件中用戶數(shù)最多的軟件之一,提供了 Creo/Toolkit、VB API、J-Link等多種二次開發(fā)接口[2-5],方便用戶通過 C/C++、Basic、Java等常用開發(fā)語言進行系統(tǒng)的二次開發(fā)。針對Creo二次開發(fā)進行參數(shù)化設計問題,國內(nèi)外學者做了大量的研究。臧巖[6]使用Pro/Toolkit構建了注塑模架的參數(shù)化設計系統(tǒng),實現(xiàn)了模架設計的自動化。張文彬等[7]使用Creo/Toolkit實現(xiàn)了階梯軸零件的參數(shù)化變型設計。李潤泉等[8]則依托Creo/Toolkit實現(xiàn)澆口套零件的參數(shù)化變型設計。孫太良[9]基于Creo二次開發(fā)了外嚙合圓柱齒輪優(yōu)化設計系統(tǒng)。以上利用Creo/Toolkit二次開發(fā)工具進行二次開發(fā)的參數(shù)化設計系統(tǒng)多聚焦于某些具體零件的參數(shù)化設計系統(tǒng)開發(fā),當需要擴充參數(shù)化設計系統(tǒng)庫時,需要重新修改代碼,以至于開發(fā)的產(chǎn)品使用范圍受限,靈活度大打折扣。此外,Creo/Toolkit使用C語言進行開發(fā),其開發(fā)周期長,學習曲線相對陡峭,也限制了行業(yè)從業(yè)人員參與系統(tǒng)的開發(fā)和維護。
Excel作為電子報表工具,內(nèi)置宏計算和VBA二次開發(fā)工具,在產(chǎn)品設計和工程計算中得到了廣泛的應用,是企業(yè)常用的設計開發(fā)工具之一[10-13]。本文使用Creo提供的VB API開發(fā)接口,在Excel平臺下開發(fā)零件參數(shù)化設計系統(tǒng),以期實現(xiàn)一套易于擴展和維護的零件參數(shù)化設計系統(tǒng)。
參數(shù)化設計的零件在構型上相同,設計過程主要是對各尺寸進行修改,故零件參數(shù)化設計主要由“確定構型”到“確定參數(shù)”兩個步驟組成。設計人員首先在參數(shù)化設計庫中選擇與設計目標一致的零件三維模型,確定通用件構型,獲取須修改的主要參數(shù)。在確定參數(shù)后,通過系統(tǒng)計算或直接輸入確定所有參數(shù)值。最后,通過參數(shù)化設計接口在Creo中對已有模型進行修改,獲得最終的設計結(jié)果。零件參數(shù)化設計流程如圖1所示。
參數(shù)化設計系統(tǒng)主要包含兩個關鍵模塊:一是參數(shù)修改模塊,主要用于確定需要修改的參數(shù)及其數(shù)值;二是零件信息快速查找模塊,能夠幫助設計人員快速找到需要修改的零件。
1.2.1 參數(shù)模塊修改
與用戶直接使用CAD工具畫圖不同,參數(shù)化設計系統(tǒng)并不需要在三維模型中確定所有尺寸參數(shù),利用零件尺寸與一些工程參數(shù)(壓強、力、材料牌號以及相關的某一配合或驅(qū)動尺寸等)的相關性可以確定部分關鍵尺寸參數(shù),另外諸如倒角等一些尺寸無需修改。由于參數(shù)間存在一定的關聯(lián)性,參數(shù)的修改主要包括以下兩種類型:
(1)主動修改。必須人工輸入?yún)?shù)的值,所有直接參數(shù)及部分間接參數(shù)均需通過此類修改方式進行修改。參數(shù)修改的方式有兩種,一種為設計人員根據(jù)實際情況輸入任意數(shù)值,另一種為已標準化的數(shù)據(jù),用戶只能在定義好的表格數(shù)據(jù)中選取合適的數(shù)值。
(2)聯(lián)動修改。部分參數(shù)之間存在一定的關系,某些參數(shù)值可以根據(jù)相關參數(shù)值通過一定的映射進行修改,如在缸體的設計過程中,壁厚尺寸值可通過內(nèi)部液體的壓強值計算得出,無需人工填寫。由于Creo提供了關系這一工具,實現(xiàn)了參數(shù)的關聯(lián)功能,故只要在模型中設置好關系,確定需要主動修改的參數(shù)后聯(lián)動修改即可直接計算得到關聯(lián)的參數(shù)。
參數(shù)值的修改流程如圖2所示。用戶根據(jù)實際情況,首先輸入主動修改的參數(shù)值;之后系統(tǒng)根據(jù)設定好的關系計算得到聯(lián)動修改參數(shù)的值;最后通過參數(shù)化設計接口在三維軟件系統(tǒng)下修改已有模型的相關尺寸,完成參數(shù)的修改過程。

圖1 零件參數(shù)化設計流程

圖2 參數(shù)值的修改流程
1.2.2 零件信息快速查找模塊
參數(shù)化設計系統(tǒng)需考慮系統(tǒng)的可擴展性和維護性,應只需一次編碼后僅需維護零件庫和相關參數(shù)設計信息即可。零件信息快速查找模塊的關鍵技術包括以下兩個方面:
(1)零件通用信息模板的建立。確保所有零件的信息能夠以標準化的方式保存,由模板記錄零件的路徑以及相關參數(shù)的名稱、類型等信息,如圖3所示。

圖3 零件通用信息模板
(2)零件庫的建立。Excel文件本身與數(shù)據(jù)庫有點類似,一個Excel文件即一個工作簿,包含了多張工作表,每個工作表均能記錄獨立的信息,并且各工作表之間的信息可以互相關聯(lián)。故為便于維護,系統(tǒng)不使用專業(yè)數(shù)據(jù)庫系統(tǒng),將所有的信息均存放在一個單獨的文件中,每個零件的信息以標準化模板的形式保存在對應的工作表內(nèi),在工作表內(nèi)進行參數(shù)的修改;在Excel工作簿內(nèi)設置一個工作表專門進行零件選擇和零件的生成等操作。零件庫的構架如圖4所示。
系統(tǒng)使用 Creo 2.0M060和 Excel 2016進行開發(fā),需要一定的配置后方能進行代碼編寫。
2.1.1 VB API環(huán)境配置
系統(tǒng)使用VB API對Creo進行二次開發(fā),需要首先配置VB API的開發(fā)環(huán)境,主要包括以下3個步驟:
(1)設置系統(tǒng)環(huán)境變量。添加PRO_COMM_MSG_EXE到環(huán)境變量,變量值填寫pro_comm_msg.exe所在的路徑加文件全名。pro_comm_msg.exe位于CREO安裝目錄中Common Files\datecode\machine type\obj目錄下。
(2)注冊COM服務器。以管理員權限運行CREO安裝目錄下Parametric/bin中的vb_api_register.bat文件即可。如需反注冊,以管理員權限運行vb_api_unregister.bat即可。
(3)配置選項。該步可選,主要解決二次開發(fā)過程中使用函數(shù)進行重生操作出現(xiàn)的IpfcXToolkitBadContext錯誤,在CREO配置編輯器中將選項regen_failure_handling的值設為resolve_mode。

圖4 零件庫的構架
2.1.2 添加VB API項目引用
代碼在Excel內(nèi)嵌VBA環(huán)境下編寫,首先要添加VB API項目引用。打開Excel內(nèi)嵌的宏編輯器,點擊工具-引用菜單,在彈出的對話框中選中“Creo VB API Type Library for Creo Parametric”即可,如圖5所示。

圖5 添加Creo VB API引用
系統(tǒng)主要包含模型的快速檢索、Creo會話操作、Creo模型操作、參數(shù)修改等四部分關鍵內(nèi)容。
(1)模型的快速檢索。如前文所述,模型庫中每個模型對應一個Excel工作表,工作表名為模型的模板名稱,系統(tǒng)通過讀取所有的工作表名形成模型庫清單供用戶選取,其關鍵代碼如下:
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只能使用異步模式進行開發(fā),系統(tǒng)首先需要創(chuàng)建一個會話再進行Creo的相關操作。由于VBA環(huán)境使用老式的vb6的語法,因此代碼與VB API的語法稍有不同,如對對象的賦值需要使用Set語句進行賦值等。新建會話關鍵代碼如下:
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)首先將模板文件復制到用戶指定的目錄,之后在新建的會話中打開模型并進行參數(shù)操作,其關鍵代碼如下:
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)實現(xiàn)的最核心部分,系統(tǒng)讀取工作表中相關參數(shù)信息對模型進行修改,其關鍵代碼如下:
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="浮點型")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
在上述研究的基礎上,綜合設計經(jīng)驗,開發(fā)了液壓機板材參數(shù)化設計系統(tǒng),系統(tǒng)主要操作界面如圖6所示。

圖6 液壓機板材參數(shù)化設計系統(tǒng)主要操作界面
設計人員首先在圖6的下拉框中選擇需要生成的零件,同時修改文件保存路徑;打開如圖7所示的對應工作表,修改參數(shù)值;確定參數(shù)之后,點擊圖7上的生成按鈕,系統(tǒng)會自動修改參數(shù)生成對應的模型。如果用戶需要添加新零件時,可以新建一個工作表,按照圖7的內(nèi)容模板添加修改對應的文件、參數(shù)等信息,即可完成零件庫的增加操作。

圖7 參數(shù)修改界面
本文闡述了利用Excel二次開發(fā)Creo的設計流程和方法,并利用Creo提供的VB API接口開發(fā)了一套零件參數(shù)化設計系統(tǒng)。開發(fā)的系統(tǒng)編碼簡單,同時具有較強的可擴展性,無需修改源碼即可完成參數(shù)化設計零件庫的維護,有利于技術員的掌握、維護和擴充。該系統(tǒng)能夠節(jié)省設計時間,提高設計效率。此外,本文的二次開發(fā)方式相較基于Creo/Toolkit的二次開發(fā)具有易于理解、編程和維護方便等特點,也為開發(fā)人員提供了新的二次開發(fā)思路。