《2022年逐点比较法第一象限直线圆弧插补 .pdf》由会员分享,可在线阅读,更多相关《2022年逐点比较法第一象限直线圆弧插补 .pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、逐点比较法第一象限直线,圆弧插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。逐点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。只要将脉冲当量取得足够小,就可以达到精度要求。逐点比较插补法在脉冲当量为 0.01mm ,系统进给速度小于3000mm/min 时,能很好的满足要求。一、逐点比较法直线插补如下图所示设直线 oA 为第一象限的直线,起点为坐标原点o (0 , 0) ,终点坐标为, A( ) , P() 为加工点。若 P 点正好处在直线 oA 上,由相似三角形关系则有名师资料总
2、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - 即点在直线 oA 上方 ( 严格为直线 oA 与 y 轴正向所包围的区域 ) ,则有即若 P 点在直线 oA 下方 ( 严格为直线 oA 与 x 轴正向所包围的区域 ) ,则有图 3 1 逐点比较法第一象限直线插补即令则有:如,则点 P 在直线 oA 上,既可向 +x 方向进给一步,也可向 +y 方向进给一步;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
3、 - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - - 如,则点 P 在直线 oA 上方,应向 +x 方向进给一步,以逼近oA 直线;如,则点 P 在直线 oA 下方,应向 +y 方向进给一步 ,以逼近 oA 直线一般将及视为一类情况,即时,都向 +x 方向进给一步。当两方向所走的步数与终点坐标相等时,停止插补。这即逐点比较法直线插补的原理。对第一象限直线 oA 从起点 ( 即坐标原点 ) 出发,当 F 时, +x 向走一步;当 F0 时,y 向走一步。特点:每一步都需计算偏差,这样的计算比较麻烦。递推的方法计算
4、偏差:每走一步后新的加工点的偏差用前一点的加工偏差递推出来。采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故。下面推导其递推公式。设在加工点 P( ) 处,则应沿 +x 方向进给一步,此时新加工点的坐标值为名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 28 页 - - - - - - - - - 新加工点的偏差为即若在加工点 P( ) 处,则应沿 +y 方向进给一步,此时新加工点的坐标值为,新加工点的偏差为即综上所述,逐点比较法直线插补每走一步都要
5、完成四个步骤 ( 节拍 ) ,即:(1) 位置判别 根据偏差值大于零、等于零、小于零确定当前加工点的位置。(2) 坐标进给 根据偏差值大于零、等于零、小于零确定沿哪个方向进给一步。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - - (3) 偏差计算 根据递推公式算出新加工点的偏差值。(4) 终点判别 用来确定加工点是否到达终点。若已到达,则应发出停机或转换新程序段信号。一 般用 x 和 y 坐标所要走的总步数 J 来判别。令 J=
6、 ,每走一步则 J 减 1 ,直至J=0 。上图为第一象限直线插补程序框图二、逐点比较法插补程序#include conio.h #include graphics.h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 28 页 - - - - - - - - - #include process.h #define Ni_circle 0 #define Shun_circle 1 void init_graph(); void draw_Base_circle(); v
7、oid draw_cabu_circle(); void close_graph(); void acrroods(); static float x0,y0; void line_cabu(), draw_line(),draw_line_cabu(); void line_cabu() /* 此函数控制直线插步两次*/ int i; init_graph(); sleep(1); for(i=0;i2;i+) line(0,120,300,120); outtextxy(310,120,Z); line(100,10,100,300); outtextxy(110,300,X); 名师资料
8、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 28 页 - - - - - - - - - outtextxy(90,130,O); draw_line(); 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); textco
9、lor(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); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 28 页 - - - - - - - - - gotoxy(45,8); cprintf(Line now:); vo
10、id 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=0) Xm=Xm+step; else Ym=Ym+step; lineto(Xm,Ym); gotoxy(55,8); printf(X%3.0f Y0 Z%3.0f,Xm-100,Ym-120); delay(1100); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
11、 名师精心整理 - - - - - - - 第 8 页,共 28 页 - - - - - - - - - /* 圆插补部分的函数区 */ 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+200,y0); outtextxy
12、(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); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - textcolor(YELLOW); directvideo=0; gotoxy(46,2);cprintf(Circle start:X0 Y0 Z15
13、0); gotoxy(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; moveto(Xm,Ym); setcolor(RED);
14、 while(1) /* 分象限,顺圆和逆圆讨论 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - 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=
15、x0&Ym=y0) flag=1; Ym=Ym+sstep; if(Xm=y0) Xm=Xm+sstep; if(Xm=x0&Ym=y0) Ym=Ym-sstep; else /*it is Directorys else*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 28 页 - - - - - - - - - if(Xmx0&Ymy0) Ym=Ym+sstep; if(Xm=x0&Ym=y0) Xm=Xm+sstep; if(Xmy0) flag=1; Ym=
16、Ym-sstep; if(Xm=x0&Ym=y0) if(flag) break; Xm=Xm-sstep; else /*it is Fms else*/ if(!Directory) if(Xmx0&Ymy0) if(flag) break; else Ym=Ym-sstep; if(Xm=x0&Ym=y0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 28 页 - - - - - - - - - flag=1; Xm=Xm-sstep; if(Xm=y0) Y
17、m=Ym+sstep; if(Xm=x0&Ym=y0) Xm=Xm+sstep; else if(Xmx0&Ymy0) Xm=Xm+sstep; if(Xm=x0&Ym=y0) Ym=Ym-sstep; if(Xm=y0) flag=1; Xm=Xm-sstep; if(Xm=x0&Ym=y0) if(flag) break; else Ym=Ym+sstep; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 28 页 - - - - - - - - - lineto(
18、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; init_graph(); sleep(2); acrroods(&x0,&y0); for(i=0;i2;i+) draw_Base_circle(150); if(i=0) sstep=6; draw_cabu_circle(sstep,Directory); else 名师资料总结 - - -精品资料欢迎下载 - - - -
19、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 28 页 - - - - - - - - - sstep=1; draw_cabu_circle(sstep,Directory); getch(); cleardevice(); setcolor(WHITE); /* 圆插补部分的函数区结束 */ main()/* 主函数负责写封面和函数调用*/ int choice=0; init_graph(); while(choice!=4) setfillstyle(1,RED); bar(200,30,400,80); setco
20、lor(GREEN); settextstyle(3,0,10); outtextxy(220,50,DEMO PROGRAM BY P.Y.F); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 28 页 - - - - - - - - - setcolor(WHITE); settextstyle(0,0,1); outtextxy(200,120,1. Line demo.); outtextxy(200,140,2. Shun_Circle demo.); ou
21、ttextxy(200,160,3. Ni_Circle 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: break; default
22、: printf(nChoice wrong,try again!); close_graph(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 28 页 - - - - - - - - - 三、逐点比较法圆弧插补圆弧插补加工:是将加工点到圆心的距离与被加工圆弧的名义半径相比较,并根据偏差大小确定坐标进给方向,以逼近被加工圆弧。下面以第一象限逆圆弧为例,讨论圆弧的插补方法。如下图所示,设要加工圆弧为第一象限逆圆弧 AB ,原点为圆心o ,起点为 A( ) ,终点为
23、B( ) ,半径为 R 。瞬时加工点为 P( ) ,点 P 到圆心距离为。若点 P 正好在圆弧上,则有图逐点比较法第一象限圆弧插补即若点 P 在圆弧外侧,则有名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 28 页 - - - - - - - - - 即若点 P 在圆弧内侧,则有即显然,若令(3 4) 则有:,则点 P 在圆弧上;,则点 P 在圆弧外侧;,则点 P 在圆弧内侧。当时,为逼近圆弧,应向 -X 方向进给一步;当时,应向 +y 方向进给一步。这样,就可获得逼近
24、圆弧的折线图。与直线插补偏差计算公式相似,圆弧插补的偏差计算也采用递推的方法以简化计算。若加工点在圆弧外或圆弧上,则有名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 28 页 - - - - - - - - - 为逼近该圆需沿 -X 方向进给一步,移到新加工点,此时新加工点的坐标值为新加工点的偏差为即若加工点在圆弧内,则有为逼近该圆需沿十 y 方向进给一步,移到新加工点,此时新加工点的坐标值为新加工点的偏差为名师资料总结 - - -精品资料欢迎下载 - - - - -
25、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 28 页 - - - - - - - - - 即从以上 两式可知,递推偏差计算仅为加法 ( 或减法 ) 运算,大大降低了计算的复杂程度。由于采用递推方法,必须知道开始加工点的偏差,而开始加工点正是圆弧的起点,故。除偏差计算外,还要进行终点判别。一般用 x 、 y 坐标所要走的总步数来判别。令,每走一步则 J 减 l ,直至 J=0 到达终点停止插补。综上所述,逐点比较法圆弧插补与直线插补一样,每走一步都要完成位置判别、坐标进给、偏差计算、终点判别四个步骤 ( 节拍 ) 。下图所示为第
26、一象限逆圆弧逐点比较法插补的程序框图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 28 页 - - - - - - - - - 逐点比较法圆弧插补汇编语言程序(MCS-8031):,单元清零,电动机初始化,电动机初始化名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 28 页 - - - - - - - - - ,电动机上电,计算终判值,低位、
27、e 相减,得 a ,保存结果于终判值单元低位字节,高位、 e 相减,得 b ,保存结果于终判值单元高位字节低位 Ye、Y 相减,得 c ,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 28 页 - - - - - - - - - ,暂存 Ye、Y 低位相减产生的借位位,计算 d=a+c ,d 为低位终判值,保存 d 于终判值单元低位字节,暂存 d=a+c 产生的进位位,恢复 Ye、Y 低位相减产生的借位位,高位 Ye、Y 相减,得 e ,恢复 d=a+c 产生的进位位
28、,计算 f=b+e ,f 为高位终判值,保存 f 于终判值单元高位字节名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 28 页 - - - - - - - - - :延时子程序,取高位字节,高位 1, 0,去高位, 0,反转一步计算新偏差,计算 g低位,g 存入寄存器,计算 h高位,低位存,高位存。内容为计算 ig低位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
29、 第 24 页,共 28 页 - - - - - - - - - ,内容为低位,内容为高位,内容为高位,内容为,计算,内容为低位,内容为低位,内容为高位,考虑的进位,的内容为高位计算,低位,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 28 页 - - - - - - - - - ,高位,:终判值减,插补没结束,转至名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 28 页 - - - - - - - - - :电动机正转,此处“”,为“”的“”:,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 28 页 - - - - - - - - - ,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 28 页 - - - - - - - - -