免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
逐点比较法第一象限直线,圆弧插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。逐点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。只要将脉冲当量取得足够小,就可以达到精度要求。逐点比较插补法在脉冲当量为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 向走一步;当 F0 时,y 向走一步。 特点:每一步都需计算偏差,这样的计算比较麻烦。 递推的方法计算偏差: 每走一步后新的加工点的偏差用前一点的加工偏差递推出来。 采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故 。下面推导其递推公式。 设在加工点 P( ) 处, ,则应沿 +x 方向进给一步,此时新加工点的坐标值为 新加工点的偏差为 即 若在加工点 P( ) 处, ,则应沿 +y 方向进给一步,此时新加工点的坐标值为 , 新加工点的偏差为 即 综上所述,逐点比较法直线插补每走一步都要完成四个步骤 ( 节拍 ) ,即: (1) 位置判别 根据偏差值 大于零、等于零、小于零确定当前加工点的位置。 (2) 坐标进给 根据偏差值 大于零、等于零、小于零确定沿哪个方向进给一步。 (3) 偏差计算 根据递推公式算出新加工点的偏差值。(4) 终点判别 用来确定加工点是否到达终点。若已到达,则应发出停机或转换新程序段信号。一 般用 x 和 y 坐标所要走的总步数 J 来判别。令 J= ,每走一步则 J 减 1 ,直至 J=0 。 上图为第一象限直线插补程序框图二、 逐点比较法插补程序#include conio.h #include 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(); 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); 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); 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); 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=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()/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 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); 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=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&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+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; 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(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); 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 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(); 三、 逐点比较法圆弧插补 圆弧插补加工: 是将加工点到圆心的距离与被加工圆弧的名义半径相比较,并根据偏差大小确定坐标进给方向,以逼近被加工圆弧。下面以第一象限逆圆弧为例,讨论圆弧的插补方法。 如下图所示,设要加工圆弧为第一象限逆圆弧 AB ,原点为圆心 o ,起点为 A( ) ,终点为 B( ) ,半径为 R 。瞬时加工点为 P( ) ,点 P 到圆心距离为 。 若点 P 正好在圆弧上,则有 图逐点比较法第一象限圆弧插补 即 若点 P 在圆弧外侧,则有 即 若点 P 在圆弧内侧,则有 即 显然,若令 (3 4) 则有: ,则点 P 在圆弧上; ,则点 P 在圆弧外侧; ,则点 P 在圆弧内侧。 当 时,为逼近圆弧,应向 -X 方向进给一步;当 时,应向 +y 方向进给一步。这样,就可获得逼近圆弧的折线图。 与直线插补偏差计算公式相似,圆弧插补的偏差计算也采用递推的方法以简化计算。若加工点 在圆弧外或圆弧上,则有为逼近该圆需沿 -X 方向进给一步,移到新加工点 ,此时新加工点的坐标值为 新加工点的偏差为 即 若加工点 在圆弧内,则有 为逼近该圆需沿十 y 方向进给一步,移到新加工点 ,此时新加工点的坐标值为 新加工点的偏差为 即 从以上 两式可知,递推偏差计算仅为加法 ( 或减法 ) 运算,大大降低了计算的复杂程度。由于采用递推方法,必须知道开始加工点的偏差,而开始加工点正是圆弧的起点,故 。除偏差计算外,还要进行终点判别。一般用 x 、 y 坐标所要走的总步数来判别。令,每走一步则 J 减 l ,直至 J=0 到达终点停止插补。 综上所述,逐点比较法圆弧插补与直线插补一样,每走一步都要完成位置判别、坐标进给、偏差计算、终点判别四个步骤 ( 节拍 ) 。下图所示为第一象限逆圆弧逐点比较法插补的程序框图 逐点比较法圆弧插补汇编语言程序(MCS-8031):, , 单元清零,电动机初始化,电动机初始化,电动机上电,计算终判值,低位、e相减,得a,保存结果于终判值单元低位字节,高位、e相减,得b, , 保存结果于终判值单元高位字节 低位Ye、Y相减,得c,暂存Ye、Y低位相减产生
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国运载火箭控制系统项目经营分析报告
- 2026年中国云灾备项目经营分析报告
- 2026年中国互联网+NVP项目经营分析报告
- 水利枢纽工程规划设计方案
- 国道提升改造工程项目实施方案
- 2026广西医科大学第一附属医院人才招聘233人笔试考试备考题库及答案解析
- 企业环境管理方案及绿色办公实践
- 建筑渲染项目客户反馈总结
- 教育咨询师职业技能等级认证手册
- 远洋渔业基地项目可行性研究报告
- 100以内加减法完整版1000道含答案可打印
- 国家事业单位招聘2025退役军人事务部宣传中心招聘应届毕业生拟聘用考试题库含答案
- 2025年检验科生物安全培训试题(答案)
- 施工现场集装箱式活动房安装验收表
- 医学公共基础知识试题(附答案)
- 2025年公路水运安全员B证备考真题及答案解析
- 2025年70岁老年人换新本驾驶证需考三力测试题及答案
- 车祸定责知识培训内容课件
- 驼奶课件教学课件
- 基于OPTIMOOR软件探究船行波对系泊船安全影响的多维度分析
- 生产安全事故发生的主要原因
评论
0/150
提交评论