APP下载

DXF文件的椭圆(弧)曲线拟合算法的设计与实现

2011-06-01杨泽林

自动化仪表 2011年11期
关键词:代码椭圆直线

杨泽林 马 凯 吕 静

(宁夏大学物理电气信息学院,宁夏 银川 750021)

0 引言

现有的基于可编程多轴运动控制卡(programmable multi-axis controller,PMAC)开发实现的数控系统,都是在离线状态下人工调试计算机数控(computer numerical control,CNC)代码后保存在计算机的外存储器。在进行加工时,需人工将控制程序调入内存再执行加工。这种方式在数控系统加工的工件类型较多时,对操作人员的要求就比较高,且人工调试CNC代码较为繁琐。

如何利用AutoCAD系统提供的对储存在DXF文件中的图形信息进行数控加工过程的实时监控和自动生成数控代码,是当前数控领域研究的热点,也是目前研究的目标。由于AutoCAD提供了图形交换格式(drawing exchange format,DXF)文件与外界程序的接口方法[1],因此,为了实现对多种加工零件的实时监控,首先应将由AutoCAD所提供的零件信息读入数据库中,然后根据所读入的参数在实时监控系统中显示出零件的外形加工轮廓。为此需要设计拟合算法,以便在椭圆(弧)曲线拟合插补时满足数控加工的工艺需求[2]。本文就DXF文件所能提供的椭圆(弧)曲线的相关信息作简要说明。

1 DXF文件的椭圆(弧)信息

1.1 DXF 文件概述

DXF是具有规范格式的ASCII码文本文件,易被其他程序处理,而且保存了CAD图形的精确数据。因此,可以通过编制高级语言设计接口程序来提取相关图形数据,实现CAD图形与计算机辅助制造(computer aided manufacturing,CAM)加工代码之间的转换,并结合相关数控工艺知识,生成CAM加工程序。DXF文件的特点和优势为CAD/CAM接口程序的开发提供了有利条件。

利用高级语言编写接口程序,必须首先了解文件的结构[3]。DXF数据文件包含设计过程的所有图形和非图形信息。一个完整的DXF文件必须包括标题段(HEADER)、类段(CLASSES)、表段(TABLES)、块段(BLOCKS)、实体段(ENTITIES)和文件结束标志(EOF)。

DXF文件各组成部分具体介绍如下。

①标题段(HEADER):它包含与本文件所绘制的图形的基本信息,其中包括了AutoCAD数据库的版本号、存盘时的各种设置以及许多系统变量。

②类段(CLASSES):它包含所有应用程序定义的类的信息。它包括的大部分信息对非CAD应用程序来说没有任何价值。

③表段(TABLES):它包含了四个表,每个表又包含可变数目的表项。按照这些表在文件中出现的顺序,它们依次为线型表、图层表、字样表和视图表。TABLES段与HEADER段一样,有时也可以忽略。

④块段(BLOCKS):它记录和定义每一块段的块名、当前图层名、块的种类、块的插入基点及组成该块的所有成员。目前,它还没有得到广泛使用,但由于它允许绘图的模块化操作,所以现在的应用越来越广泛。

⑤ 实体段(ENTITIES):它通过使用点、线、圆、弧等定义实际的三维或二维几何体(实体),记录了每个几何实体段的名称、所在图层的名称、线型名、颜色号、基面高度、厚度以及有关几何数据。它是实体交换的主要段。

⑥文件结束(EOF):它标志了文件结束。

文件中每个数据元素前面都带有一个称为组码的整数,组码的值表明了其后数据元素的类型。相应的一系列组码和组值构成了DXF文件中的段(SECTION),每一个段都以一个组码为0、组值为字符串SECTION的组对开始,其后再紧跟组码为2和表示各段名称的字符串(如HEADER、ENTITIES等)。

每个段中相应的组码和组值定义了相应的DXF段,而每个段都以组码为0和字符串为ENDSEC的组值构成的代码对结束。这些组码和组值组织成的各段便组成了DXF文件。

1.2 椭圆(弧)曲线信息

