直线及圆弧插补程序--逐点比较法

合集下载

实验一 逐点比较法圆弧和直线插补实验

实验一 逐点比较法圆弧和直线插补实验

Y B(xe,ye)
M(xm,ym)
Rm R
A(x0,y0)
O 图3 圆弧插补原理图 X
圆弧插补原理参见上图,对于第一象限逆圆,设圆弧的起点为 A(x0,y0),终点为 B(xe,ye), 圆弧半径为 R。加工点为 M(xm,ym),它与圆心的距离为 Rm,则
(1)偏差计算
Fm
=
Rm2
− R2
=
xm2
p102=p102-p104 p101=p101+1 x-0.1 else p102=p102+p103 p101=p101+1 y0.1
;计算新的偏差值(Fi+1=Fi-ya) ;步数计数器加一 ;X方向进分别是(-0.1 -0.5 -1.0) ;偏差判别(若P102小于0表示刀具在直线下方) ;计算新的偏差值(Fi+1=Fi+xa) ;步数计数器加一 ;Y方向进给分别是(0.1 0.5 1.0)
endif
endwhile
close
(3)根据直线插补编成格式,编写所给圆弧插补程序。 各组的圆弧的插补任务是: u 第一组:圆弧半径 50,第二象限顺圆;
第二组:圆弧半径 50,第二象限逆圆; 第三组:圆弧半径 60,第三象限顺圆; 第四组:圆弧半径 60,第三象限逆圆; 第五组:圆弧半径 70,第四象限顺圆; 第六组:圆弧半径 70,第四象限逆圆; open prog7 clear linear inc p101=0 p102=0 p103=0 p104=50 while(p101!>100) if(p102!<0) y0.5 p101=p101+1 p102=p102-2*p104+1 p104=p104-1 else -x0.5 p101=p101+1 p102=p102-2*p103+1 p103=103-1 endif endwhile close

直线及圆弧插补程序--逐点比较法

直线及圆弧插补程序--逐点比较法
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)。
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;
此程序是根据《微型计算机控制技术》(第二版)清华大学出版社
第三章数字控制技术——3.2插补原理中的3.2.1逐点比较法的直线插补,3.2.2逐点比较法圆弧插补编写的。其中的变量定义,原理依据均来源于此,如有疑问,请参考书中的讲解。尤其是例子,以下两个程序的第一个运行图均与例题中的一致。

逐点比较法

逐点比较法


Fi1 Fi X e
6
在插补计算、进给的同时还要进行终点判别。常用终点判 别方法是:
设置一个长度计数器,从直线的起点走到终点,刀具沿
X 轴应走的步数为X e,沿Y 轴走的步数为Ye,计数器中存入 X和Y两坐标进给步数总和∑=∣Xe∣+∣Ye∣,当X 或Y
坐标进给时,计数长度减一,当计数长度减到零时,即∑= 0时,停止插补,到达终点。
终点判别:判断是否到达终点,若到 达x ,结束插补;否则,继续以上四个
步骤(如图3-3所示)。
图3-3 逐点比较法工作循环图
3
2. 直线插补
图3-4所示第一象限直线OE为给定轨迹,其方程为
XeY-XYe=0
(3-1)
P(X,Y)为动点坐标,与直线的关系有三种情况:
(1)若P1点在直线上方,则有XeY-XYe>0 E (2) 若P点在直线上,则有 XeY-XYe=0
2.由偏差方程确定加工动点引起的偏 差符号(若要计算偏差量,则偏差方程系数不能简 化)。
3.下一步插补方向确定原则:向使加 工偏差减小、并趋向轨迹终点的方向插补
.(将偏差等于零的情况并入偏差大于零的情况)。
4.关于插补量:每次插补一个脉冲当 量的位移
12
3. 圆弧插补
在圆弧加工过程中,可用动点到圆心的距离来描述刀具位置与 被加工圆弧之间关系。
b) 逆圆弧
图3-9 第一象限顺、逆圆弧
14
偏差递推简化:对第一象限顺圆,Fi≥0,动点Pi(Xi,Yi)应 向-Y向进给,新的动点坐标为(Xi+1,Yi+1),且Xi+1=Xi,Yi +1=Yi-1,则新点的偏差值为:
15
若Fi<0时,沿+X向前进一步,到达(Xi+1,Yi)点,新点

