棒哥设计 1.刀具半径补偿的原理 1.1刀具半径补偿的坐标计算 在机床数控技术中已经讲述了刀具半径补偿的编程指令,刀具半径补偿建立和取消时刀具中心点的运动轨迹。本节将要介绍刀具半径十限的坐标计算,在轮廓加工过程中,刀具半径补偿分三个过程:①刀具半径补偿的建立;③刀具半径补偿的进行;③刀具半径补偿的取消。在这三个过程中,刀具中心的轨迹都是根据被加工工件的轮廓计算的。通常,工件轮廓是由直线和圆弧组成的,加工直线时,刀具中心线是工件轮廓的平行线且距离等于刀具半径值,加工圆弧时,半径之差是刀具半径值,本节将要介绍的半径补偿计算是计算刀具半径补偿建立和取消时刀具中心点与工件轮廓起点和终点的位置关系;工件轮廓拐角时刀具中心拐点与工件轮廓拐点的位置关系。由于轮廓线的拐点可是直线与直线、直线与圆弧、圆弧与圆弧的交点;拐角的角度大小又不同;又由于刀具半径补偿可是左侧(c41)或右侧(跳)偏置,因此,计算公式很多,下面仅介绍部分计算公式: 1.2直线两端处刀具中心的位置 若用半径为r的立铣刀加工图3—20中的直线45,刀具中心的轨迹在刀具左例偏置时(G41方式),是ab直线;右侧偏置(G42方式)时是cd线,只要计算 出端点a,b或c,d的坐标值,就可使刀具准确移动。由于直线Aa=Ac=r,过A点垂直于AB线,Bb=Bc=r,过B点垂直于AB线,A点和B点的坐标值已由零件程序中给出,因此: 图1.2.1 直线两端刀具位置 若把式(3—18)中的r值的符号改为负号,则和式(3—17)完全一样,因此在实际应用中,只用式(3—17)计算直线端点处的刀具中心位置,在G41方式下r取正值 在G42方式下r取负值。 式(3—15)、(3—16)、(3—17),适合于各种不同方向的直线,当为负值时,为负值,当AB线平行于X轴时,,当AB线平行Y轴时。 1.3转接矢量计算 工件轮廓有拐角时,拐点可是直线与直线交点,如图3—22、3—23、3—24所示。直线拐角时拐角的大小等于两直线矢量的夹角;直线与圆弧连接时拐角的大小是直线矢量与拐点处圆弧切线矢量的夹角;圆弧与圆弧连接时是两圆弧在交点处切线矢量的夹角,由于两矢量夹角不同以及G41,G42偏置方向不同,使刀具中心轨迹的转接方式有所不同,共有三种转接方式: 1.3.1缩短型 在G41方式下两矢量夹角。在之间;在G42方式下两向量夹角在之间,是缩短型,如图3—22、3—24a,b及图3—23c,d所示,刀具中心在c点转折,没有到达由式(3—17)算出的B点,比只加工OA直线时少走CB的距离,也比单程加工AF直线少走DC的距离。 1.3.2伸长型 在G41方式下,两矢量的夹角之间;在G42方式下,两向量的夹角之间,是伸长型,如图3—22d、3—23a及3—24d所示,刀具中心越过由式(3—17)算出的B点,在C点转折,也比单独加工AF直线多走CD的距离。 1.3.3插入型 在G4l方式下,两矢量的夹角之间,在G42方式下,两向量夹角之间,如图3—22c、3—23b及3—24c所示,刀具中心在C点和C’点两次转折,CC’是插入直线必须保证BC=C’D=r(刀具半径)。 图3-22 G41直线与直线转接情况 图3—23 G42直线与直线转接情况 图3—24 G41圆弧接圆弧时的转接情况 对于伸长型和插入型转接交点c和c’的计算适合于直线与直线、直线与圆弧、圆弧与圆弧的连接方式,但对于缩短型,由于连接线的不同算法是不同的。 伸长型转接交点c的坐标计算 图3-23(a) 上两式中是以X坐标轴正向为起始边,逆时针方向对轮廓线矢量的夹角,在图3—22d和图3—24d中,>270。 在G41方式时上式中r的符号为负。 即在G41时方式时的公式: 是c点对A点的坐标值,由于A点在工件坐标系中的坐标值已由程序中给出,因此可求出c点对工件坐标系的坐标值。 插入型转接交点C,C’的坐标计算 根据刀具偏置方向(G41,G42)不同,计算方式也不相同,图3—22c是G41方式。 由于: 则有 图3-22(c) 图3—23b是G42方式 同理: 图3—23(b) 缩短型转接交点的坐标计算 直线与直线连接如图3—22a、b,图3—24c、d所示,(AC)x和(AC)y所用公式与伸长型相同,缩短型与伸长型r的符号也相同,即:G41方式r为负,G42方式r为正。 图3—22a 在G42方式下 1.4缩短型转接交点的坐标计算 1.4.1直线与直线连接 直线与直线连接如图3—22,23所示, 和所用公式与仲长型相同v缩短型与伸长型r的符 号也相同,即:以G41方式r为负,G42方式为正。 图1-1 直线与圆弧转接交点 1.4.2直线与圆弧连接 图1-1是以1方式直线与圆弧联接形式,工件轮廓线 是ABC,B点是直线与圆弧的支点,点是圆弧中心,为已知点,点可用式(3—17)求得。 也是已知点,由图可知 在中,已知,; =(r=刀具半径)。根据余弦定理可求出的模 由上式可求得直线与圆弧的两个交点,离8点近的为点,在x轴和y轴上的投影为 点的坐标 根据上述方法,还可求出N2方式直线与圆弧的转按交点,及以1,N2方式圆弧与直线的转接交点。 1.4.3圆弧与圆弧连接 图3—26是以G41方式顺圆弧与顺圆弧联接时刀 具中心转接点计算图。圆弧的半径为,圆 弧半径为,刀具半径为r,则为已 知点,则三角形的三个边为己知边,根据余弦 定理可求出 2.刀具半径补偿程序流程图 2.1 流程图 刀具半径补偿程序设计流程图如图5所示。首先打开数控加工源程序,读取被加工零件的轮廓信息以及刀具的走刀信息、刀具半径,采用矢量算法结合刀具偏置方向计算经刀具半径补偿后各段线段的刀具中心轨迹方程。然后确定相交两线段尖角过渡处的内、外偏形式,根据内偏求交点和外偏采用辅助圆弧过渡的处理方法计算出整个刀具中心运动轨迹。在利用C语言开发的WTUAPT系统软件中,采用这种计算方法成功地解决了刀具半径补偿问题,并经实际应用证明这种处理方法是简单有效的。 3.刀具半径补偿程序设计示列 3.1.伸长型 在G41方式下,两矢量的夹角之间;在G41方式下,两向量的夹角之间,是伸长型。如下图所示: 3.1.1 G41和G02刀具半径补偿准备工作 设刀具半径r=20mm的情况下带入公式: 在中,已知,; (R+r=刀具半径)。根据余弦定理可求出的模 由上式可求得直线与圆弧的两个交点,离8点近的为点,在x轴和y轴上的投影为 点的坐标 刀具半径补偿清单: /*650597 Lurunmin exp1.c LINE*/ /*650597 Lurunmin exp1.c ARC */ #include<graphics.h> <math.h> /* 文件包含命令 */ Main() /* 主函数 */ {float x1,x2,x3,x4,y1,y2,y3,y4 ,; float , ,,R,a0 ,ab; int r=20; a0=sqrt(); Scanf(“%d%d%d%d”,&x1,&x2,&x3,&x4); Scanf(“%d%d%d%d”, &y1,&y2,&y3,&y4); /*输入A,B,C点和圆心坐标*/ Scanf(“%d”,&R) =arcsin(); =arccos(); =-; ab=a0cos+; /*A’B’的模长*/ x1’=x1-rsin,y2’=y1+rcos; x2’=x1-rsin+abcos,y2’=y1+rcos+ab*sina; /*B’的坐标*/ Printf(“%d%d%d%d%d%d\n”,x1,y1,x1’,y1’,x2’,y2’); int gdriver=DETECT,gmode; /* 定义驱动程序,设置图形模式 */ Initgraph(&gdriver,&gmode,”c:\\tc”); /* 初始化图形系统,驱动程序所在路径 */ Cleardevice(); /* 清空屏幕 */ Setbkcolor(15); /* 设置背景颜色(白色)*/ Line(x1,y1,x2,y2); /* 画编程轨迹直线AB*/ arc(x4,y4, ,,R);/* 画编程轨迹圆弧BC */ Line(x1’,y1’,x2’,y2’); /* 画刀具中心轨迹直线A’B’ */ arc (x4,y4,,,,R+20); /* 画刀具中心轨迹直线B’C’ */ Getch(); /* 关闭程序 */ Closegraph();/ *关闭图形 */ } 仿真结果 基于Visual C++ 6.0和Microsoft Excel软件,对前面所提出算法进行实现和仿真。刀具半径补偿进行中(如图3-1) 坐标A(0,0),B(300,200), C点(694.517,77.4)和R=231.33. 图3-1 刀具半径补偿进行中G41和G02方式下 伸长型转接 仿真结果A’(-11.09,16.64),B’(287.15,215.47),C’(714.24,80.7)。 3.1.2 G42和G02刀具半径补偿准备工作 设刀具半径r=20mm的情况下带入公式: 在中,已知,; =(R+r=刀具半径)。根据余弦定理可求出的模 由上式可求得直线与圆弧的两个交点,离8点近的为点,在x轴和y轴上的投影为 点的坐标 刀具半径补偿清单: /*650597 Lurunmin exp1.c LINE*/ /*650597 Lurunmin exp1.c ARC*/ #include<graphics.h> <math.h> /* 文件包含命令 */ Main() /* 主函数 */ {float x1,x2,x3,x4,y1,y2,y3,y4 ,; float , ,,R,a0 ,ab; int r=20; a0=sqrt(); Scanf(“%d%d%d%d”,&x1,&x2,&x3,&x4); Scanf(“%d%d%d%d”, &y1,&y2,&y3,&y4); /*输入A,B,C点和圆心坐标*/ Scanf(“%d”,&R) =arcsin(); =arccos(); =-; ab=a0cos-; /*A’B’的模长*/ x1’=x1+rsin,y2’=y1-rcos; x2’=x1+rsin+abcos,y2’=y1-rcos+ab*sina; /*B’的坐标*/ Printf(“%d%d%d%d%d%d\n”,x1,y1,x1’,y1’,x2’,y2’); int gdriver=DETECT,gmode; /* 定义驱动程序,设置图形模式 */ Initgraph(&gdriver,&gmode,”c:\\tc”); /* 初始化图形系统,驱动程序所在路径 */ Cleardevice(); /* 清空屏幕 */ Setbkcolor(15); /* 设置背景颜色(白色)*/ Line(x1,y1,x2,y2); /* 画编程轨迹直线AB*/ arc(x4,y4, ,,R);/* 画编程轨迹圆弧BC */ Line(x1’,y1’,x2’,y2’); /* 画刀具中心轨迹直线A’B’ */ arc (x4,y4,,,,R+20); /* 画刀具中心轨迹直线B’C’ Getch(); /* 关闭程序 */ Closegraph();/ *关闭图形 */ } 仿真结果 基于Visual C++ 6.0和Microsoft Excel软件,对前面所提出算法进行实现和仿真。刀具半径补偿进行中在A(0,0),B(300,200),C(694.517)和R=231.33代入 图3-2刀具半径补偿进行中G42和G02方式下 伸长型转接 结果为A’(11.09,-16.64),b’(312.93,84.58),c’(674.79,74.1). 3.1.3 G41和G03刀具半径补偿准备工作 刀具半径补偿清单: /*650597 Lurunmin exp1.c LINE*/ /*650597 Lurunmin exp1.c ARC */ #include<graphics.h> <math.h> /* 文件包含命令 */ Main() /* 主函数 */ {float x1,x2,x3,x4,y1,y2,y3,y4 ,; float , ,,R,a0 ,ab; int r=20; a0=sqrt(); Scanf(“%d%d%d%d”,&x1,&x2,&x3,&x4); Scanf(“%d%d%d%d”, &y1,&y2,&y3,&y4); /*输入A,B,C点和圆心坐标*/ Scanf(“%d”,&R) =arcsin(); =arccos(); =-; ab=a0cos+; /*A’B’的模长*/ x1’=x1-rsin,y2’=y1+rcos; x2’=x1-rsin+abcos,y2’=y1+rcos+ab*sina; /*B’的坐标*/ Printf(“%d%d%d%d%d%d\n”,x1,y1,x1’,y1’,x2’,y2’); int gdriver=DETECT,gmode; /* 定义驱动程序,设置图形模式 */ Initgraph(&gdriver,&gmode,”c:\\tc”); /* 初始化图形系统,驱动程序所在路径 */ Cleardevice(); /* 清空屏幕 */ Setbkcolor(15); /* 设置背景颜色(白色)*/ Line(x1,y1,x2,y2); /* 画编程轨迹直线AB*/ arc(x4,y4, ,,R);/* 画编程轨迹圆弧BC */ Line(x1’,y1’,x2’,y2’); /* 画刀具中心轨迹直线A’B’ */ arc (x4,y4,,,,R-20); /* 画刀具中心轨迹直线B’C’*/ Getch(); /* 关闭程序 */ Closegraph();/ *关闭图形 */ } 仿真结果 基于Visual C++ 6.0和Microsoft Excel软件,对前面所提出算法进行实现和仿真。刀具半径补偿进行中。图3-3刀具半径补偿进行中G41和G03方式下 伸长型转接。代入A(0,0),B(300,200),C(338.57,611.32), R=231.33。 图3-3刀具半径补偿进行中G41和G03方式下 伸长型转接 得A’(-11.09,16.64),B’(290.74,217.86),C’(327.93,594.38) 3.1.4 G42和G03刀具半径补偿准备工作 刀具半径补偿清单: /*650597 Lurunmin exp1.c LINE*/ /*650597 Lurunmin exp1.c ARC */ #include<graphics.h> <math.h> /* 文件包含命令 */ Main() /* 主函数 */ {float x1,x2,x3,x4,y1,y2,y3,y4 ,; float , ,,R,a0 ,ab; int r=20; a0=sqrt(); Scanf(“%d%d%d%d”,&x1,&x2,&x3,&x4); Scanf(“%d%d%d%d”, &y1,&y2,&y3,&y4); /*输入A,B,C点和圆心坐标*/ Scanf(“%d”,&R) =arcsin(); =arccos(); =-; ab=a0cos+; /*A’B’的模长*/ x1’=x1+rsin,y2’=y1-rcos; x2’=x1+rsin+abcos,y2’=y1-rcos+ab*sina; /*B’的坐标*/ Printf(“%d%d%d%d%d%d\n”,x1,y1,x1’,y1’,x2’,y2’); int gdriver=DETECT,gmode; /* 定义驱动程序,设置图形模式 */ Initgraph(&gdriver,&gmode,”c:\\tc”); /* 初始化图形系统,驱动程序所在路径 */ Cleardevice(); /* 清空屏幕 */ Setbkcolor(15); /* 设置背景颜色(白色)*/ Line(x1,y1,x2,y2); /* 画编程轨迹直线AB*/ arc(x4,y4, ,,R);/* 画编程轨迹圆弧BC */ Line(x1’,y1’,x2’,y2’); /* 画刀具中心轨迹直线A’B’ */ arc (x4,y4,,,,R+20); /* 画刀具中心轨迹直线B’C’ Getch(); /* 关闭程序 */ Closegraph();/ *关闭图形 */ } 仿真结果 基于Visual C++ 6.0和Microsoft Excel软件,对前面所提出算法进行实现和仿真。刀具半径补偿进行中 代入A(0,0),B(300,200),C(338.57,611.32)三点和R=231.33。 图3-4 刀具半径补偿进行中G42和G03方式下 伸长型转接 得出A’(11.09,-16.64)B’(309.34,182.19),C’(349.2,628.26)。 3.2 缩短型 3.2.1 G41和G02是加工不出来的 3.2.2 G41和G03刀具半径补偿准备工作 这个里面要用到圆弧接圆弧的情况,直线的就参考前面编程就可以了。 刀具半径补偿清单: /*650597 Lurunmin exp1.c LINE*/ /*650597 Lurunmin exp1.c ARC*/ #include<graphics.h> <math.h> /* 文件包含命令 */ Main() /* 主函数 */ {float x1,x2,x3,x4,y1,y2,y3 ,y4,; float , ,,=20,,oo; int r=20; oo=sqrt(); Scanf(“%d%d%d%d%d%d%d%d\n”, &x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4); /*输入头2个点和2个点的圆心坐标*/ Scanf(“%d”,&); /*输入后一个圆的半径*/ =arccos(); oo=sqrt(+); /*求2个圆心的距离*/ ; =+; =arccos(+); ; ; /*B’的坐标*/ Printf(“%d%d \n”,); x1’=x1-rsin,y2’=y1+rcos; x2’=x1-rsin+abcos,y2’=y1+rcos+ab*sina; int gdriver=DETECT,gmode; /* 定义驱动程序,设置图形模式 */ Initgraph(&gdriver,&gmode,”c:\\tc”); /* 初始化图形系统,驱动程序所在路径 */ Cleardevice(); /* 清空屏幕 */ Setbkcolor(15); /* 设置背景颜色(白色)*/ Line(x1,y1,x2,y2); /*画直线AB*/ Arc (x4,y4, ,,r); /*画编程圆弧轨迹BC*/ Line(,,,); /* 画头刀具段轨迹直线A’B’*/ Arc(x2,y2, ,,r); /*换前段刀具中心圆弧轨迹B’B’’*/ Arc(x4,y4, , ,-20); /* 画后段刀具中心圆弧轨迹B’’C’*/ Getch(); /* 关闭程序 */ Closegraph();/ *关闭图形 */ } 仿真结果 基于Visual C++ 6.0和Microsoft Excel软件,对前面所提出算法进行实现和仿真。刀具半径补偿进行中,代入A(0,0),B(243.34,136.8),C(441.69,-68.92)圆心(342.47,33.94),R=142.85。 图3-2-1刀具半径补偿进行中G41和G03方式下缩短型转接仿真出A’(-22.95,40.83)B’(221.57,176.13)B’’(274.53,104.43)C’(410.4,-36.55)。 3.2.3 G42和G02刀具半径补偿准备工作 刀具半径补偿清单: /*650597 Lurunmin exp1.c LINE*/ /*650597 Lurunmin exp1.c ARC */ #include<graphics.h> <math.h> /* 文件包含命令 */ Main() /* 主函数 */ {float x1,x2,x3,x4,y1,y2,y3 ,y4,; float , ,,R,,,oo; int r=20,= =r; oo=sqrt(); Scanf(“%d%d%d%d%d%d%d%d\n”, &x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4); /*输入3个点和圆心坐标*/ Scanf(“%d\n”,&); /*输入第二个圆的半径*/ =arccos(); oo=sqrt(+); /*求2个圆心的距离*/ ; =+; =arcos(+); ; ; /*B’的坐标*/ Printf(“%d%d \n”,); x1’=x1+rsin,y2’=y1-rcos; x2’=x1+rsin+abcos,y2’=y1-rcos+ab*sina; int gdriver=DETECT,gmode; /* 定义驱动程序,设置图形模式 */ Initgraph(&gdriver,&gmode,”c:\\tc”); /* 初始化图形系统,驱动程序所在路径 */ Cleardevice(); /* 清空屏幕 */ Setbkcolor(15); /* 设置背景颜色(白色)*/ Line(x1,y1,x2,y2); /*画直线AB*/ Arc (x4,y4, ,,r); /*画编程圆弧轨迹BC*/ Line(,,,); /* 画头刀具段轨迹直线A’B’*/ Arc(x2,y2, ,,r); /*换前段刀具中心圆弧轨迹B’B’’*/ Arc(x4,y4, , ,-20); /* 画后段刀具中心圆弧轨迹B’’C’*/ Getch(); /* 关闭程序 */ Closegraph();/ *关闭图形 */ } 仿真结果 基于Visual C++ 6.0和Microsoft Excel软件,对前面所提出算法进行实现和仿真。刀具半径补偿进行中代入A(0,0)B(243.34,136.8)C(100.02,369.64)圆心(206.98,274.95)R=142.85。 图3-2-2刀具半径补偿进行中G42和G02方式下缩短型转接 得:A’(198.94,-33.7)B’(262.28,103.1)C’(128.97.344.01)B’’(233.5,174.19) 3.2.4 G42和G03也是加工不出来的 参 考 文 献 [1] 王永章,数控技术. 北京:高等教育出版社,2001. [2] 杜国臣,数控机床编程. 北京:机械工业出版社,2004. [3] 李宏胜,机床数控技术及应用. 北京:机械工业出版社,2003. [4] 全国数控培训网络天津分中心,数控机床. 北京:机械工业出版社,1997. [5] 许祥泰,数控加工编程实用技术. 北京:机械工业出版社,2002. [6] 李郝林,机床数控技术. 北京:机械工业出版社,2004. [7] 林 宋,现代数控机床. 北京:化学工业出版社,2003. [8] 刘启中,现代数控技术及应用. 北京:机械工业出版社,2000. [9] 严爱珍,机床数控原理与系统. 北京:机械工业出版社,1999 [10] 陈志雄,数控机床与数控编程技术. 北京:电子工业出版社,2003. [11] 杨有君,数控技术,北京:机械工业出版社,2005. 致 谢 感谢周汝忠教授在本次课程设计期间给予我的帮助和指导。由于时间和水平有限,本设计难免存在缺点和错误,望指导老师和同学们批评指正。 QQ 29467473 |