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