例题:逐点比较法

例题:逐点比较法

-、逐点比较法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)两式可知,递推偏差计算仅为加法(或者减法)运算,大大降低了计算的复杂程度。

(二)逐点比较法圆弧插补PPT课件

(二)逐点比较法圆弧插补PPT课件
5
同理,对于第一象限顺圆加工时,即B→A,当Fi≥0时, 应向-Y方向进给一步,当Fi<0时,应向+X方向进给 一步。
Y
B(Xe,Ye)
Pi(Xi,Yi)
A(Xo,Yo)
O
X
6
当Fi≥0时,向-Y方向进给一步,动点由Pi(Xi,Yi) 移动到 Pi+1(Xi,Yi +1),则新动点的坐标为 Yi+1=Yi -1
偏差计算
终点判别
0
F0=0,Xo=5,Yo=0 ∑=10
1 F0=0 -X F1=F0-2Xo+1= -9,X1=4,Y1=0∑=9
2 F1=-9 +Y F2=F1+2Y1+1= -8,X2=4,Y2=∑1=8
3 F2=-8 +Y F3=F2+2Y2+1= -5,X3=4,Y3=∑2=7
4 F3= -5 +Y F4=F3 +2Y3+1 =0, X4=4,Y4=3∑=6
2 F1=-5 +Y F2=F1+2Y1+1= -4,X2=2,Y2=∑1=4
3 F2=-4 +Y 4 F3= -1 +Y 5 F4=4 -X
F3=F2+2Y2+1= -1,X3=2,Y3=∑2=3 F4=F3 +2Y3+1 =4, X4=2,Y4=3∑=2 F5=F4-2X4+1 =1, X5=1,Y5=3∑=1
Y
Fi<0
Fi≥0
Fi≥0 Fi<0
Fi<0
O Fi≥0
X
Fi<0 Fi≥0
17
2、圆弧插补的象限处理
前面的圆弧插补(顺圆、逆圆)只限于第一象限,其他 情况如图所示: Y

数控机床DDA数字积分法插补第一象限直线,逐点比较法插补二三象限顺圆弧

数控机床DDA数字积分法插补第一象限直线,逐点比较法插补二三象限顺圆弧
3.1 程序开始运行时显示介面
3.2 执行计算
在右侧面板中有参数输入区,方式选择区以及执行按钮等操作。
若输入参数和符合要求则出现错误对话框;“参数有误”
若不选择插补对象为‘直线’或‘圆弧’直接按下‘复位’按钮会出现警示对话框提示“请选择插补对象”
注:在直线插补中,对起始点坐标和终点坐标不作要求,但步长必须不能为0;在圆弧插补中,起始点坐标必须为二三象限的点,且终止点必须在起始点下侧,这事保证圆弧为劣弧的条件之一。步长在任何情况下不能为0 。
4.2 主要算法的实现
4.2.1参数声明
起点坐标(sx,sy);终点坐标(ex,ey);
圆心坐标(cx,cy);步长bc;
4.2.2复位操作程序:
functionfw_Callback(hObject, eventdata, handles)
globalsx sy ex ey cx cy bc m vx1 vy1 rx1 ry1
3.2 执行计算……………………………………………………………5
3.3DDA法直线插补实例………………………………………………6
3.4逐点比较法插补第二三象限逆时针圆弧…………………………7
四、主要算法及源程序
4.1 程序设计概述………………………………………………………8
set(gca,'YTick',[-10:1:10]);
axis([-10 10 -10 10]);
axismanual;
ifs_1==0&&s_2==0
warndlg('请选择插补对象');
else
ifget(handles.zx,'value')
m=str2double(get(handles.m,'String'));

