毛坯尺寸是零件的基本属性之一,为模具、工装和机加产品等的结构设计、干涉分析、材料准备、成本分析、确定加工周期等方面提供了重要的参考作用。目前主流的三维设计软件均提供测量零件包络体的功能,主要有2种测量模式[1],一种为轴对齐包围盒AABB(axis-aligned bounding box),另一种为最小包围盒MBB(minimum bounding box),如图1所示。最小包围盒MBB尺寸加上适当的加工余量(机加零件一般为10 mm),即可得到零件的毛坯尺寸。
图1 零件的AABB和MBB包围盒
对于最小包围盒MBB的算法,不少学者和专家对其进行了大量研究工作。G BAREQUET等[2]提出利用三维点集来近似求解最小包围盒的算法,首先对实体模型进行离散化,但想要获得较高精度的计算结果,必须使得离散化程度更高,从而降低了运行效率;陈柏松等[3]提出一种基于非线性主成分分析的最小包围盒计算方法,首先计算顶点区域面积,然后用每个顶点区域面积对顶点进行调制,再使用传统主成分分析得到目标正交坐标系,从而得到最小包围盒,该方法计算稳定,但处理较多顶点时速度较慢,且无法处理设有连接关系的点集数据;陈华等[4]提出一种确定任意形状物体最小包围盒的方法,利用实体模型分别绕3个坐标轴旋转一定角度时计算一次方向包围盒OBB(oriented bounding box),最后找出体积最小的OBB作为最小包围盒,但该方法计算速度慢、效率低;孔垂品等[1]提出一种零件的最小包围盒生成算法,根据旋转投影的外轮廓确定最小包围盒,采用逐步细分法,通过2轮旋转来提高计算效率,但处理单个复杂零件耗时已超过100 s,不适合一次性处理较多零件。
对于一般机加工产品,目前测量最小包围盒的方法为:利用三维设计软件,采用手动方式逐个对零件进行测量,再将测量结果逐一手动记录。但对于大型的模具、工装和机加工产品,零件数量可能成百上千,如果再采用手动测量和记录的方式,工作量巨大且容易出错,影响工作效率。王孟等[5]基于CATIA/CAA对三维型材的毛坯模型生成技术进行了研究,龙军等[6]将UG二次开发技术用于铸件毛坯三维实体自动生成,该方法主要用于识别孔、凹槽、倒角等加工特征,并将零件模型恢复到机加工前状态,无法准确用于测量零件的最小包围盒。针对该问题,需要编制一套高效可靠的程序,快速自动测量和输出最小包围盒尺寸,并最终获得零件的毛坯尺寸,提高工作效率。
1开发工具
CATIA是一款CAD/CAE/CAM一体化软件[7],广泛应用于机械设计、航空航天、汽车制造、造船、电子电器等行业。为了满足用户个性化和专业化需求,CATIA为用户提供了多种二次开发接口[8],其中包括基于构件的应用编程接口(CAA)[5]和自动化对象编程接口(VBA)[9]。CAA是CATIA已有组件的定制开发,主要为Visual C 和Java语言,并要具备连接端口等方面的知识,入门相对困难;VBA是交互式的定制开发,主要为Visual Basic语言[10],虽在功能上不及CAA强大,但简单实用,可以满足一般专业化需求。现主要介绍在CATIA中采用VBA二次开发接口,使用VB语言进行编程,实现自动批量导出零件毛坯尺寸的功能。
2程序设计方法
2.1设计思路和原理
程序设计应简单实用、稳定运行和计算正确,主要从以下2个方面进行考虑。
(1)可对某文件夹中的所有零件进行自动批量处理,并将结果输出到Excel表中,方便后续操作。采用递归算法遍历某文件夹及其子文件夹中的全部零件,程序执行的主要流程如图2所示。
图2 零件毛坯尺寸自动导出流程
(2)装配状态包含零件、子装配、部件等多个对象,测量最小包围盒时容易出错,最好单独打开零件进行测量。
2.2功能实现
2.2.1 查找零件
查找某文件夹及其子文件夹中的所有CATIA零件(*.CATPart),并将相关文件信息输出到Excel表。
查找零件的子程序代码如下。
Public n_File As Double '文件数量
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的函数,但可以通过以下2种方法获得MBB尺寸。
(1)惯性主轴法。先使用GetPrincipalAxes函数获得零件实体的惯性主轴,然后使用AddNewExtremumPolar函数创建沿3个坐标轴方向的极点,极点沿坐标轴方向的跨度即组成了最小包围盒尺寸。但是该方法在创建极点时相当于对零件模型进行了更改,容易引起存储错误和文件关闭时弹出提示问题,不利于程序的稳定运行和模型安全,降低了运行效率,不适合批量处理多个零件。
(2)测量惯量法。利用CATIA软件的测量惯量功能(自定义中需勾选“主轴”),对零件实体进行测量,此时结构树上会出现测量参数,如图3所示。其中“BBLx”、“BBLy”、“BBLz”即为最小包围盒尺寸。该方法测量速度快、精度高,且未对零件模式进行更改,主要代码如下。
图3 结构树上的测量参数
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(内六角圆柱头螺钉)进行测试,在处理器2.4 GHz、内存8 GB的电脑上处理时间约4 s,测试结果如图4所示。然后对某复合材料产品的模压模具组件进行测试,如图5所示,处理12个零件用时约38 s,测试结果如图6所示。经过手动测试复核,表明了测试结果准确无误。
图4 单个零件毛坯尺寸测试结果
图5 某复合材料产品模压模具
图6 多个零件毛坯尺寸测试结果
▍原文作者:戈家荣姚子佳朱高良赵云李治举
▍作者单位:绍兴宝旌复合材料有限公司