数控铣床在加工过程中,遇到轮廓较复杂的零件时,用人工编写数控程序需要花费大量的时间,且易出错。笔者用Autolisp R12.0编写了一个应用程序,程序从AutoCAD图形中获得零件轮廓的坐标信息,并根据这些信息和其它参数计算出刀具中心的运动轨迹,并直接生成加工代码。该程序对改善工作质量、保证编程的正确性和提高处理更复杂加工作业的能力具有较好的实用价值。
一、零件轮廓坐标信息的获取
从图形中获得信息,首先要把零件按实际尺寸准确进行绘制,并使图形坐标和机床加工坐标一致。为了选取方便,通常要把零件轮廓线组合成一整体,对于封闭轮廓,可用Bloly命令使之形成一条多义线(Polyline),对于非封闭轮廓,可以用Pedit的子命令Join使之形成多义线。多义线是AutoCAD中的特殊图形实体,它由一系列首尾相连的直线和圆弧组成,在图形数据库中以顶点(即相连点)子实体的形式保存信息,与位置、形状有关的信息主要有两个:一是顶点坐标数值,保存在10组码中;二是顶点凸度(Bulge),保存在42组码中。
AutoCAD中约定:凸度为0是直线顶点,它与下一个顶点连接为一直线;凸度不为0是圆弧顶点,它与下一个顶点连接为一圆弧;凸度值为负表示顺时针圆弧,凸度值为正表示逆时针圆弧;凸度绝对值小于1表示圆弧包角小于180°,凸度绝对值大于1表示圆弧包角大于180°。凸度与圆弧包角的关系是:圆弧包角=4×arctan|凸度值|。
多义线的直线顶点和圆弧顶点都只保存了直线和圆弧的起点标志,终点坐标则都保存在下一个顶点中。
Autolisp语言提供了读取顶点实体组码数据的函数,因此,可以很方便地知道多义线各顶点的坐标值和凸度值,再通过坐标系转换和计算,就得到了零件轮廓线上直线段的起点、终点坐标和圆弧段的起点、终点、半径、圆心等几何信息。
二、与刀具运动轨迹有关的因素
刀具运动轨迹不仅与零件轮廓形状有关,还与该轮廓是零件的内表面还是外表面、加工方式是顺铣还是逆铣、铣刀半径、公差尺寸、加工变形等诸因素有关。
加工零件内表面:顺铣时,刀具按逆时针方向运动(主轴正转,下同)(见图1a),逆铣时,则刀具按顺时针方向运动(见图1b)。
加工零件外表面:正好相反,顺铣时,刀具顺时针运动(见图1c),逆铣时,则刀具逆时针运动(见图1d)
刀具中心与零件轮廓线的距离除了铣刀半径外,还要考虑尺寸公差和加工时“让刀”变形的情况,若按名义尺寸进行加工,一般内表面尺寸偏小,外表面尺寸偏大,因此,必须设置一个调整变量,用于对名义尺寸进行调整。
此外,对非平滑过渡的连接处,要考虑圆弧过渡方式(也可用其它过渡方式)。
三、刀具中心轨迹的计算
计算刀具中心轨迹是按刀具运动方向,依次取出多义线顶点实体的数据进行计算和转换。首先根据凸度值判断顶点的性质,由此确定对象是直线还是圆弧。如果是直线顶点,则先取得该顶点和下一个顶点的坐标值,再根据加工方式,用Polar函数分别把直线的两个端点沿起点到终点方向加90°(顺铣)或减90°(逆铣)后,移动刀具半径和调整变量之差的距离,得到刀具中心的起点和终点坐标。
如果是圆弧顶点,则先取得该顶点的坐标值和凸度值以及下一个顶点的坐标值,计算出圆心和半径,再把两端点沿圆心方向(凹弧)或与圆心相反方向(凸弧)移动刀具半径和调整变量之差的距离。
一段直线或一段圆弧是上述算法,当它们组合在一起时,情况要复杂一些,主要是判断它们在连接处是否需要过渡圆弧以及是否重复计算。一般来讲,两直线衔接,要有过渡圆弧;直线和圆弧或两圆弧衔接,相切时不需要过渡圆弧,且相切处只需计算一点,不相切时需要过渡圆弧。
特殊情况下,圆弧半径与刀具半径相等的凹圆弧,后接相切直线或圆弧,均可不需计算。
值得注意的是,上述计算的前提是多义线的顶点排列顺序与刀具运动方向是一致的。而用Bpoly命令形成的多义线的顶点在图形数据库中总是按逆时针方向排列保存的,且排列的起点与生成多义线时的选择点有关,因此,在计算前必须先确定刀具运动方向。当刀具是顺时针运动时,则需要颠倒顶点原来的排列顺序,且要改变顶点的性质,即直线顶点改为圆弧顶点,圆弧顶点改为直线顶点。
四、操作对话框设计
为了使用操作方便,要用DCL语言设计一个操作对话框,如图2所示。在这个对话框中,通过按下选择轮廓按钮(在图形上选取加工轮廓线,并获得坐标信息)、选择零件表面和加工方式(以确定刀具的运动方向)、输入调整参数和刀具号(确定刀具中心和轮廓线的偏移量)等操作后,就可用模拟显示按钮,在AutoCAD图形编辑器中直接进行刀具运动的二维仿真模拟显示;观察满意后,再分别输入切削深度、每次进刀量、切削速度、进刀速度、精铣速度、主轴转速等编程加工参数,按下确认按钮,即可将完整的数控加工程序输出到指定的文本文件中。
五、结束语
用这种方法进行数控编程,只要原图正确,都能保证编程一次成功,且编程人员所要做的工作就是选择加工对象并输入加工参数。既能减轻劳动强度,缩短编程时间,又可减少差错,使编程工作简便,效率提高。