2--插补象限、圆弧走向处理以及逐点比较法合成进给速度

2--插补象限、圆弧走向处理以及逐点比较法合成进给速度

于是,X轴方向和Y轴方向的进给速度为
vx 60 f X
v
y
60
fY
刀具的合成进给速度为
v vx2 vy2 60 f X 2 fY 2
当刀具沿着平行于坐标轴的方向进行切削时,其进给速度最大,该速度 称为脉冲源进给速度。
vMF 60 fMF 60 ( f X fY ) vx vy
② |Y|=|Y|-1
② |X|=|X|-1 ② |Y|=|Y|+ 1
② |X|=|X|+1
Y SR3、NR4
N +Y -Y
Y SR2、NR3
N
+X
-X
Y SR2、NR1
N +Y -Y
Y SR1、NR4
N
+X
-X
∑= ∑-1
∑= 0
N
Y
结束
(三)圆弧过象限 直线只可能处于一个象限中,因此不存在过象限问题。但是圆弧有可能 跨越几个象限,这时需要在两象限的交接处做相应的处理,此即圆弧过象限 问题。 当圆弧过象限时,具有如下特点: ① 在过象限前后,动点坐标的符号会发生改变; ② 在过象限后,圆弧的走向不变。 逆圆弧过象限的顺序为:NR1 → NR2 → NR3 → NR4 → NR1 →• • • 顺圆弧过象限的顺序为:SR1 → SR4 → SR3 → SR2 → SR1 →• • • ③ 过象限圆弧与坐标轴必有交点,当动点处在坐标轴上时必有一个坐 标值为零。此点可以作为过象限的标志。 ④ 终点判别不能简单地直接使用前述的三种方法,否则将丢失一部分 圆弧轮廓。
Y (0,5)
(3,4) (4,3)
X (5,0)
第一象限顺圆弧的插补问题可转换为第一象限逆圆弧的插补问题,转换方 法如下。

数控技术 第三章 插补

数控技术 第三章 插补

