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

下载本文档

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

文档简介

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

2、在直线oA上,由相似三角形关系则有丹_兀I逐血忆较医第叢限直统皤站点在直线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向走一步特点:每一步都需计算偏差,这样的计算比较麻烦递推的方法计算偏差:每走一步后新的加工点的偏差用前一点的加工偏差递推出来。采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起F =0点,故。下面推导其递推公式。设在加工点P()处, ;、,则应沿+x方向进给一步,此时新加工 点的坐标值为1+1 二吗 +1'y严儿新加工点的偏差为也=耳兀一(吗+ 9兀=兀丹-玛几-儿即'" '儿若在加工点P(二)处,则应

4、沿+y方向进给一步,此时新加工点的坐标值为鬲二螞 j+I =+1?新加工点的偏差为弘1 = yJ+i -吗儿=兀例+)1祕综上所述,逐点比较法直线插补每走一步都要完成四个步骤(节拍),即:(1)位置判别根据偏差值大于零、等于零、小于零确定当前加工点的位(2)坐标进给根据偏差值,大于零、等于零、小于零确定沿哪个方向进给一步0c'Q "二口fflM第一命離玄K抬讨卜制用圧(3) 偏差计算根据递推公式算出新加工点的偏差值(4) 终点判别用来确定加工点是否到达终点若已到达,则应发出停机或转换新程序段信号。一般用x和y坐标所要走的总步数J来判 别。令J= 5 - 宀,每走一步则J减1,

5、直至J=0。¥4 1*- *1*齐j-r-r r* :1i- - 1 ;C J上图为第一象限直线插补程序框图逐点比较法插补程序#i nclude "coni o.h"#in elude "graphics.h"#include "process.h" #define Ni_circle 0#define Shun_circle 1 void init_graph();void draw_Base_circle();void draw_cabu_circle();void close_graph();void acrroods

6、();static float x0,y0;void line_cabu(), draw_line(),draw_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

7、();if(i=0)draw_line_cabu(6);else draw_line_cabu(2);gotoxy(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(

8、45,7); cprintf("Units :Pixel");gotoxy(45,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;else

9、Ym=Ym+step;lineto(Xm,Ym);gotoxy(55,8); printf("X%3.0f Y0 Z%3.0f",Xm-100,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_

10、Base_circle() /* 画圆及写参数 */line(x0-200,y0,x0+200,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");go

11、toxy(46,3);cprintf("Circle end :X0 Y0 Z150");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;move

12、to(Xm,Ym);setcolor(RED);while(1) /* 分象限,顺圆和逆圆讨论 */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&&Y

13、m>=y0)Xm=Xm+sstep;if(Xm>=x0&&Ym>=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;e

14、lse/*it is Fm's else*/if(!Directory) if(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<=x

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

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

17、e!=4)setfillstyle(1,RED);bar(200,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_Circ

18、le demo.");outtextxy(200,180,"4. Quit the program.");outtextxy(160,200,"Please enter your choice:"); gotoxy(46,13);scanf("%d",&choice);switch(choice)case 1: line_cabu();break;case 2: circle_demo(Ni_circle);break;case 3: circle_demo(Shun_circle);break;case 4: br

19、eak;default: printf("nChoice wrong,try again!");close_graph();逐点比较法圆弧插补圆弧插补加工:是将加工点到圆心的距离与被加工圆弧的名义半径相比较, 并根据偏差大小确定坐标进给方向,以逼近被加工圆弧。下面 以第一象限逆圆弧为例,讨论圆弧的插补方法。如下图所示,设要加工圆弧为第一象限逆圆弧 AB,原点为圆心 o,起点为A( 一 ;),终点为B(、:-),半径为R。瞬时加工 点为P( 丄),点P到圆心距离为:I。*4逐点出極法第 桑限眞飆播补若点P正好在圆弧上,则有图逐点比较法第一象限圆弧插补即若点P在圆弧外侧,则有

20、+;= R>R2艮卩二* ,门若点P在圆弧内侧,则有即二一:一丿_门.2 2 2显然,若令 -' '' (3 4)则有: = ,则点P在圆弧上;F >0 -,则点P在圆弧外侧;jff, <0 ',则点P在圆弧内侧。F .>0当时,为逼近圆弧,应向-X方向进给一步;当弘"时,应向+y方向进给一步。这样,就可获得逼近圆弧的折 线图。与直线插补偏差计算公式相似,圆弧插补的偏差计算也采用递推 的方法以简化计算。若加工点:-在圆弧外或圆弧上,则有瓦严彳+分亠,no为逼近该圆需沿-x方向进给一步,移到新加工点;:,此时新加工点的坐标值为新加

21、工点的偏差为g+ij =(托_ 1尸+才_应二彳-2西+ 1+丿;-疋- +;_ 应2 _ 2爲 +1若加工点-:-在圆弧内,则有为逼近该圆需沿十y方向进给一步,移到新加工点''-,此时新加工点的坐标值为新加工点的偏差为珂卄L 彳 + 仙 +1)2 一斥 +_y; + 2儿 + 1-A2= +# -0 + 2片+1即 “; "W从以上两式可知,递推偏差计算仅为加法 (或减法)运算,大 大降低了计算的复杂程度。由于采用递推方法,必须知道开始加 工点的偏差,而开始加工点正是圆弧的起点,故:。除偏差计算外,还要进行终点判别。一般用x、y坐标所要走的总步数来判别。令:二十二十

22、二八,每走一步则J减I,直至J=0到达终点停 止插补。综上所述,逐点比较法圆弧插补与直线插补一样,每走一步都要完成位置判别、坐标进给、偏差计算、终点判别四个步骤(节拍)。下图所示为第一象限逆圆弧逐点比较法插补的程序框图F+3V+1-F Y+l-YF-3X+1-F Kl-X逐点比较法圆弧插补汇编语言程序(MCS-8031)RP:MOVSP,MOV4AH,F单元清零MOV4 9H,MOV4 8H,X电动机初始化MOV4 7H,Y电动机初始化MOV DPTR,#0030HMOVA,#03HXY电动机上电MOVX DPTR,ACLRC计算终判值MOVA,52H低位X、X e相减,得aSUBBA,4EH

23、MOV5 4H,A保存结果于终判值单元低位字节MOVA,51H高位X、X e相减,得bSUBBA,4DHMOV5 3H,A保存结果于终判值单元高位字节CLRC低位 Ye、 Y 相减,得 cMOVA,4CHSUBB A,#H暂存 Ye、Y 低位相减产计算 d=a+c , d 为低位终保存 d 于终判值单元低位暂存 d=a+c 产生的进位位恢复 Ye 、Y 低位相减产生的高位 Ye 、Y 相减,得 e恢复 d=a+c 产生的进位位计算 f=b+e , f 为高位终判值MOV 2 0H,C生的借位位ADD A,54H判值MOV 54H,A字节MOV 2 1H,CMOV A,4BHMOV C,20H借位位SUBB A,4FHMOV C,21HADDC A,53HSUBB A,#HSUBB A,51HMOV 5 3H,A保存 f 于终判值单元高位字节RP2:ACALL DLO延时子程序低位存A,咼位存BoBA内谷为MOV A,49HJB ACC.7,RP6ACALL XMM步CLR CMOV A,4AHSUBB A,52HXCH A,BMOV A,49HSUBB A,51HXCH A,BF 取F高位字节高位=1 ,

温馨提示

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

评论

0/150

提交评论