椭圆(弧)曲线在DXF文件实体段中是以“AcD-bEllipse”开始标记。在图元实体模块中,椭圆(弧)曲线的实体信息如表1所示。

表1 椭圆(弧)曲线实体信息Tab.1 The substantive information of ellipse(arc)curve

2 椭圆(弧)拟合算法的设计

由上述分析可知,基于PMAC卡的开放式数控系统将由DXF文件读取的图元实体信息存储于数据库中,以便利用数据库中的图元信息自动生成CNC代码[4-5],并依据生成的CNC代码实现在线实时监控并加工。

椭圆(弧)曲线的加工实际上是直线拟合曲线的加工[6],即椭圆(弧)曲线的 CNC代码实际上是直线CNC代码的组合[7];而在工控机中,对于椭圆(弧)曲线的绘制是利用计算机辅助几何设计的数学知识采用画直线模拟曲线的方法。总之,椭圆(弧)曲线拟合算法的根本思想是利用连续的多条直线来拟合曲线[8]。所以,通过连续的多条直线正确地拟合出曲线便成为生成椭圆(弧)曲线的CNC代码与实现椭圆(弧)曲线加工实时监控的关键。

2.1 算法思想

椭圆(弧)曲线拟合的基本思想是以弦进给代替弧进给[9]。第一象限内椭圆(弧)逆时针拟合插补如图1所示。

图1 椭圆(弧)逆时针拟合插补示意图Fig.1 Schematic drawing of ellipse(arc)anti-clockwise fitting interpolation

依据椭圆(弧)逆时针拟合插补示意图,结合椭圆(弧)曲线的参数方程,根据最小拟合误差给定的要求值,可依次确定各拟合点的坐标值。

椭圆(弧)方程的一般形式可表示为:

由于椭圆(弧)在数控系统中无法直接识别,因此,必须将其分解为直线或圆弧。

根据椭圆(弧)参数方程,其长、短轴分别为a、b(a≥b)。设起始角和终止角分别为α、β(0≤α<β≤2π),拟合误差为 δ,起点坐标 P0(a cosα,b sinα)为本次插补点,求下次插补点 P1(a cosθ1,b sinθ1),以此来生成一条满足拟合误差要求的逼近线段P0P1,并以弦长P0P1代替弧长P0P1,则有:

式中:VFeed为拟合插补时的切削进给速度,mm/s;Ti为插补采样时间,s。

设直线方程为y=kx+B,则直线P0P1的斜率为:

同时,作弦P0P1的平行线切椭圆弧于Q点,则得椭圆上任意一点 Qi(a cosθi,b sinθi)处的斜率为:

设与直线P0P1平行,切椭圆(弧)于点P(θi)的直线为 l,其中 α≤θi≤β。比较式(4)、式(6),由于在切点处两斜率相等,因此,可得:

当l到P0P1的距离小于拟合误差δ时,满足逼近要求,由此可得到不等式:

将式(4)、式(5)代入式(8),化简后得到:

直接解不等式(9)便可求出θ1,即求出点P1。

为了进一步化简式(9),对其左边采用放缩法化简,可得:

一般情况下,δ<a,0<θ1-α <π,解不等式(10),可得:

由式(11)可求出下一个逼近点的参数坐标。依次类推,可以得到整个椭圆(弧)的线段拟合的参数坐标值。

需要说明的是,上述算法中,由于弦长P0P1近似等于弧长P0P1,因此,每次插补实际进给的轮廓步长不等于VFeed×Ti,但它们之间相差非常小,在实际切削过程中,完全可以认为轮廓步长保持恒定,即切削进给速度保持恒定。

2.2 算法实现

无论是椭圆(弧)曲线的CNC代码的自动生成,还是用于实时监控的图形绘制,其基础都是运用上述拟合算法[10]。

本文以Visual C++6.0为前台开发工具,利用MFC的框架设计思想,在相应的DOC类下建立以下椭圆(弧)曲线拟合函数。

针对椭圆(弧)顺时针和逆时针这两种插补方向,我们可以得出以下两个椭圆(弧)拟合插补通用公式。