3.逐点比较法圆弧插补 3.逐点比较法圆弧插补
(1)偏差函数 任意加工点P ),偏差函数 偏差函数F 任意加工点Pi(Xi,Yi),偏差函数Fi可表示为
Fi = X i2 + Yi 2 − R 2
=0,表示加工点位于圆上; 若Fi=0,表示加工点位于圆上; Y >0,表示加工点位于圆外; 若Fi>0,表示加工点位于圆外; <0, 若Fi<0,表示加工点位于圆内
Y Ae (Xe,Ye) F>0 Pi (Xi,Yi) F<0 X
为便于计算机计算) (2)偏差函数字的递推计算 (为便于计算机计算 为便于计算机计算 >=0,规定向+ 方向走一步(若坐标单位用脉冲当量表示) 若Fi>=0,规定向+X方向走一步(若坐标单位用脉冲当量表示)
Xi+1 = Xi +1 Fi+1 = XeYi −Ye (Xi +1) = Fi −Ye
2.逐点比较法直线插补 2.逐点比较法直线插补
(1)偏差函数构造 对于第一象限直线OA上任一点( OA上任一点 对于第一象限直线OA上任一点(X,Y) YX e − XYe = 0 若刀具加工点为Pi( ),则该点的偏差 若刀具加工点为Pi(Xi,Yi),则该点的偏差 Pi 函数F 函数Fi可表示为 Fi = Yi X e − X i Ye 若Fi=0,表示加工点位于直线上; 表示加工点位于直线上; 表示加工点位于直线上方; 若Fi>0,表示加工点位于直线上方; 表示加工点位于直线下方。 若Fi<0,表示加工点位于直线下方。
F=0 F<0 F>0 F<0 F>0 F=0 F<0 F>0 F<0 F>0

逐点比较法直线插补程序

逐点比较法直线插补程序

逐点比较法直线插补程序
一、实验目的
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正方向进给
其工作流程图如下所示:
根据流程编写合理的界面和控制主程序代码。

逐点比较法第一象限直线圆弧插补

逐点比较法第一象限直线圆弧插补

逐点比较法第一象限直线,圆弧插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。

逐点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。

只要将脉冲当量取得足够小,就可以达到精度要求。

逐点比较插补法在脉冲当量为0.01mm,系统进给速度小于3000mm/min时,能很好的满足要求。

一、逐点比较法直线插补如下图所示设直线 oA 为第一象限的直线,起点为坐标原点o (0 , 0) ,终点坐标为, A( ) , P() 为加工点。

若 P 点正好处在直线 oA 上,由相似三角形关系则有即点在直线 oA 上方 ( 严格为直线 oA 与 y 轴正向所包围的区域 ) ,则有即若 P 点在直线 oA 下方 ( 严格为直线 oA 与 x 轴正向所包围的区域 ) ,则有图 3 — 1 逐点比较法第一象限直线插补即令则有:①如,则点 P 在直线 oA 上,既可向 +x 方向进给一步,也可向 +y 方向进给一步;②如,则点 P 在直线 oA 上方,应向 +x 方向进给一步,以逼近oA 直线;③如,则点 P 在直线 oA 下方,应向 +y 方向进给一步,以逼近 oA 直线一般将及视为一类情况,即时,都向 +x 方向进给一步。

当两方向所走的步数与终点坐标相等时,停止插补。

这即逐点比较法直线插补的原理。

对第一象限直线 oA 从起点 ( 即坐标原点 ) 出发,当 F 时, +x 向走一步;当 F<0 时,y 向走一步。

特点:每一步都需计算偏差,这样的计算比较麻烦。

递推的方法计算偏差:每走一步后新的加工点的偏差用前一点的加工偏差递推出来。

采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故。

下面推导其递推公式。

设在加工点 P( ) 处,,则应沿 +x 方向进给一步,此时新加工点的坐标值为新加工点的偏差为即若在加工点 P( ) 处,,则应沿 +y 方向进给一步,此时新加工点的坐标值为,新加工点的偏差为即综上所述,逐点比较法直线插补每走一步都要完成四个步骤 ( 节拍 ) ,即:(1) 位置判别根据偏差值大于零、等于零、小于零确定当前加工点的位置。

逐点比较法插补C语言程序

逐点比较法插补C语言程序

//该函数在VC++6.0下编译测试通过,可实现直线、圆弧、完整圆的逐点比较法插补;并可将插补函数计算出的数//据点写入xxx.txt文件中//若有任何疑问,欢迎邮件联系,***********************//版权所有,侵权必究。

转载时请注明来自大连理工机械工程学院Deanjiang#include<stdio.h>#include<math.h>#include<stdlib.h>/********************************************************************//* 函数名: InsertPoint *//* 功能:控制机床各轴进给并将进给结果写入文件中*//* 参数:double x, double y 插补点单位:毫米*//* 说明:与机床硬件关联,每产生一个点调用一次*//********************************************************************/void InsertPoint(double xCur,double yCur){extern FILE *fp;char ch=10;printf("xCur=%f,yCur=%f\n",xCur,yCur);fprintf(fp,"%f,%f",xCur,yCur);fputc(ch,fp);}/********************************************************************//* 函数名: Judge_Quadrant *//* 功能:判断参数坐标的所在象限并返回相应象限值*//* 参数:double x mm*//*double y mm*//********************************************************************/unsigned short Judge_Quadrant(double x, double y){unsigned short nDir;if (x>=0){ //象限判断if (y>=0){nDir=1;return 1;}else{nDir=4;return 4;}}else{if (y>=0)return 2;}else{nDir=3;return 3;}}}/********************************************************************/ /* 函数名: PBP_Line */ /* 功能:逐点比较法直线插补*/ /* 参数:double step步长mm*/ /*double XEnd, double YEnd插补终点mm*//********************************************************************/ void PBP_Line(double step, double XEnd, double YEnd){double lDevVal;//偏差值double xCurVal=0,yCurVal=0; //当前点的实际位置long StepMount; //插补总步数long StepCount=0;//插补次数计数器unsigned short nDir;//当前点所在象限nDir=Judge_Quadrant(XEnd,YEnd); //象限判断XEnd=labs(XEnd);YEnd=labs(YEnd);StepMount=(long) (XEnd+YEnd)/step;lDevVal=yCurVal*XEnd-xCurVal*YEnd;while (StepCount<StepMount){//终点判别/////////////////////////////////////////////////////////////if (lDevVal>=0){ //偏差〉=0switch(nDir) {case 1:xCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 2:xCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 3:xCurVal-=step;case 4:xCurVal+=step;InsertPoint(xCurVal,yCurVal);break;}lDevVal-=YEnd;}else{ //偏差<0switch(nDir) {case 1:yCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 2:yCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 3:yCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 4:yCurVal-=step;InsertPoint(xCurVal,yCurVal);break;}lDevVal+=XEnd;}StepCount++;}}/********************************************************************//* 函数名: PBP_Circle *//* 功能:逐点比较法圆弧插补*//* 参数:double step步长mm*//*double XStart,double YStart插补起点mm*//*double XEnd,double YEnd插补终点mm*//*double radius圆弧半径mm*//* bool bIsCW圆弧插补方向0或1*//********************************************************************/void PBP_Circle(double step, double XStart, double YStart, double XEnd,double YEnd, double radius, int bIsCW) {double lDevVal,goallDevVal;//当前误差和与终点的差值double xCurVal=XStart,yCurVal=YStart;//当前坐标unsigned short nDir;//象限goallDevVal=(xCurVal-XEnd)*(xCurVal-XEnd)+(yCurVal-YEnd)*(yCurVal-YEnd); while(goallDevVal>=(step*step)||stepcount==0){if(lDevVal>=0)//误差大于等于零{if(bIsCW==0)//逆圆插补{nDir=Judge_Quadrant(xCurVal,yCurVal);switch(nDir){case 1:xCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 2:yCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 3:xCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 4:yCurVal+=step;InsertPoint(xCurVal,yCurVal);break;}}else//顺圆插补{nDir=Judge_Quadrant(xCurVal,yCurVal);switch(nDir){case 1:yCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 2:xCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 3:yCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 4:xCurVal-=step;else//误差小于零{if(bIsCW==0)//逆圆插补{nDir=Judge_Quadrant(xCurVal,yCurVal);switch(nDir){case 1:yCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 2:xCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 3:yCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 4:xCurVal+=step;InsertPoint(xCurVal,yCurVal);break;}}else//顺圆插补{nDir=Judge_Quadrant(xCurVal,yCurVal);switch(nDir){case 1:xCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 2:yCurVal+=step;InsertPoint(xCurVal,yCurVal);break;case 3:xCurVal-=step;InsertPoint(xCurVal,yCurVal);break;case 4:yCurVal-=step;lDevVal=xCurVal*xCurVal+yCurVal*yCurVal-radius*radius;goallDevVal=(xCurVal-XEnd)*(xCurVal-XEnd)+(yCurVal-YEnd)*(yCurVal-YEnd);stepcount++;}}FILE *fp;//文件指针int main(){double ft=1000.0*10/60/1000;int j,j1,jj;char fn[10];printf("please input filename:\n");//输入要写入数据的文件名,如pbp_circle.txt scanf("%s",fn);if((fp=fopen(fn,"w"))==NULL){printf("can't open file\n");exit(0);}PBP_Circle(1,50,0,50,0,50,1);//输入需要插补的圆弧的起点、终点、步长、方向//PBP_Line(1,50,30);//输入需要插补的直线的终点、步长fclose(fp);return 0;}。

逐点比较法圆弧插补

逐点比较法圆弧插补

逐点比较法圆弧插补逐点比较法圆弧插补过程与直线插补过程类似,每进给一步也都要完成四个工作节拍:偏差判别、坐标进给、偏差计算、终点判别。

但是,逐点比较法圆弧插补以加工点距圆心的距离大于还是小于圆弧半径来作为偏差判别的依据。

如图5-7所示的圆弧AB,其圆心位于原点O(0,0),半径为R,令加工点的坐标为P(xi,yj),则逐点比较法圆弧插补的偏差判别函数为当F=0时,加工点在圆弧上;当F>0时,加工点在圆弧外;当F<0时,加工点在圆弧内。

同插补直线时一样,将Fi,j=0同Fi,j>0归于一类。

下面以第一象限圆弧为例,分别介绍顺时针圆弧和逆时针圆弧插补时的偏差计算和坐标进给情况。

1.插补第一象限逆圆弧1)当Fi,j≥0时,加工点P(xi,yj)在圆弧上或圆弧外,-X方向进给一个脉冲当量,即向趋近圆弧的圆内方向进给,到达新的加工点Pi-1,j,此时xi -1=xi-1,则新加工点Pi-1,j的偏差判别函数Fi-1,j为(2)当Fi,j<0时,加工点P(xi,yj)在圆弧内,+Y方向进给一个脉冲当量,即向趋近圆弧的圆外方向进给,到达新的加工点Pi,j+1,此时yj+1=yj+1,则新加工点Pi,j+1的偏差判别函数Fi,j+12.插补第一象限顺圆弧1)当Fi,j≥0时,加工点P(xi,yj)在圆弧上或圆弧外,-Y方向进给一个脉冲当量,即向趋近圆弧的圆内方向进给,到达新的加工点Pi,,j-1,此时yj-1=yj-1,则新加工点Pi,j-1的偏差判别函数Fi,j-1为2)当Fi,j<0时,加工点P(xi,yj)在圆弧内,+X方向进给一个脉冲当量,即向趋近圆弧的圆外方向进给,到达新的加工点Pi+1,j,此时xi+1=xi +1,则新加工点Pi+1,j的偏差判别函数为Fi+1,j由以上分析可知,新加工点的偏差是由前一个加工点的偏差Fi,j及前一点的坐标值xi、yj递推出来的,如果按式(5-6)、(5-7)、(5-8)、(5-9)计算偏差,则计算大为简化。

