技術解答:模具零件毛坯尺寸的自動導出方法
毛坯尺寸是零件的基本屬性之一,為模具、工裝和機加產(chǎn)品等的結構設計、干涉分析、材料準備、成本分析、確定加工周期等方面提供了重要的參考作用。目前主流的三維設計軟件均提供測量零件包絡體的功能,主要有2種測量模式[1],一種為軸對齊包圍盒AABB(axis-aligned bounding box),另一種為最小包圍盒MBB(minimum bounding box),如圖1所示。最小包圍盒MBB尺寸加上適當?shù)募庸び嗔浚C加零件一般為10 mm),即可得到零件的毛坯尺寸。
零件的AABB和MBB包圍盒
對于最小包圍盒MBB的算法,不少學者和專家對其進行了大量研究工作。G BAREQUET等[2]提出利用三維點集來近似求解最小包圍盒的算法,首先對實體模型進行離散化,但想要獲得較高精度的計算結果,必須使得離散化程度更高,從而降低了運行效率;陳柏松等[3]提出一種基于非線性主成分分析的最小包圍盒計算方法,首先計算頂點區(qū)域面積,然后用每個頂點區(qū)域面積對頂點進行調制,再使用傳統(tǒng)主成分分析得到目標正交坐標系,從而得到最小包圍盒,該方法計算穩(wěn)定,但處理較多頂點時速度較慢,且無法處理設有連接關系的點集數(shù)據(jù);陳華等[4]提出一種確定任意形狀物體最小包圍盒的方法,利用實體模型分別繞3個坐標軸旋轉一定角度時計算一次方向包圍盒OBB(oriented bounding box),最后找出體積最小的OBB作為最小包圍盒,但該方法計算速度慢、效率低;孔垂品等[1]提出一種零件的最小包圍盒生成算法,根據(jù)旋轉投影的外輪廓確定最小包圍盒,采用逐步細分法,通過2輪旋轉來提高計算效率,但處理單個復雜零件耗時已超過100 s,不適合一次性處理較多零件。
對于一般機加工產(chǎn)品,目前測量最小包圍盒的方法為:利用三維設計軟件,采用手動方式逐個對零件進行測量,再將測量結果逐一手動記錄。但對于大型的模具、工裝和機加工產(chǎn)品,零件數(shù)量可能成百上千,如果再采用手動測量和記錄的方式,工作量巨大且容易出錯,影響工作效率。王孟等[5]基于CATIA/CAA對三維型材的毛坯模型生成技術進行了研究,龍軍等[6]將UG二次開發(fā)技術用于鑄件毛坯三維實體自動生成,該方法主要用于識別孔、凹槽、倒角等加工特征,并將零件模型恢復到機加工前狀態(tài),無法準確用于測量零件的最小包圍盒。針對該問題,需要編制一套高效可靠的程序,快速自動測量和輸出最小包圍盒尺寸,并最終獲得零件的毛坯尺寸,提高工作效率。
1 開發(fā)工具
CATIA是一款CAD/CAE/CAM一體化軟件[7],廣泛應用于機械設計、航空航天、汽車制造、造船、電子電器等行業(yè)。為了滿足用戶個性化和專業(yè)化需求,CATIA為用戶提供了多種二次開發(fā)接口[8],其中包括基于構件的應用編程接口(CAA)[5]和自動化對象編程接口(VBA)[9]。CAA是CATIA已有組件的定制開發(fā),主要為Visual C++和Java語言,并要具備連接端口等方面的知識,入門相對困難;VBA是交互式的定制開發(fā),主要為Visual Basic語言[10],雖在功能上不及CAA強大,但簡單實用,可以滿足一般專業(yè)化需求?,F(xiàn)主要介紹在CATIA中采用VBA二次開發(fā)接口,使用VB語言進行編程,實現(xiàn)自動批量導出零件毛坯尺寸的功能。
2 程序設計方法
2.1 設計思路和原理
程序設計應簡單實用、穩(wěn)定運行和計算正確,主要從以下2個方面進行考慮。
(1)可對某文件夾中的所有零件進行自動批量處理,并將結果輸出到Excel表中,方便后續(xù)操作。采用遞歸算法遍歷某文件夾及其子文件夾中的全部零件,程序執(zhí)行的主要流程如圖2所示。
零件毛坯尺寸自動導出流程
(2)裝配狀態(tài)包含零件、子裝配、部件等多個對象,測量最小包圍盒時容易出錯,最好單獨打開零件進行測量。
2.2 功能實現(xiàn)
2.2.1 查找零件
查找某文件夾及其子文件夾中的所有CATIA零件(*.CATPart),并將相關文件信息輸出到Excel表。
查找零件的子程序代碼如下。
Public n_File As Double '文件數(shù)量
Public FileName(1 To 65536) As String '文件名稱
Public FilePath(1 To 65536) As String '文件路徑
Public Sub SerachFile(ByVal Path1 As String)
For Each file In CreateObject("Scripting.FileSystemObject").GetFolder(Path1).Files
If InStr(file.Name, ".CATPart") <> 0 Then '判斷是否為零件類文件
n_File = n_File + 1
FileName(n_File) = file.Name
FilePath(n_File) = Left(file.Path, InStrRev(file.Path, "\"))
End if
Next
If CreateObject("Scripting.FileSystemObject").GetFolder(Path1).SubFolders.Count > 0 Then
For Each Folder In CreateObject("Scripting.FileSystemObject").GetFolder(Path1).SubFolders '子文件夾中遞歸調用
SerachFile Folder.Path
Next
End If
End Sub
將文件信息輸出到Excel表的代碼如下。
Dim EXCEL1 As Workbook
Set EXCEL1 = Excel.Workbooks.Add '新建Excel表
EXCEL1.Application.Visible = True
Dim sheets1 As Worksheet
Set sheets1 = EXCEL1.Worksheets(1)
C_FileName = "A" '文件名稱所在列
C_FilePath = "B" '文件路徑所在列
For Each file In fils
n_File = n_File + 1
sheets1.Range(C_FileName & n_File + 1).Value = CStr(file.Name)
sheets1.Range(C_FilePath & n_File + 1).Value = FilePath1
Next
2.2.2 讀取零件
讀取Excel表中的文件信息,并使用CATIA軟件依次打開零件模型,代碼如下。
For i = 1 to n_File
Set Model1 = CATIA.Documents.Open(FilePath (i) & “\” & FileName (i))
Next
2.2.3 測量零件
CATIA軟件未直接提供測量零件最小包圍盒MBB的函數(shù),但可以通過以下2種方法獲得MBB尺寸。
(1)慣性主軸法。先使用GetPrincipalAxes函數(shù)獲得零件實體的慣性主軸,然后使用AddNewExtremumPolar函數(shù)創(chuàng)建沿3個坐標軸方向的極點,極點沿坐標軸方向的跨度即組成了最小包圍盒尺寸。但是該方法在創(chuàng)建極點時相當于對零件模型進行了更改,容易引起存儲錯誤和文件關閉時彈出提示問題,不利于程序的穩(wěn)定運行和模型安全,降低了運行效率,不適合批量處理多個零件。
(2)測量慣量法。利用CATIA軟件的測量慣量功能(自定義中需勾選“主軸”),對零件實體進行測量,此時結構樹上會出現(xiàn)測量參數(shù),如圖3所示。其中“BBLx”、“BBLy”、“BBLz”即為最小包圍盒尺寸。該方法測量速度快、精度高,且未對零件模式進行更改,主要代碼如下。
結構樹上的測量參數(shù)
Set sel = Model1.Selection
sel.Clear
Set part1 = Model1.Part
sel.Add part1.MainBody '選定零件實體
CATIA.StartCommand '調用測量慣量命令
C_RoughSize = "C" '毛坯尺寸所在列
sheets1.Range(C_RoughSize & i).Value = Round(part1.Parameters.GetItem("BBLx").Value + 10, 1) & "*" & Round(part1.Parameters.GetItem("BBLy").Value + 10, 1) & "*" & Round(part1.Parameters.GetItem("BBLz").Value + 10, 1) '+10表示加工余量為10mm
2.3 實例驗證
為驗證該方法的使用效果,先對圖1所示的單個標準零件GB/T 70.1 M10x50(內(nèi)六角圓柱頭螺釘)進行測試,在處理器2.4 GHz、內(nèi)存8 GB的電腦上處理時間約4 s,測試結果如圖4所示。然后對某復合材料產(chǎn)品的模壓模具組件進行測試,如圖5所示,處理12個零件用時約38 s,測試結果如圖6所示。經(jīng)過手動測試復核,表明了測試結果準確無誤。