当Start_Angle<End_Angle,即椭圆(弧)按逆时针方向拟合插补时,有:

式中:ΔA为满足拟合误差Δ的角度增量,且ΔA=2×(float)a cos(1-Δ/a)。

同理,当 End_Angle<Start_Angle,即椭圆(弧)按顺时针方向拟合插补时,有:

可以看出,运用式(12)、式(13)进行插补计算,不必进行过象限判别,就可实现插补点自动过象限,从而避免了过象限时由于插补公式切换不及时而引起加工点表面粗糙度变大的现象。

2.3 结果比较

利用AutoCAD和上述方法绘制的典型椭圆(弧)曲线如图2所示。

图2 典型椭圆(弧)曲线Fig.2 The typical ellipse(arc)curves

从图2可以看出,两者是一致的。如果从PMAC卡中读取出椭圆(弧)曲线的加工信息,则可以完成实时监控。这也说明了利用上述算法,通过直线模拟曲线生成的 CNC代码可以完成椭圆(弧)曲线的加工[11-12]。

同时,利用上述拟合算法,在相应的图形文件夹中生成一个名为nc_code.gc的文件。该文件为文本文件,通过记事本或者文本处理软件均可以打开,可以查看生成的CNC代码。

3 结束语

本文针对实际应用的需要,通过读取DXF文件获取了AutoCAD中椭圆(弧)曲线的几何信息,提取出了椭圆(弧)曲线在数据库中存储的表结构;利用由连续的多条直线拟合曲线的设计思想,实现了小线段拟合插补算法,并通过Visual C++6.0重新绘制。由于此算法在设计过程中采用了插补点自动过象限的设计思路,因此,在实际加工过程中,从根本上避免了过象限时由于插补公式切换不及时而引起加工点表面粗糙度变大的现象,为以PMAC卡为基础的开放式数控系统的动态在线监视系统和加工代码的研发奠定了基础。

[1]于杰,王怀明.基于DXF文件的CAD/CAM接口程序开发与应用[J].制造业自动化,2008,30(7):79 -81.

[2]王亮德,马金河.数控加工图形轮廓与曲面的数学处理[J].机床与液压,2008,36(8):74 -76.

[3]余承飞,方勇.AutoCAD 2000二次开发技术[M].北京:人民邮电出版社,1999.

[4]Cogun C.NC parts programs generation from CAD exchange files[J].Computer in Industry,1992,20(2):193 -202.

[5]Ulker E,Turanalp M E,Halkaci H S.An artificial immune system approach to CNC tool path generation[J].Journal of Intelligent Manufacturing,2009,20(1):67 -77.

[6]冉树成,曲长虹,刘义翔.数控系统中椭圆插补功能的研究与实现[J].组合机床与自动化加工技术,1995(5):18-24.

[7]曹斌,李光耀,李启炎.基于DXF文件格式的二维复杂图形数控代码自动生成法[J].机械设计与制造,2003,6(3):30 -32.

[8]阳涛.数控车床加工椭圆的方法探讨[J].机电工程技术,2008,37(9):20-21.

[9]Piegl L.Curve fitting algorithm for rough cutting[J].Computeraided Design,1986,18(2):79 -82.

[10]郭景峰,潘晓,吴雷.基于DXF文件的曲线拟合方法的设计与实现[J].机床与液压,2006(11):210 -213.

[11]夏斌,王伟,黄学良,等.椭圆弧数控代码的自动生成方法[J].组合机床与自动化加工技术,2007(5):67-70.

[12]罗先全,黄学良,王伟,等.基于PMAC卡数控的G代码自动生成[J].现代制造工程,2007(7):14-16.

猜你喜欢

代码椭圆直线
Heisenberg群上由加权次椭圆p-Laplace不等方程导出的Hardy型不等式及应用
例谈椭圆的定义及其应用
一道椭圆试题的别样求法
画直线
创世代码
创世代码
创世代码
创世代码
画直线
椭圆的三类切点弦的包络