逐点比较法1

逐点比较法1

§2—1逐点比较法逐点比较法是我国数控机床中广泛采用的一种插补方法,它能实现直线、圆弧和非圆二次曲线的插补,插补精度较高。

逐点比较法,顾名思义,就是每走一步都要将加工点的瞬时坐标同规定的图形轨迹相比较,判断其偏差,然后决定下一步的走向,如果加工点走到图形外面去了,那么下一步就要向图形里面走;如果加工点在图形里面,那么下一步就要向图形外面走,以缩小偏差。

这样就能得出一个非常接近规定图形的轨迹,最大偏差不超过一个脉冲当量。

在逐点比较法中,每进给一步都须要进行偏差判别、坐标进给、新偏差计算和终点比较四个节拍。

下面分别介绍逐点比较法直线插补和圆弧插补的原理。

一、逐点比较法直线插补如上所述,偏差计算是逐点比较法关键的一步。

下面以第Ⅰ象限直线为例导出其偏差计算公式。

图2-1 直线插补过程点击进入动画观看逐点比较法直线插补如图2—1所示,假定直线的起点为坐标原点,终点A的坐标为为加工点,若P点正好处在直线上,那么下式成立:若任意点在直线的上方(严格地说,在直线与y轴所成夹角区域内),那么有下述关系成立:亦即:由此可以取偏差判别函数为:由的数值(称为“偏差”)就可以判别出P点与直线的相对位置。

