技術(shù)解答:模具零件毛坯尺寸的自動(dòng)導(dǎo)出方法
毛坯尺寸是零件的基本屬性之一,為模具、工裝和機(jī)加產(chǎn)品等的結(jié)構(gòu)設(shè)計(jì)、干涉分析、材料準(zhǔn)備、成本分析、確定加工周期等方面提供了重要的參考作用。目前主流的三維設(shè)計(jì)軟件均提供測(cè)量零件包絡(luò)體的功能,主要有2種測(cè)量模式[1],一種為軸對(duì)齊包圍盒AABB(axis-aligned bounding box),另一種為最小包圍盒MBB(minimum bounding box),如圖1所示。最小包圍盒MBB尺寸加上適當(dāng)?shù)募庸び嗔浚C(jī)加零件一般為10 mm),即可得到零件的毛坯尺寸。

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