逐点比较法插补VC程序设计_第1页
逐点比较法插补VC程序设计_第2页
逐点比较法插补VC程序设计_第3页
逐点比较法插补VC程序设计_第4页
逐点比较法插补VC程序设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

计算机控制技术逐点比较法插补原理VC程序设计 By O.z.逐点比较法插补原理VC程序设计一 背景数控机床在加工曲线时,用折线逼近所要加工的曲线。而确定刀具或绘图笔的过程就称为插补,数控系统中完成插补工作的部分装置称为插补器。常用的脉冲增量插补方法是逐点比较法。所谓逐点比较法插补,就是刀具或绘图笔每走一步都要和给定轨迹上的坐标一步的进给方向。如果原来在给定轨迹的下方,下一步就向给定轨迹的上方走,如果原来在给定轨迹的里面,下一步就向给定轨迹的外面走如此,走一步,看一看,比较一次,决定下一步走向,以便逼近给定轨迹,即形成逐点比较插补。逐点比较法是以阶梯折线来逼近直线或者圆弧等曲线的,它与规定的加工直线或圆弧之间的最大误差为一个脉冲当量,因此只要把脉冲当量(第走一步的距离即步长)取得足够小,就可达到加工精度的要求。二 原理与算法(一)逐点比较法直线插补不同象限直线插补的偏差符号及坐标进给方向如图1所示。A1(xe,ye)A2(-xe,ye)A3(-xe,-ye)A4(xe,-ye)F0F0F0F0F0F0F0F0xy图1 偏差符号与进给方向的关系由图1可以推导得出,4个象限直线插补的偏差计算公式和坐标进给方向,详见表1,该表中4个象限的终点坐标值取绝对值代入计算式中的 xe 和 ye 。表1 直线插补的进给方向及偏差计算公式Fm0Fm0所在象限进给方向偏差计算所在象限进给方向偏差计算一、四+xFm+1=Fm-ye一、二+yFm+1=Fm+xe二、三-x三、四-y在计算机内存中开辟6个单元XE、YE、NXY、FM、XOY和ZF,分别存放终点横坐标 xe、终点纵坐标 ye、总步数 Nxy 、加工点偏差 Fm 、直线所在象限值 xoy 和走步方向标志。这里,Nxy=Nx+Ny,xoy 等于1、2、3、4分别代表第一、第二、第三、第四象限,xoy 的值可由终点坐标的正、负符号来确定, Fm 的初值为0,ZF=1、2、3、4分别代表+x、-x、+y、-y 走步方向。程序流程如图2所示。图2 直线插补程序流程图(二)逐点比较法圆弧插补各象限圆弧插补的偏差符号与进给方向如图3所示,用SR和NR分别表示顺圆弧和逆圆弧,并且用SR1、SR2、SR3、SR4和NR1、NR2、NR3、NR4 8种圆弧分别表示第一至第四象限的顺圆弧和逆圆弧。图3 4个象限圆弧插补的对称关系在计算机内存中开辟8个单元X0、Y0、NXY、FM、RNS、XM、YM和ZF,分别存放起点的横坐标 x0、起点的纵坐标 y0、总步数 Nxy、加工点偏差 Fm、圆弧种类值RNS、xm、ym 和走步方向标志。这里 Nxy=xe-x0+ye-y0 ,RNS等于1、2、3、4和5、6、7、8分别代表SR1、SR2、SR3、SR4和NR1、NR2、NR3、NR4 ,RNS的值可由起点和终点的坐标的正、负符号来确定, Fm 的初值为0,xm和 ym 的初值为x0 和 y0,ZF=1、2、3、4分别表示+x、-x、+y、-y 走步方向。程序流程图如图4所示。图4 4象限圆弧插补程序流程图三 程序设计开发环境: Visual Studio 2010 ,Windows 8建立的项目: VC+ MFC Application Single Document (一)全局变量int AXIS=600 : 坐标轴半轴长像素数(映射到真实长度600*0.1mm=6cm)int AXIS_SCALE : 坐标轴最大刻度,通过菜单项修改int S_LEN : 单位长度像素数(=AXIS/AXIS_SCALE)int sx , sy : 直线插补用到的平移系数(二)对话框设置4个Edit框,连接变量m_x1、m_y1、m_x2、m_y2用于存储输入的坐标值。默认值:m_x1=10,m_y1=0,m_x2=0,m_y2=10。(三)菜单CaptionIDFunction建立坐标系坐标系样式标准大小(20*20)ID_AXES_OOnAxesO( )样式1(15*15)ID_AXES_AOnAxesA( )样式2(12*12)ID_AXES_BOnAxesB( )样式3(10*10)ID_AXES_COnAxesC( )样式4(30*30)ID_AXES_HOnAxesH( )样式5(50*50)ID_AXES_IOnAxesI( )样式6(60*60)ID_AXES_JOnAxesJ( )清空ID_EDIT_CLCOnEditClc( )插补类型直线插补ID_EDIT_LINEOnEditLine( )圆弧插补ID_EDIT_ROUNDOnEditRound( )说明:同时创建了三个右键菜单与“清空”、“直线插补”、“圆弧插补”同ID。(四)部分代码/绘制坐标系void CChabuDrawView:DrawAxes(void)CClientDC pDC(this);/窗口映射,单位像素长度为0.1mm,坐标轴x向右为正,y轴向上为正pDC.SetMapMode(MM_LOMETRIC);CRect Recto;GetClientRect(&Recto);pDC.SetViewportOrg(Recto.Width()/2,Recto.Height()/2);/绘制坐标轴pDC.MoveTo(-AXIS,0);pDC.LineTo(AXIS,0);pDC.MoveTo(0,-AXIS);pDC.LineTo(0,AXIS);/绘制网格线for(int i=-AXIS;i=0)xoy=yo0?1:4;elsexoy=yo0?2:3;/通过绘制方形模拟刀具进给for(int i=nxy;nxy0;nxy-)if(fm=0)fm-=ye;if(xoy=1|xoy=4)DrawPoint(+x,y);elseDrawPoint(-x,y);elsefm+=xe;if(xoy=1|xoy=2)DrawPoint(x,+y);elseDrawPoint(x,-y);/画圆void CChabuDrawView:cb_round_std(int x1, int y1, int x2, int y2)sx=0;sy=0;int fm=0,xm=abs(x1),ym=abs(y1),rns;int nxy=abs(x2-x1)+abs(y2-y1);int x=x1,y=y1;DrawPoint(x,y);/判断圆弧类型if(x2x1)if(x1=0)rns=y1y2?1:8;else if(x2y2?7:2;elseMessageBox(_T(此功能正在学习中!);return;else if(x2x1)if(x1y2?6:3;else if(x2=0)rns=y1y2?4:5;elseMessageBox(_T(此功能正在学习中!);return;elseMessageBox(_T(此功能正在学习中!);return;/进给for(int i=nxy;i0;i-)if(rns=1|rns=3|rns=6|rns=8)if(fm=0)fm=fm-2*ym+1;ym-;if(rns=1|rns=6)DrawPoint(x,-y);elseDrawPoint(x,+y);elsefm=fm+2*xm+1;xm+;if(rns=1|rns=8)DrawPoint(+x,y);elseDrawPoint(-x,y);elseif(fm=0)fm=fm-2*xm+1;xm-;if(rns=2|

温馨提示

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

评论

0/150

提交评论