即:当=0时,点正好落在直线上;当>0时,点落在直线的上方;当<0时,点落在直线的下方。

从图2—1看出,对于起点在原点,终点为A()的第Ⅰ象限直线OA来说,当点P 在直线上方(即>0)时,应该向+x方向发一个脉冲,使机床刀具向+x方向前进一步,以接近该直线;当点P在直线下方(即<0)时,应该向+y方向发一个脉冲,使机床刀具向+y方向前进一步,趋向该直线;当点P正好在直线上(即=0)时,既可向+x方向发一脉冲,也可向+y方向发一脉冲。

因此通常将>0和=0归于一类,即≥0。

这样从坐标原点开始,走一步,算一次,判别,再趋向直线,逐点接近直线,步步前进。

当两个方向所走的步数和终点坐标A()值相等时,发出终点到达信号,停止插补。

逐点比较法计算

逐点比较法计算

第二节逐点比较法插补(数控基础第三章插补计算原理、刀具半径补偿与速度控制)发布:2009-7-19 19:24 | 作者:唐义|来源:本站|查看:6次|字号:小中大逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。

逐点比较法既可以作直线插补又可以作圆弧插补。

这种算法的特点是,运算直观,插补误差小于一个脉冲当量,输岀脉冲均匀,而且输岀脉冲的速度变化小,调节方便,因此在两坐标数控机床中应用较为普遍。

