ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:286.64KB ,
资源ID:6047141      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6047141.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(逐点比较法第一象限直线圆弧插补.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、逐点比较法第一象限直线圆弧插补逐点比较法第一象限直线,圆弧插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。逐点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。只要将脉冲当量取得足够小,就可以达到精度要求。逐点比较插补法在脉冲当量为0.01mm,系统进给速度小于3000mm/min时,能很好的满足要求。一、 逐点比较法直线插补如下图所示设直线 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 向走一步;当 F0 时,y 向走一步。 特点:每一步都需计算偏差,这样的计算比较麻烦。 递推的方法计算偏差: 每走一步后新的加工点的偏差用前一点的加工偏差递推出来。 采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故 。下面推导其递推公式。 设在加工点 P( ) 处, ,则应沿 +x 方向进给一步,此时新加工点的坐标值为 新加工点的偏差为 即 若在加工点 P( ) 处, ,则应沿 +y 方向进给一步,此时新加工点的坐标值为 , 新加工点的偏差为 即

4、 综上所述,逐点比较法直线插补每走一步都要完成四个步骤 ( 节拍 ) ,即: (1) 位置判别 根据偏差值 大于零、等于零、小于零确定当前加工点的位置。 (2) 坐标进给 根据偏差值 大于零、等于零、小于零确定沿哪个方向进给一步。 (3) 偏差计算 根据递推公式算出新加工点的偏差值。(4) 终点判别 用来确定加工点是否到达终点。若已到达,则应发出停机或转换新程序段信号。一 般用 x 和 y 坐标所要走的总步数 J 来判别。令 J= ,每走一步则 J 减 1 ,直至 J=0 。 上图为第一象限直线插补程序框图二、 逐点比较法插补程序#include conio.h #include graphi

5、cs.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(); static float x0,y0; void line_cabu(), draw_line(),draw_line_cabu(); void line_cabu() /*此函数控制直线插步两次*/ int i; init_graph(); sleep(

6、1); for(i=0;i2;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); gotoxy(50,5); getch(); cleardevice(); setcolor(WHITE); void draw_line()/*画直线*/ line(100,120,600,450); textcol

7、or(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); cprintf(Line now:); void draw_line_cabu(int step)/*关键的直线插补函数*/ int Xe=600,Ye=450; float Fm,Xm=100,Ym=120; setcolor(RED); moveto(Xm,Y

8、m); 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); /* 圆插补部分的函数区*/ void init_graph() /*图形系统初始化*/ int gdrive=DETECT,gmode; initgraph(&gdrive,&gmode,); cleardevice(); void acrroods() /*屏幕中心坐标*/ x0=getmaxx()/2; y0=getmaxy(

9、)/2; void draw_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); gotoxy(46,3);cprintf(Circle e

10、nd :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); while(1) /*分象限,顺圆和逆圆讨论*/ Fm=(Xm-x0

11、)*(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=y0) Xm=Xm+sstep; if(Xm=x0&Ym=y0) Ym=Ym-sstep; else /*it is Directorys else*/ if(Xmx0&Ymy0) Ym=Ym+sstep; if(Xm=x0

12、&Ym=y0) Xm=Xm+sstep; if(Xmy0) flag=1; Ym=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) flag=1; Xm=Xm-sstep; if(Xm=y0) Ym=Ym+sstep; if(Xm=x0&Ym=y0) Xm=Xm+sstep; else if(Xmx0&Ymy0) Xm=Xm+sst

13、ep; 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; 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; init_graph(); sleep(2); acrroods(&x0,&y0); for(

14、i=0;i2;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(200,30,400,80

15、); 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(200,180,4. Quit the program.); outtextxy(160,200,Please

16、 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: printf(nChoice wrong,try again!); close_graph(); 三、 逐点比较法圆弧插补 圆弧插补加工: 是将加工点到圆心的距离与被加工圆弧的名义半径相比较,并根据偏

17、差大小确定坐标进给方向,以逼近被加工圆弧。下面以第一象限逆圆弧为例,讨论圆弧的插补方法。 如下图所示,设要加工圆弧为第一象限逆圆弧 AB ,原点为圆心 o ,起点为 A( ) ,终点为 B( ) ,半径为 R 。瞬时加工点为 P( ) ,点 P 到圆心距离为 。 若点 P 正好在圆弧上,则有 图逐点比较法第一象限圆弧插补 即 若点 P 在圆弧外侧,则有 即 若点 P 在圆弧内侧,则有 即 显然,若令 (3 4) 则有: ,则点 P 在圆弧上; ,则点 P 在圆弧外侧; ,则点 P 在圆弧内侧。 当 时,为逼近圆弧,应向 -X 方向进给一步;当 时,应向 +y 方向进给一步。这样,就可获得逼近圆

18、弧的折线图。 与直线插补偏差计算公式相似,圆弧插补的偏差计算也采用递推的方法以简化计算。若加工点 在圆弧外或圆弧上,则有为逼近该圆需沿 -X 方向进给一步,移到新加工点 ,此时新加工点的坐标值为 新加工点的偏差为 即 若加工点 在圆弧内,则有 为逼近该圆需沿十 y 方向进给一步,移到新加工点 ,此时新加工点的坐标值为 新加工点的偏差为 即 从以上 两式可知,递推偏差计算仅为加法 ( 或减法 ) 运算,大大降低了计算的复杂程度。由于采用递推方法,必须知道开始加工点的偏差,而开始加工点正是圆弧的起点,故 。除偏差计算外,还要进行终点判别。一般用 x 、 y 坐标所要走的总步数来判别。令,每走一步则

19、 J 减 l ,直至 J=0 到达终点停止插补。 综上所述,逐点比较法圆弧插补与直线插补一样,每走一步都要完成位置判别、坐标进给、偏差计算、终点判别四个步骤 ( 节拍 ) 。下图所示为第一象限逆圆弧逐点比较法插补的程序框图 逐点比较法圆弧插补汇编语言程序(MCS-8031):, , 单元清零,电动机初始化,电动机初始化,电动机上电,计算终判值,低位、e相减,得a,保存结果于终判值单元低位字节,高位、e相减,得b, , 保存结果于终判值单元高位字节 低位Ye、Y相减,得c,暂存Ye、Y低位相减产生的借位位,计算d=a+c,d为低位终判值,保存d于终判值单元低位字节,暂存d=a+c产生的进位位,恢复Ye、Y低位相减产生的借位位,高位Ye、Y相减,得e, 恢复d=a+c产生的进位位,计算f=b+e,f为高位终判值,保存f于终判值单元高位字节:延时子程序,取高位字节,高位1,0,去高位,0,反转一步计算新偏差,计算g低位,g存入寄存器,计算h高位, 低位存,高位存。内容为计算ig低位,内容为低位,内容为高位,内容为高位,内容为,计算,内容为低位,内容为低位,内容为高位,考虑的进位,的内容为高位计算, 低位, 高位,:终判值减,插补没结束,转至:电动机正转, 此处“”,为“”的“”:,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1