直线及圆弧插补程序--逐点比较法
- 格式:doc
- 大小:88.00 KB
- 文档页数:13
-、逐点比较法1、直线L1:起点坐标O (0, 0),终点坐标A (4, 6)(1)分析1)直线L1为第一象限内直线2)插补总步数:M=x e+y e=4+6=103)若偏差任0,则刀具向+A x方向进给一步,偏差f i+1j = f.. - y e4)若偏差f<0,则刀具向+A y方向进给一步,偏差f. .+1= f.. + x e(2)列表计算(3)2、直线L2:起点坐标O (0, 0),终点坐标A (-6, 3)(1)分析1)直线L2为第二象限内直线2)插补总步数:M=l x e l+y e=6+3=93)若偏差任0,则刀具向-A x方向进给一步,偏差f i+1j = f.. - y e4)若偏差f<0,则刀具向+A y方向进给一步,偏差f, .+1= f.. +lx e\ (2)(3)3、直线L3:起点坐标O (0, 0),终点坐标A (-5, -8)(1)分析1)直线L3为第三象限内直线2)插补总步数:M=l x e l+l y e l=5+8=133)若偏差任0,则刀具向-A x方向进给一步,偏差f,+1. = f.. -\y\4)若偏差f<0,则刀具向-A y方向进给一步,偏差f,,+1 = f.. +\x\(2)列表计算(3)绘制进给脉冲图(略)4、直线L4:起点坐标O (0, 0),终点坐标A (7, -4)(1)分析1)直线L4为第四象限内直线2)插补总步数:M=x+\y\=7+4=113)若偏差任0,则刀具向+A x方向进给一步,偏差f i+1j = f.. -\y\4)若偏差f<0,则刀具向-A y方向进给一步,偏差f. .+1= f.. + x e(2)(3)5、圆弧NR1:起点坐标A (4, 0),终点坐标E (0, 4)(1)分析1)圆弧NR1为第一象限逆圆2)插补总步数:M=\(x0-x e)\+\(y0-y e)\=4+4=83)若偏差任0,则刀具向-A x方向进给一步,偏差f,+1 . = f.. ~2x. + 14)若偏差f<0,则刀具向+A y方向进给一步,偏差f, .+1 = f.. + 2y.+ 1 (2)列表计算(3)绘制进给脉冲图(略)6、圆弧NR2:起点坐标A (0, 5),终点坐标E (-5, 0)(1)分析1)圆弧NR2为第二象限逆圆2)插补总步数:M=l(x0-x e)l+l(j0-j e)l=5+5=103)若偏差任0,则刀具向-颂方向进给一步,偏差f.,+1 = f.. - 2y.+ 14)若偏差f<0,则刀具向-A x方向进给一步,偏差f,+1 . = f.. ~2x. + 1 (2)列表计算(3)绘制进给脉冲图(略)7、圆弧NR3:起点坐标A (-6, 0),终点坐标E (0, -6)(1)分析1)圆弧NR3为第三象限逆圆2)插补总步数:M=l(x0-x g)l+l(y0-y g)l=6+6=123)若偏差任0,则刀具向+A x方向进给一步,偏差f i+1j = f.. + 2x. + 14)若偏差f<0,则刀具向-A y方向进给一步,偏差f. .+1 = f.. - 2y. + 1 (2)列表计算(3)8、圆弧NR4:起点坐标A (0, -7),终点坐标E (7, 0)1)圆弧NR4为第四象限逆圆2)插补总步数:M=\(x Q-x e)\+\(y Q-y e)\=7+7=143)若偏差任0,则刀具向+A y方向进给一步,偏差f.,+1 =f.. + 2y.+ 14)若偏差f<0,则刀具向+A x方向进给一步,偏差f i+1j =加+ 2x. + 1(2)(3)9、圆弧SR1:起点坐标A (0, 4),终点坐标E (4, 0)(1)分析1)圆弧SR1为第一象限顺圆2)插补总步数:M=\(x0-x e)\+\(y0-y e)\=4+4=83)若偏差f N0,则刀具向-A y方向进给一步,偏差f, .+1 = f.. ~2y.+ 14)若偏差f<0,则刀具向+A x方向进给一步,偏差f.+1. = f.. + 2x. + 1(2)(3)绘制进给脉冲图(略)10、圆弧SR2:起点坐标A (-5,0),终点坐标E (0,5)(1)分析1)圆弧SR2为第二象限顺圆2)插补总步数:M=\(x0-x e)\+\(y0-y e)\=5+5=103)若偏差f N0,则刀具向+A x方向进给一步,偏差f,+1. = f.. + 2x. + 14)若偏差f<0,则刀具向+A y方向进给一步,偏差f, .+1 = f.. + 2y.+ 1 (2)列表计算(3)绘制进给脉冲图(略)11、圆弧SR3:起点坐标A (0, -6),终点坐标E (-6, 0)(1)分析1)圆弧SR3为第三象限顺圆2)插补总步数:M=l(x0-x e)l+l(y0-y e)l=6+6=123)若偏差任0,则刀具向+颂方向进给一步,偏差f i+1j = f,. + 2y.+ 14)+1= "j - 2x.+ 1 (2)列表计算(3)12、圆弧SR4:起点坐标A (7, 0),终点坐标E (0, -7)(1)分析1)圆弧SR4为第四象限顺圆2)插补总步数:M=l(x0-x e)l+l(y0-y e)l=7+7=143)若偏差任0,则刀具向-A x方向进给一步,偏差f. .+1 = f.j - 2x. + 14)+1.(3二、数值积分法(DDA)1、直线L1:起点坐标O (0, 0),终点坐标A (4, 6)(1)分析1)直线L1为第一象限内直线2)x e=4=100B;y e=6=110B3)取积分累加器容量N=3位4)x被积函数寄存器J vx= x e;y被积函数寄存器J vy= y e5)初始时:x累加器J Rx= 0;y累加器J Ry= 06)当J Rx累加超过3位溢出时,则在x方向分配一进给脉冲+A x7)当J Ry累加超过3位溢出时,则在y方向分配一进给脉冲+颂(2)列表计算:(3)绘制进给脉冲图(略)2、直线L2:起点坐标O(0,0),终点坐标A(-6,3)(1)分析1)直线L2为第二象限内直线2)x e=l-6l=110B;y e=3=011B3)取积分累加器容量N=3位4)x被积函数寄存器J vx= x e;y被积函数寄存器J vy= y e5)初始时:x累加器J Rx= 0;y累加器J Ry= 06)当J Rx累加超过3位溢出时,则在x方向分配一进给脉冲-A x 7)当J Ry累加超过3位溢出时,则在y方向分配一进给脉冲+A y (2)列表计算二进制累加:累加N3):累加(3)绘制进给脉冲图(略)3、直线L3:起点坐标O(0,0),终点坐标A(-5,-8)(1)分析1)直线L3为第三象限内直线2)x e=|-5|=101B;y e=|-8|=1000B3)取积分累加器容量N=4位4)x被积函数寄存器J vx= x e;y被积函数寄存器J vy= y e5)初始时:x累加器J Rx= 0;y累加器J Ry= 06)当J Rx累加超过4位溢出时,则在x方向分配一进给脉冲-A x 7)当J Ry累加超过4位溢出时,则在y方向分配一进给脉冲-A y (2)列表计算二进制累加:(3)绘制进给脉冲图(略)4、直线L4:起点坐标O (0, 0),终点坐标A (7, -4)(1)分析1)直线L4为第四象限内直线2)x e=7=111B;y e=l-4l=100B3)取积分累加器容量N=3位4)x被积函数寄存器J vx= x e;j被积函数寄存器J vy= y e5)初始时:x累加器J Rx= 0;j累加器J Ry= 06)当J Rx累加超过3位溢出时,则在x方向分配一进给脉冲+A x 7)当J Ry累加超过3位溢出时,则在j方向分配一进给脉冲-颂(2)列表计算二进制累加:N3):(3)绘制进给脉冲图(略)5、圆弧NR1:起点坐标A (4, 0),终点坐标E (0, 4)(1)分析1)圆弧NR1为第一象限逆圆2)x0=4=100B;y0=0=000B3)取积分累加器容量N=3位4)初始时:x被积函数寄存器J vx= y0;y被积函数寄存器J vy= x05)初始时:x累加器J Rx= 0;y累加器J Ry= 06)当J Rx累加超过3位溢出时,则在x方向分配一进给脉冲-A x,相应在J vy中对x 坐标的修正为减一7)当J Ry累加超过3位溢出时,则在y方向分配一进给脉冲+A y,相应在J vx中对y 坐标的修正为加一(2)列表计算(3)绘制进给脉冲图(略)7、圆弧NR3:起点坐标A (-6, 0),终点坐标E (0, -6)(1)分析1) 圆弧NR3为第三象限逆圆 2) 扁=I-6I=110B ; y 0=0=000B 3) 取积分累加器容量N=3位4) 初始时:x 被积函数寄存器J vx = y 0; y 被积函数寄存器J vy = x 0 5) 初始时:x 累加器J Rx = 0; y 累加器J Ry = 06) 当J Rx 累加超过3位溢出时,则在x 方向分配一进给脉冲+A x ,相应在J vy 中对x 坐标的修正为减一7) 当J Ry 累加超过3位溢出时,则在y 方向分配一进给脉冲-颂,相应在J vx 中对y坐标的修正为加一(2)列表计算_8_ 9 10 11 12 1314(-44) (-4,4) (-5,3) (-5,3)(-3+4=7 7+4=11 (3)停止累加2+4=6 6+4=10(2) 2+5=7 7+5=12(4) 4+6=10(2) 2+6=8(0)停止累加0 1 0 1 1 1 0(3) 绘制进给脉冲图(略)8、圆弧NR4:起点坐标A (0, -7),终点坐标E (7, 0)(1)分析1) 圆弧NR4为第四象限逆圆 8) x 0=0=000B ; j 0=|-7l=111B 9) 取积分累加器容量N=3位10) 初始时:x 被积函数寄存器J vx = y 0; y 被积函数寄存器J vy = x 0 11) 初始时:x 累加器J Rx = 0; y 累加器J Ry = 012) 当J Rx 累加超过3位溢出时,则在x 方向分配一进给脉冲+A x ,相应在J vy 中对 x 坐标的修正为加一2) 当J Ry 累加超过3位溢出时,则在y 方向分配一进给脉冲+A y ,相应在J vx 中对y 坐标的修正为减一(2)列表计算10 11 12 13 14 15(-4,-6) (-3,-6) (-2,-6) (-1,-7+6=13(5) 5+6=11(3) 3+6=9 (1) 1+6=7 7+6=13 (5)停止累加1 1 1 0 1 0停止累加(3)绘制进给脉冲图(略)9、圆弧SR1:起点坐标A (0, 4),终点坐标E (4, 0)(1)分析1) 圆弧SR1为第一象限顺圆 2) x 0=0=000B ; j 0=4=100B 3) 取积分累加器容量N=3位4) 初始时:x 被积函数寄存器J vx = y 0; y 被积函数寄存器J vy = x 0 5) 初始时:x 累加器J Rx = 0; y 累加器J Ry = 06) 当J Rx 累加超过3位溢出时,则在x 方向分配一进给脉冲+A x ,相应在J vy 中对x坐标的修正为加一7) 当J Ry 累加超过3位溢出时,则在y 方向分配一进给脉冲-颂,相应在J vx 中对y坐标的修正为减一(2)列表计算11 12 13 1415(7, -4) (7, - 3) (7, - 2)-6+5=11⑶3+7=10(2) 2+7=9(1) 1+7=8(0) 0+7=7 7+7=14(6)停止累加1 1 0 1 0(3)绘制进给脉冲图(略)10、圆弧SR2:起点坐标A (-5, 0),终点坐标E (0, 5)(1)分析1)圆弧SR2为第二象限顺圆 2) x 0=l-5l=101B ; j 0=0=000B 3) 取积分累加器容量N=3位4) 初始时:x 被积函数寄存器J vx = y 0; y 被积函数寄存器J vy = x 0 5) 初始时:x 累加器J Rx = 0; y 累加器J Ry = 06) 当J Rx 累加超过3位溢出时,则在x 方向分配一进给脉冲+A x ,相应在J vy 中对x 坐标的修正为减一7) 当J Ry 累加超过3位溢出时,则在y 方向分配一进给脉冲+A y ,相应在J vx 中对y 坐标的修正为加一(2)列表计算12 13 1415(4,2)g (41) (4,1) (4,0)3+4=7 7+4=11(3) 3+4=7 7+4=11(3)停止累加1 0 1 0(3)绘制进给脉冲图(略)11、圆弧SR3:起点坐标A (0, -6),终点坐标E (-6, 0)(1)分析1)圆弧SR3为第三象限顺圆 2) x 0=0=000B ; y 0=l-6l=110B 3) 取积分累加器容量N=3位4) 初始时:x 被积函数寄存器J vx = y 0; y 被积函数寄存器J vy = x 0 5) 初始时:x 累加器J Rx = 0; y 累加器J Ry = 06) 当J Rx 累加超过3位溢出时,则在x 方向分配一进给脉冲-A x ,相应在J vy 中对x 坐标的修正为加一7) 当J Ry 累加超过3位溢出时,则在y 方向分配一进给脉冲+A y ,相应在J vx 中对y 坐标的修正为减一(2)列表计算141514(-6,-1)15(-6,0)停止累加0(3)绘制进给脉冲图(略)12、圆弧SR4:起点坐标A (7, 0),终点坐标E (0, -7)(1)分析1)圆弧SR4为第四象限顺圆2)x0=7=111B;j0=0=000B3)取积分累加器容量N=3位4)初始时:x被积函数寄存器J vx= y0;y被积函数寄存器J vy= x05)初始时:x累加器J Rx= 0;y累加器J Ry= 06)当J Rx累加超过3位溢出时,则在x方向分配一进给脉冲-A x,相应在J vy中对x 坐标的修正为减一7)当J Ry累加超过3位溢出时,则在y方向分配一进给脉冲-A y,相应在J vx中对y 坐标的修正为加一(2)列表计算(3)绘制进给脉冲图(略)。
第一象限逆圆弧为例,讨论圆弧的插补方法。
如图8-4 所示,设要加工圆弧为第一象限逆圆弧AB ,原点为圆心O ,起点为A (xo ,y 0),终点为B (x e ,y e )半径R ,瞬时加工点为P (x i ,y i ),点P 到圆心距离为Rp<0+△y>0-△x <0+△x <0+△y>0-△x<0-△y <0-△y>0+△x yx图8-2 第一象限直线插补轨迹图 图 8-3第一象限直线插补程序框图图12345X123YF>0p(xi,yi)A(Xi,Yi)F<0开始初始化Xe ,Y e ,JF≥0?+x 走一步F←F -Y e F←F -X e-y 走一步YNJ ←J-1J =0?Y结束若点P 在圆弧内则,则有x i2+y j2=R2p<R2即x i2+y j2-R2 < 0显然,若令F i,j= x i2+y j2-R2(8-4)图8-4 逆圆弧插补则有:(1)F i,j= F i,j=0, 则点P在圆弧上(2)F i,j >0则点P在圆弧外则(3)F i,j<0则点P在圆弧不则常将8-4称为圆弧插补偏差判别式。
当F i,j≥时,为逼近圆弧,应向-x方向进给一步;当F i,j<0时,应向+y 方向走一步。
这样就可以获得逼近圆弧的折线图。
与直线插补偏差计算相似,圆弧插补的偏差的计算也采用递推的方法以简化计算。
若加工点P(x i,y i)在圆弧外或者圆弧上,则有:F i,j=x i2+y j2-R2≥0 为逼近该圆沿-x方向进给一步,移动到新加工点P(x i=1,y i),此时新加工点的坐标值为x i+1=x i-1,y i=y i新加工点的偏差为:F i+1,j=(x i-1)2+y i2-R2=x i2-2x i+1+ y i2-R2= x i2+ y i2-R2+1即F i+1,j= F i,j-2x i+1 (8-5)若加工P(x i,y i)在圆弧内,则有F i,j=x i2+y j2-R2<0若逼近该圆需沿+y方向进给一步,移到新加工点P(x i,y i),此时新加工点的坐标值图8-5 第一象限圆弧插补程序框图为新加工点的偏为:F i,j+1=x i2+(y i+1)2-R2=x i2+ y i2+1 -R2= x i2+ y i2-R2+1+2y iF i,j+1= F i,j-2y i+1 (8-6)从(8-5)和式(8-6)两式可知,递推偏差计算仅为加法(或者减法)运算,大大降低了计算的复杂程度。
逐点比较法直线插补程序
一、实验目的
1、进一步理解逐点比较法直线插补的原理
2、掌握在计算机环境中完成直线逐点比较法插补的软件实现方法。
二、实验设备
1、计算机及其操作系统
2、VB 6.0软件
三、实验原理
机床数控系统依据一定方法确定刀具运动轨迹,进而产生基本廓形曲线,如直线、圆弧等。
其它需要加工的复杂曲线由基本廓形逼近,这种拟合方式称为“插补”(Interpolation)。
“插补”实质是数控系统根据零件轮廓线型的有限信息(如直线的起点、终点,圆弧的起点、终点和圆心等),在轮廓的已知点之间确定一些中间点,完成所谓的“数据密化”工作。
四、实验方法
本次实验是在VB6.0环境下完成了直线逐点比较法插补的软件实现。
软件中实现,主要分为两部分,一是人际交互,用户采集数据和演示其插补过程;二是插补的计算过程,此为这次实验的核心。
逐点比较法的插补有四个工作节拍:偏差判别、进给、偏差计算和终点判别,第一象限直线插补的偏差判别公式如下:
Fi = Xe Yi -Y e Xi
Fi≥0时,偏差判别公式为Fi+1= Fi-Y e,向X正方向进给
Fi< 0时,偏差判别公式为Fi+1= Fi+Xe,向Y正方向进给
其工作流程图如下所示:
根据流程编写合理的界面和控制主程序代码。
此程序是根据《微型计算机控制技术》(第二版)清华大学出版社
第三章数字控制技术——3.2插补原理中的3.2.1逐点比较法的直线插补,3.2.2逐点比较法圆弧插补编写的。
其中的变量定义,原理依据均来源于此,如有疑问,请参考书中的讲解。
尤其是例子,以下两个程序的第一个运行图均与例题中的一致。
一、四象限直线插补程序
分别加工第一、二、三、四象限直线,起点均为(0,0),终点坐标为(NX,NY),进行插补计算。
程序中(NX,NY)为终点坐标;NXY为总步数;XOY=1,2,3,4,分别为第一、二、三、四象限; ZF=1,2,3,4,分别代表+x,-x,+y,-y走步方向;FM为加工点偏差,初值为0。
源程序:
# include "stdio.h"
# include "string.h"
# include "math.h"
void main()
{ int NX,NY,NXY,BS,XOY,ZF;
int FM=0;
char a[10]="+X",b[10]="-X",c[10]="+Y",d[10]="-Y",e[10];
printf("\n\n请输入NX,NY\n");
scanf("%d %d",&NX,&NY);
{if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}
printf("终点在第%d象限\n",XOY);
printf("\n 步数坐标进给偏差计算终点判断\n\n");
BS=fabs(NX) + fabs(NY);
for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0;NXY--)
{ if(FM>=0)
{if(XOY==1||XOY==4)
{ ZF=1;
strcpy(e,a);}
else
{ ZF=2;
strcpy(e,b);
}
FM=FM-fabs(NY);
printf(" %d %s FM=%d NXY=%d\n\n",BS-NXY,e,
.
FM,NXY);}
else
{if(XOY==1||XOY==2)
{
ZF=3;
strcpy(e,c);
}
else
{ZF=4; strcpy(e,d);}
FM=FM+fabs(NX);
printf(" %d %s FM=%d NXY=%d\n\n",BS-NXY,e, FM,NXY);}}}
图一:插补计算过程
第一象限直线OA,起点为(0,0),终点坐标为A(6,4)
图二:插补计算过程
第二象限直线OA,起点为(0,0),终点坐标为A(-3,2)
图三:插补计算过程
第三象限直线OA,起点为(0,0),终点坐标为A(-2,-3)
图四:插补计算过程
第四象限直线OA,起点为(0,0),终点坐标为A(3,-2)
二.四象限逐点比较法圆弧插补
加工逆圆弧(或顺圆弧)A⌒B,圆弧的圆心在坐标原点,已知起点坐标为(X0,Y0)终点坐标(NX,NY)。
程序中(X0,Y0)为起点坐标;(NX,NY)为终点坐标;NXY为总步数;RNS=1,2,3,4,5,6,7,8,分别为八种圆弧(SR1,SR2,SR3,SR4,NR1,NR2,NR3,NR4,其中SR 表示逆圆弧,NR表示顺圆弧,)第一至第四象限的顺圆弧和逆圆弧; ZF=1,2,3,4,分别代表+x,-x,+y,-y走步方向;FM为加工点偏差,初值为0。
圆弧插补计算公式和进给方向
偏差圆弧种类进给方向偏差计算坐标计算
源程序:
# include "stdio.h"
# include "string.h"
# include "math.h"
void main()
{ int NX,NY,NXY,BS,RNS,ZF,X0=0,Y0=0,XM,YM;
int FM=0;
char a[10]="+X",b[10]="-X",c[10]="+Y",d[10]="-Y",e[10];
printf("请输入X0,Y0,NX,NY\n");
scanf("%d %d %d %d",&X0,&Y0,&NX,&NY); {
if(X0<NX)
if(Y0>NY)
if(X0>0)
RNS=7;
else
RNS=1;
else
if(X0>0)
RNS=8;
else
RNS=2;
else
if(Y0>NY)
if(X0>0)
RNS=4;
else
RNS=6;
else
if(X0>0)
RNS=5;
else
RNS=3;}
printf("该圆弧为%d\n",RNS);
BS=fabs(NX-X0) + fabs(NY-Y0);
XM=X0;
YM=Y0;
for(NXY= fabs(NX-X0) + fabs(NY-Y0)-1;NXY>=0;NXY--) {
if(RNS==1||RNS==3||RNS==6||RNS==8)
{
if(FM>=0)
{
if(RNS==1||RNS==8)
{ ZF=1;
strcpy(e,a);
}
else
{ ZF=2;
strcpy(e,b);}
FM=FM+2*fabs(XM)+1;
XM=XM+1;
printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);
}
else
{
if(RNS==1||RNS==6)
{
ZF=3;
strcpy(e,c);
}
else
{ZF=4;
strcpy(e,d);
}
FM=FM-2*fabs(YM)+1;
YM=YM-1;
printf(" %d %s FM=%d XM=%d,YM=%d
NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}}
else
if(FM>=0)
{
if(RNS==2||RNS==7)
{ ZF=1;
strcpy(e,a);
}
else
{ ZF=2;
strcpy(e,b);
}
FM=FM-2*fabs(XM)+1;
XM=XM-1;
printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}
else
{
if(RNS==2||RNS==5)
{ ZF=3;
strcpy(e,c);}
else
{ ZF=4;
strcpy(e,d);}
FM=FM+2*fabs(YM)+1;
YM=YM+1;
printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}}}
第一象限逆圆弧A⌒B,圆弧的圆心在坐标原点,已知起点坐标为(0,4)终点坐标(4,0)。
圆弧插补计算过程:。