一、逐点比较法直线插补 1 .逐点比较法的直线插补原理在图3-1所示平面第一象限内有直线段以原点为起点,以为终点,直线方程为:第一象限直线插,改写为:如果加工轨迹脱离直线,则轨迹点的、坐标不满足上述直线方程。

在第一象限中,对位于直线上方的点则有:对位于直线下方的点B,则有:当加工点落在直线上时,;当加工点落在直线上方时,;当加工点落在直线下方时,。

我们称为直线插补偏差判别式”或偏差判别函数”,的数值称为偏差例如图3-2待加工直线,我们运用下述法则,根据偏差判别式,求得图中近似直线(由折线组成)。

若刀具加工点的位置处在直线上方(包括在直线上),即满足>0时向轴方向发岀一个正向运动的进给脉冲(),使刀具沿轴坐标动一步(一个脉冲当量5),逼近直线;若刀具加工点的位置处在直线下方, 即满足V0时,向轴发出一个正向运动的进给脉冲(),使刀具沿轴移动一步逼近直线。

但是按照上述法则进行运算判别,要求每次进行判别式运算一一乘法与减法运算,这在具体电路或程序中实现不是最方便的。

一个简便的方法是:每走一步到新加工点,加工偏差用前一点的加工偏差递推岀来,这种方法称递推法”。

