逐点比较法第一象限直线圆弧插补_第1页
逐点比较法第一象限直线圆弧插补_第2页
逐点比较法第一象限直线圆弧插补_第3页
逐点比较法第一象限直线圆弧插补_第4页
逐点比较法第一象限直线圆弧插补_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、逐点比较法第一象限直线,圆弧插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点 与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。逐 点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。 只要将脉冲当量取得足够小,就可以达到精度要求。逐点比较插补法在脉冲当 量为0.01mm系统进给速度小于3000mm/min时,能很好的满足要求。一、逐点比较法直线插补图1 理点比较法插补直线浹程图如下图所示设直线oA为第一象限的直线,起点为坐标原点 o (0 , 0),终点坐标为,A(兀厂兀),P(心乃)为加工点。若P点正好处在直线oA上,由相似三角形

2、关系则有逐也忙较社常象限直蝶旁补点在直线oA上方(严格为直线oA与y轴正向所包围的区域),则有叫 %即八'' '若P点在直线oA下方(严格为直线oA与x轴正向所包围的区域),则有图3 1逐点比较法第一象限直线插补一% %即八'令吧=利厂轨空)则有: 如 氐匸°,则点P在直线oA上,既可向+x方向进给一步,也可向+y方向进给一步; 如知则点P在直线oA上方,应向+x方向进给一步,以逼近oA 直线; 如 送、严,则点p在直线oA下方,应向+y方向进给一步,以逼近oA 直线一般将 虫"及二"视为一类情况,即氐乂时,都向+x方向进给一步。当

