预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

逐点比较法插补原理VC程序设计 一背景 数控机床在加工曲线时,用折线逼近所要加工的曲线。而确定刀具或绘图笔的过程就称为插补,数控系统中完成插补工作的部分装置称为插补器。常用的脉冲增量插补方法是逐点比较法。所谓逐点比较法插补,就是刀具或绘图笔每走一步都要和给定轨迹上的坐标一步的进给方向。如果原来在给定轨迹的下方,下一步就向给定轨迹的上方走,如果原来在给定轨迹的里面,下一步就向给定轨迹的外面走……如此,走一步,看一看,比较一次,决定下一步走向,以便逼近给定轨迹,即形成逐点比较插补。 逐点比较法是以阶梯折线来逼近直线或者圆弧等曲线的,它与规定的加工直线或圆弧之间的最大误差为一个脉冲当量,因此只要把脉冲当量(第走一步的距离即步长)取得足够小,就可达到加工精度的要求。 二原理与算法 (一)逐点比较法直线插补 不同象限直线插补的偏差符号及坐标进给方向如图1所示。 A1(xe,ye) A2(-xe,ye) A3(-xe,-ye) A4(xe,-ye) F<0 F<0 F<0 F<0 F≥0 F≥0 F≥0 F≥0 x y 图1偏差符号与进给方向的关系 由图1可以推导得出,4个象限直线插补的偏差计算公式和坐标进给方向,详见表1,该表中4个象限的终点坐标值取绝对值代入计算式中的xe和ye。 表1直线插补的进给方向及偏差计算公式 Fm≥0Fm<0所在象限进给方向偏差计算所在象限进给方向偏差计算一、四+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、NR48种圆弧分别表示第一至第四象限的顺圆弧和逆圆弧。 图34个象限圆弧插补的对称关系 在计算机内存中开辟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所示。 图44象限圆弧插补程序流程图 三程序设计 开发环境:VisualStudio2010,Windows8 建立的项目:VC++MFCApplicationSingleDocument (一)全局变量 intAXIS=600:坐标轴半轴长像素数(映射到真实长度600*0.1mm=6cm) intAXIS_SCALE:坐标轴最大刻度,通过菜单项修改 intS_LEN:单位长度像素数(=AXIS/AXIS_SCALE) intsx,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。 (四)部分代码 //绘制坐标系 voidCChabuDrawView::DrawAxes(void) { CClientDCpDC(this); //窗口映射,单位像素长度