若>0时,则向轴发岀一进给脉冲,刀具从这点向方向迈进一步,新加工点的偏差值为叽•=耳儿-E +1)兀p=耳丹-否几-y』二% -儿p眼昌疑j =昌j -儿(3-1)屮如果某一时刻加工点玖花申)的骂j<0时,则向》瞬岀一进给脉冲,刀具从这点向丿方向迈进一歩,新加工点P(耳儿J的偏差值尬耳护 1 二兀+1)一 3 *=兀片-咼几+ 2眼恥产% +兀(3-2h根据式(3-1 )及式(3-2 )可以看出,新加工点的偏差值完全可以用前一点的偏差递推出来。

数控技术数控机床的插补原理直线插补与圆弧插补计算原理

数控技术数控机床的插补原理直线插补与圆弧插补计算原理

(三)、插补方法的种类与特点
插补器: 插补是数控系统必备功能, NC中由硬件完成,
CNC中由软件实现,两者原理相同。
硬件 通过硬件逻辑电路 插补速度快 插补器 来实现插补
软件 利用CNC系统的微 插补器 处理器执行相应的
插补程序来实现
结构简单、灵活易变、可
靠性好,大部分CNC系统 采用了软件插补方式
偏差判别函数:Fm = ymxe-xmye
(五)逐点比较法直线插补
2. 算法分析(第Ⅰ象限)
终点比较:
判别是否到达终点,若到达终点就结束该插 补运算;如未到达再重复上述的循环步骤。
方法一 方法二
用Xe+Ye作为计数器,每走一步对计 数器进行减 1计算,直到计数器为零 时,便到达终点。
用通常根据刀具沿X、Y两轴所走的 总步数m来判断直线是否加工完毕, 总步数为:N=|xA|+|yA|
部分高档CNC:软件插补实现粗插补,硬件插补实现精插补
(三)、插补方法的种类与特点
插补分类:(插补采用的原理和计算方法)
基准脉冲插补:(又称为行程标量插补或脉冲增量插补) 每次插补结束,向每个运动坐标输出基准脉冲序列。 脉冲序列的频率代表了运动速度,而脉冲的数量表示 移动量。
①逐点比较法;②数字积分法;③数字脉冲乘法器插补法;④矢 量判别法;⑤比较积分法;⑥最小偏差法;⑦目标点跟踪法;⑧ 单步追踪法;⑨直接函数法。
Fm Fm
(五)逐点比较法直线插补
2. 算法分析(第Ⅰ象限)
新偏差计算:
每走一步到达新的坐标点,按偏差公 式计算新的偏差
+△x进给 +△y进给
xm+1 = xm+1, ym+1 =ym Fm+1=ym+1xe-xm+1ye=ymxe-(xm+1)ye=Fm-ye

直线、圆弧插补

直线、圆弧插补

插补是在组成轨迹的直线段或曲线段的起点和终点之间,按一定的算法进行数据点的密化工作,以确定一些中间点。

从而为轨迹控制的每一步提供逼近目标。

逐点比较法是以四个象限区域判别为特征,每走一步都要将加工点的瞬时坐标与相应给定的图形上的点相比较,判别一下偏差,然后决定下一步的走向。

如果加工点走到图形外面去了,那么下一步就要向图形里面走;如果加工点已在图形里面,则下一步就要向图形外面走,以缩小偏差,这样就能得到一个接近给定图形的轨迹,其最大偏差不超过一个脉冲当量(一个进给脉冲驱动下工作台所走过的距离)。

直线插补是用在计算机图形显示,或则数控加工的近似走刀等情况下的.以数控加工为例子一个零件的轮廓往往是多种多样的,有直线,有圆弧,也有可能是任意曲线,样条线等. 数控机床的刀具往往是不能以曲线的实际轮廓去走刀的,而是近似地以若干条很小的直线去走刀,走刀的方向一般是x和y方向.插补方式有:直线插补,圆弧插补,抛物线插补,样条线插补等所谓直线插补就是只能用于实际轮廓是直线的插补方式(如果不是直线,也可以用逼近的方式把曲线用一段段线段去逼近,从而每一段线段就可以用直线插补了).首先假设在实际轮廓起始点处沿x方向走一小段(一个脉冲当量),发现终点在实际轮廓的下方,则下一条线段沿y 方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿y方向走一小段,直到在实际轮廓上方以后,再向x方向走一小段,依次循环类推.直到到达轮廓终点为止.这样,实际轮廓就由一段段的折线拼接而成,虽然是折线,但是如果我们每一段走刀线段都非常小(在精度允许范围内),那么此段折线和实际轮廓还是可以近似地看成相同的曲线的--------这就是直线插补.联动与插补决定质点空间位置需要三个坐标,决定刚体空间位置需要六个坐标。

一个运动控制系统可以控制的坐标的个数称做该运动控制系统的轴数。

一个运动控制系统可以同时控制运动的坐标的个数称做该运动控制系统可联动的轴数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

此程序是根据《微型计算机控制技术》(第二版)清华大学出版社
第三章数字控制技术——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)。

圆弧插补计算过程:。

相关文档
最新文档