3、两方向所走的步数与终点坐标相等时,停止插补。这即逐点比较法直线插 补的原理。对第一象限直线oA从起点(即坐标原点)出发,当F引时,+x向 走一步;当F<0时,y向走一步特点:每一步都需计算偏差,这样的计算比较麻烦递推的方法计算偏差:每走一步后新的加工点的偏差用前一点的加工偏差递推出来。采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故。下面推导其递推公式。设在加工点P(l心片)处,兀円,则应沿+x方向进给一步,此时 新加工点的坐标值为码=兀十Ly;=旳新加工点的偏差为也二工/厂(珂+D%二%丹-蓋讥-即阳ij二国厂兀若在加工点P(弘丹)处,坨J妣,则应沿+y方向进给一

4、步,此时新加工点的坐标值为阳二石了升1匸尸J + 1?新加工点的偏差为爲阴=和1 -再兀=兀5+11西儿即一; J八 J <综上所述,逐点比较法直线插补每走一步都要完成四个步骤(节拍),即:(1)位置判别根据偏差值'大于零、等于零、小于零确定当前加工点的位置。(2)坐标进给根据偏差值'大于零、等于零、小于零确定沿哪个方向进给止 步。(3)偏差计算根据递推公式算出新加工点的偏差值(4)终点判别用来确定加工点是否到达终点若已到达,则应发出停机或转换新程序段信号。一般用x和y坐标所要走的总步数J来判别。令J= 1 ,每走一步则J减1直至J=0。上图为第一象限直线插补程序框图二、

5、逐点比较法插补程序#i nclude "coni o.h"#in elude "graphics.h"#in clude "process.h"#defi ne Ni_circle 0#defi ne Shun _circle 1void ini t_graph();void draw_Base_circle();void draw_cabu_circle();void close_graph();void acrroods();static float x0,y0;void line_cabu(), draw_line(),draw

6、_line_cabu();void line_cabu() /* 此函数控制直线插步两次 */ int i;init_graph();sleep(1);for(i=0;i<2;i+)line(0,120,300,120); outtextxy(310,120,"Z"); line(100,10,100,300); outtextxy(110,300,"X"); outtextxy(90,130,"O");draw_line();if(i=0) draw_line_cabu(6);else draw_line_cabu(2);go

7、toxy(50,5);getch();cleardevice();setcolor(WHITE);void draw_line()/* 画直线 */ line(100,120,600,450); textcolor(YELLOW);directvideo=0;gotoxy(45,5); cprintf("Line from:X0 Y0 Z0 ");gotoxy(45,6); cprintf("Line to :X500 Y0 Z330"); gotoxy(45,7); cprintf("Units :Pixel");gotoxy(45

8、,8); cprintf("Line now:");void draw_line_cabu(int step)/* 关键的直线插补函数 */int Xe=600,Ye=450;float Fm,Xm=100,Ym=120;setcolor(RED);moveto(Xm,Ym); while(Xm<=Xe&&Ym<=Ye) Fm=(Ym-120)*(Xe-100)-(Xm-100)*(Ye-120); if(Fm>=0)Xm=Xm+step;elseYm=Ym+step;Y0 Z%3.0f",Xm-lineto(Xm,Ym);got

9、oxy(55,8); printf("X%3.0f100,Ym-120);delay(1100);/* 圆插补部分的函数区 */ void init_graph() /* int gdrive=DETECT,gmode; initgraph(&gdrive,&gmode,""); cleardevice();void acrroods() /*x0=getmaxx()/2;y0=getmaxy()/2;void draw_Base_circle() /*图形系统初始化 */屏幕中心坐标 */画圆及写参数 */line(x0-200,y0,x0+20

10、0,y0); outtextxy(x0+220,y0,"Z");line(x0,y0-180,x0,y0+180); outtextxy(x0+10,y0+180,"X");outtextxy(x0-10,y0+10,"O");circle(x0,y0,150); textcolor(YELLOW);directvideo=0;gotoxy(46,2);cprintf("Circle start:X0 Y0 Z150"); gotoxy(46,3);cprintf("Circle end :X0 Y0 Z

11、150"); gotoxy(46,4);cprintf("Units :Pixel");gotoxy(46,5);cprintf("Circle now:");void close_graph() /* 关图形系统 */closegraph();关键的圆插补函数 */void draw_cabu_circle(int sstep,int Directory)/*int flag=0;float Fm,Xm,Ym;Xm=x0+150; Ym=y0;moveto(Xm,Ym);setcolor(RED);while(1) /* 分象限,顺圆和逆圆讨

12、论 */圆判断公式 */Fm=(Xm-x0)*(Xm-x0)+(Ym-y0)*(Ym-y0)-150*150;/* if(Fm>=0)if(!Directory) /*逆圆判断 */if(Xm>=x0&&Ym<=y0)语句判断象限,以if(flag) break; /*if下一样 */else Xm=Xm-sstep; if(Xm<=x0&&Ym<=y0)flag=1; Ym=Ym+sstep;if(Xm<=x0&&Ym>=y0) Xm=Xm+sstep;if(Xm>=x0&&Ym&

13、gt;=y0) Ym=Ym-sstep;else /*it is Directory's else*/if(Xm>x0&&Ym<y0)Ym=Ym+sstep;if(Xm<=x0&&Ym<=y0)Xm=Xm+sstep; if(Xm<x0&&Ym>y0) flag=1; Ym=Ym-sstep;if(Xm>=x0&&Ym>=y0) if(flag) break;Xm=Xm-sstep;else /*it is Fm's else*/ if(!Directory) if(

14、Xm>x0&&Ym<y0) if(flag) break; else Ym=Ym-sstep; if(Xm<=x0&&Ym<=y0)flag=1; Xm=Xm-sstep;if(Xm<=x0&&Ym>=y0)Ym=Ym+sstep;if(Xm>=x0&&Ym>=y0)Xm=Xm+sstep;elseif(Xm>x0&&Ym<y0)Xm=Xm+sstep;if(Xm<=x0&&Ym<=y0)Ym=Ym-sstep; if(Xm&l

15、t;=x0&&Ym>=y0) flag=1; Xm=Xm-sstep; if(Xm>=x0&&Ym>=y0) if(flag) break; else Ym=Ym+sstep; lineto(Xm,Ym);",Ym-y0,Xm-x0);gotoxy(58,5); printf("X%3.0f Y0 Z%3.0f delay(800);void circle_demo(int Directory) /* 控制圆插补两次 */ int i=0,sstep;init_graph();sleep(2);acrroods(&x

16、0,&y0); for(i=0;i<2;i+) draw_Base_circle(150);if(i=0)sstep=6;draw_cabu_circle(sstep,Directory);else sstep=1;draw_cabu_circle(sstep,Directory);getch();cleardevice(); setcolor(WHITE);/* 圆插补部分的函数区结束 */ main()/* 主函数负责写封面和函数调用 */int choice=0;init_graph(); while(choice!=4)setfillstyle(1,RED); bar(2

17、00,30,400,80); setcolor(GREEN);settextstyle(3,0,10);outtextxy(220,50,"DEMO PROGRAM BY P.Y.F"); setcolor(WHITE);settextstyle(0,0,1);outtextxy(200,120,"1. Line demo.");outtextxy(200,140,"2. Shun_Circle demo."); outtextxy(200,160,"3. Ni_Circle demo.");outtextxy(2

18、00,180,"4. Quit the program.");outtextxy(160,200,"Please en ter your choice:");gotoxy(46,13);scan f("%d",&choice);switch(choice)case 1: li ne_cabu();break;case 2: circle_demo(Ni_circle);break;case 3: circle_demo(Shu n_circle);break;case 4: break;default: prin tf(&qu

19、ot;nChoice wron g,try aga in!");close_graph();三、逐点比较法圆弧插补圆弧插补加工:是将加工点到圆心的距离与被加工圆弧的名义半径相比较, 并根据偏差大小确定坐标进给方向,以逼近被加工圆弧。下面 以第一象限逆圆弧为例,讨论圆弧的插补方法。如下图所示,设要加工圆弧为第一象限逆圆弧 AB,原点为圆心 o,起点为A(叼小),终点为B(兀,兀),半径为R。瞬时 加工点为P(吗仍),点P到圆心距离为Rr 。y-4谨点比较注第象JB底更椅补若点P正好在圆弧上,则有图逐点比较法第一象限圆弧插补若点P在圆弧外侧,则有即冷瑚-宏沁 若点P在圆弧内侧,则有显然,

20、若令国j“;+y; "(3 4)则有:,则点P在圆弧上; :-1,则点P在圆弧外侧; vO,则点p在圆弧内侧。F. .>0当啸-时,为逼近圆弧,应向-X方向进给一步;当 氐* °时,应向+y方向进给一步。这样,就可获得逼近圆弧的 折线图。与直线插补偏差计算公式相似,圆弧插补的偏差计算也采用递推的方法以简化计算。若加工点 厲乩丹)在圆弧外或圆弧上,则有理j 二彳 “ ,A0为逼近该圆需沿-X 方向进给一步,移到新加工点 此时新加工点的坐标值为新加工点的偏差为蚣U二1尸十分''卅=一 十1*:一尸=f +y; - A'2 - 2 +1若加工点

21、9;'-在圆弧内,则有耳厂F十牙-卅为逼近该圆需沿十y方向进给一步,移到新加工点吆丹"此时新加工点的坐标值为吗二心兀*严儿+1新加工点的偏差为S二 十dv+lF-F = xi 十十2儿十l-F=彳+尸;氏+ 2片+1即恳沖二Ej十純十1从以上两式可知,递推偏差计算仅为加法(或减法)运算,大大降低了计算的复杂程度。由于采用递推方法,必须知道开始加工点的偏差,而开始加工点正是圆弧的起点,故 = Co除偏差计算外,还要进行终点判别。一般用 x、y坐标所要走的总步数来判别。令兀+环田尤-兀|,每走一步则j减| ,直至j=o至y达终点停止插补综上所述,逐点比较法圆弧插补与直线插补一样,

22、每走一步都要完成位置判别、坐标进给、偏差计算、终点判别四个步骤(节拍)。下图所示为第一象限逆圆弧逐点比较法插补的程序框图逐点比较法圆弧插补汇编语言程序(MCS-8031)RP:MOV SP,#60HMOV 4AH,#00H F单元清零MOV 49H,#00HMOV4 8H,#01HX电动机初始化MOV4 7H,#02HY电动机初始化MOVDPTR,#0 0 30HMOVA,#03HXY电动机上电MOVXDPTR,ACLRC计算终判值MOVA,52H低位X、X e相减,得aSUBBA,4EHMOV54H,A保存结果于终判值单元低位字节MOVA,51H高位X、X e相减,得bSUBBA,4DHMO

23、V5 3H,A保存结果于终判值单元高位字节CLR C低位Ye 丫相减,得cMOV A,4CHSUBB A,50HMOV 2 0H,C的借位位ADD A,54H判值MOV 54H,A字节MOV 2 1H,CMOV A,4BHMOV C,20H位位SUBB A,4FHMOV C,21H暂存Ye 丫低位相减产生计算 d=a+c, d 为低位终保存 d 于终判值单元低位暂存d=a+c产生的进位位恢复Ye、丫低位相减产生的借高位Ye、丫相减,得e恢复d=a+c产生的进位位ADDC A,53H 计算 f=b+e ,f 为高位终判值MOV 5 3H,ARP2:ACALLMOV A,49HJB ACC.7,RP6ACALL XMM步CLR CMOV A,4AHSUBB A,52HXCH A,BMOV A,49HSUBB A,51HXCH A,B保存 f 于终判值单元高位字节DLO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论