它提供了变量,算术运算指令(加、减、乘、除),功能函数(SIN,COS,TAN,…),还有控制指令(IF——GO-TO,WHILE——DO)。巧妙的运用这些指令,可以解决很多比较简单、有规律的曲线,如正弦曲线、抛物线等。例1:正弦曲线(如图1)。
主程序主程序
… G65P9910AOB360.C100.F100 … 对局部变量设置 #l=0 #2=360.00 #3=100.00 #9=100.00 09910(子程序) WHILE[#1IE#2]DO1 #10=#3*SIN[#1] G90Gl#lY#10F#9 #1=#1+10. END1 当然,此法还可以表达较复杂的曲线。宏程序短小精炼,对于存储空间小的设备很适用。具有很强的适应性,只要改动一两个数据就可以进行粗加工。但其晦涩难懂,逻辑复杂,过程中的错误不易发现,对于特别复杂的曲线无能为力。这种方法对编程人员的要求较高,须非常熟练G代码,包括不常用的指令,要有相当扎实的高等数学知识,还要熟悉数控加工操作。Mastercam软件的应用
2.利用Mastercam软件
此软件广泛应用于数控加工,界面亲和,易学易用,能解决G代码宏程序不能解决的问题。以本文给出的工件为例,如图2所示,其曲线由一些离散的坐标点来定义(用于测量),如附表所示。
用Mastercam处理,操作流程如下:①先创建点,按坐标值绘制所有已知点。②把所有点按次序联成Spline曲线。③选择加工方式。④生成加工程序。具体步骤如下:
第 1步,Create—Point—Position,然后直接输入坐标值,先x轴后y轴,中间用逗号隔开。第2步,待所有给定数据输入完毕后,命令 Create—Spline—Auto-matic,系统提示选择第一个点、第二个点及最后一个点,一一点击完成后,系统自动生成Spline样条曲线。第3步,命令Toolpaths—Finish—Chain,用鼠标点击曲线的右(末)端,选择End here命令,确认Done后,弹出Tool parameters刀具参数对话框,根据需要选择合适刀具,再切换到Finish parameters对话框,如图3所示,选择切削参数。该过程中要特别注意几个重要参数的确定:①Linearization决定加工精度,其值越小精度越高,则程序也越长,一般0.01就足够了。②Compensa-tion type意为选择刀补类型,常用的是Computer和Con-trol两种。computer是根据刀具实际情况计算出刀具轨迹,生成程序,不用刀补;Control则不考虑刀具规格,生成有刀补的程序。③Compensation direction,选择刀补方向,一般可根据加工方式和操作方法而定。以上参数确定后弹出管理菜单,如图4所示。第4步,点击Post键,打开后处理对话框,如图5所示,确定机床数控操作系统,此处选择的是FANUC系统,文件是MPLFAN。,注意:后处理文件以MPL开头,其后几位表示简写的数控操作系统。若想更改为其他系统,通过change Post键进行选择,且选中Edit命令,然后点击0K键,生成程序。
该工件的加工经过几次摸索:第一次加工时直接利用给出点的坐标值,将两点间近似为一条直线,用G1指令写出程序。结果加工出来的曲线是19段折线,是离散点过于稀疏造成的。第二次,在AutoCAD2002中把离散点用样条曲线Spline命令串连起来,用垂线分曲线,等分它在X轴上的投影,将点的坐标求出来,增加了点的个数。且人为在原有两点之间插入若干个点,全部写入程序。此法虽然能解决问题,但很繁琐,且程序庞大,易出错。第三次,使用 Mastercam,采用样条线把离散的点连起来,直接生成满足精度要求的程序,与方法二相比,生成程序短小精炼,正确率高。该方法高效、简单、便捷,可以解决只给定离散点的曲线形式,对操作者要求较低。
曲线加工的数据编程
3.用C语言(或其他语言)生成程序的数据主体
某产品,其外形是一个很复杂的曲线方程,用宏程序很难(甚至不可能)把它写出来,而Mastercam则无法输入函数方程。此时,借助C语言来生成数据主体。
例:车工曲线方程如下:
0≤x≤22.1
Y=200.2+140.653√b
b=0.008754(x/168)+6.1455(x/168)2
-4.87544(x/168)3+0.568749(x/168)4
+0.76587(x/168)5
它很难在Mastercam中绘制。用C语言来计算其离散点,过程如下:
#include”math.h”
#include”conio.h”
#include”stdio.h”
Main ()
{
double a,b,d,c,i,e;
FILE*fp;
fp=fopen(”d:\s77.txt”,”w+”);
for(i=0;i<22.1;i=i+0.1)/*③*/
{
c=i/168;
b=0.008754*c+6.1455*c*c-4.87544*c*c*c+
0.568749*c*c*c*c+0.76587*c*c*c*c*c;
d=0.3333*log(b);
e=exp(d);/*①*/
a=200.2+140.65*e;/*②*/
printf(“Z=%.4f”,i);
printf(“X=%.4f\n”,a);
fprintf(fp,”z%.3fX%.3f\n”,i,a);
结果输出到文件S77.TXT*/
}
Printf (”ok”);
getch ()
}
程序①②两句用到了一个公式a=eIna,b开3次方即是6的1/3方。此程序在TC2.0下通过。
运行此程序得到s771.txt文件,用编辑器(任何一个,如记事本)打开,只要在头尾加上功能句,就是一个可用的程序。它的原理是:任何曲线可以分成无数很短的曲线,每个很短的曲线可以近似地认为是一段直线。当每段曲线的长度趋于零时,与直线的误差也趋于零。足够多的直线连起来可以替代一段曲线,这样就把曲线转化成有限段的直线。直线的程序很容易实现,问题得到简化。为了尽可能的减小曲线误差,每段曲线长度要尽可能的短,所以程序中的循环步长(控制曲线长度,注③i=i+0.1中的0.1)可以取得很小。但这样做成的程序会很大,有大量的冗余数据产生。曲率与误差成正比,因为步长固定,在曲率小的地方误差小,曲率为零(即直线)时则有大量的无用数据(完全可以弃掉而不影响程序),而在曲线曲率大的地方误差较大。新生代机床其数控系统容量都很大,所以不必过多考虑程序的大小,以保证曲线精度(线轮廓度)为第一要务。如果要生成一个没有冗余的短小程序,要用到二次求导等数学知识,非常复杂,在此处不作讨论。