第三象限圆弧插补
- 格式:docx
- 大小:122.83 KB
- 文档页数:8
数控技术课程设计说明书设计题目:数字积分法圆弧插补计软件设计指导老师:专业:机械设计制造及其自动化班级:机姓名:学号:目录一、课程设计题目 (1)二、课程设计的目的 (1)三、课程设计使用的主要仪器设备 (1)四、课程设计的任务题目描述和要求 (1)五、数字积分法插补原理 (2)5.1从几何角度来看积分运算 (2)5.2数字积分圆弧插补 (3)5.3数字积分法圆弧插补程序流程图 (5)5.4插补实例 (6)六、程序清单 (7)七、软件运行效果仿真 (18)八、课程小节 (21)九、参考文献 (22)一、课程设计题目数字积分法第一、二、三、四象限顺、逆圆插补计算二、课程设计的目的《数控原理与系统》是自动化(数控)专业的一门主要专业课程,安排课程设计的目的是通过课程设计方式使学生进一步掌握和消化数控原理基本内容,了解数控系统的组成,掌握系统控制原理和方法,通过设计与调试,掌握各种功能实的现方法,为今后从事数控领域的工作打下扎实的基础。
1)了解连续轨迹控制数控系统的组成原理。
2) 掌握数字积分法(DDA)插补的基本原理。
3)掌握数字积分法(DDA)插补的软件实现方法。
三、课程设计使用的主要仪器设备1、PC计算机一台2、数控机床实验装置一台3、支持软件若干(选用VB环境)四、课程设计的任务题目描述和要求数字积分法又称数字微分分析法DDA(Digital Differential Analyzer)。
数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。
其缺点是速度调节不便,插补精度需要采取一定措施才能满足要求。
由于计算机有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。
本次课程设计具体要求如下:(1)掌握数字积分插补法基本原理(2)设计出数字积分(DDA)插补法插补软件流程图(3)编写出算法程序清单算法描述(数字积分法算法在VB中的具体实现)(4)要求软件能够实现第一、二、三、四象限顺、逆圆插补计算(5)软件运行仿真效果插补结果要求能够以图形模式进行输出五、数字积分法插补原理数字积分法又称数字积分分析法DDA(Digital differential Analyzer),简称积分器,是在数字积分器的基础上建立起来的一种插补算法。
一、四象限直线插补程序分别加工第一、二、三、四象限直线,起点均为(0,0),终点坐标为(NX,NY),进行插补计算。
程序中(NX,NY)为终点坐标;NXY为总步数;XOY=1,2,3,4,分别为第一、二、三、四象限; ZF=1,2,3,4,分别代表+x,-x,+y,-y走步方向;FM为加工点偏差,初值为0。
源程序:# include "stdio.h"# include "string.h"# include "math.h"void main(){ int NX,NY,NXY,BS,XOY,ZF;int FM=0;char a[10]="+X",b[10]="-X",c[10]="+Y",d[10]="-Y",e[10];printf("\n\n请输入NX,NY\n");scanf("%d %d",&NX,&NY);{if(NX>0)if(NY>0)XOY=1;elseXOY=4;elseif(NY>0)XOY=2;elseXOY=3;}printf("终点在第%d象限\n",XOY);printf("\n 步数坐标进给偏差计算终点判断\n\n");BS=fabs(NX) + fabs(NY);for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0;NXY--){ if(FM>=0){if(XOY==1||XOY==4){ ZF=1;strcpy(e,a);}else{ ZF=2;strcpy(e,b);}FM=FM-fabs(NY);printf(" %d %s FM=%d NXY=%d\n\n",BS-NXY,e, FM,NXY);}else{if(XOY==1||XOY==2){ZF=3;strcpy(e,c);}else{ZF=4; strcpy(e,d);}FM=FM+fabs(NX);printf(" %d %s FM=%d NXY=%d\n\n",BS-NXY,e, FM,NXY);}}}源程序:# include "stdio.h"# include "string.h"# include "math.h"void main(){ int NX,NY,NXY,BS,RNS,ZF,X0=0,Y0=0,XM,YM;int FM=0;char a[10]="+X",b[10]="-X",c[10]="+Y",d[10]="-Y",e[10];printf("请输入X0,Y0,NX,NY\n");scanf("%d %d %d %d",&X0,&Y0,&NX,&NY);{if(X0<NX)if(Y0>NY)if(X0>0)RNS=7;elseRNS=1;elseif(X0>0)RNS=8;elseRNS=2;elseif(Y0>NY)if(X0>0)RNS=4;elseRNS=6;elseif(X0>0)RNS=5;elseRNS=3;}printf("该圆弧为%d\n",RNS);BS=fabs(NX-X0) + fabs(NY-Y0);XM=X0;YM=Y0;for(NXY= fabs(NX-X0) + fabs(NY-Y0)-1;NXY>=0;NXY--){if(RNS==1||RNS==3||RNS==6||RNS==8){if(FM>=0){if(RNS==1||RNS==8){ ZF=1;strcpy(e,a);}else{ ZF=2;strcpy(e,b);}FM=FM+2*fabs(XM)+1;XM=XM+1;printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}else{if(RNS==1||RNS==6){ZF=3;strcpy(e,c);}else{ZF=4;strcpy(e,d);}FM=FM-2*fabs(YM)+1;YM=YM-1;printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}}elseif(FM>=0){if(RNS==2||RNS==7){ ZF=1;strcpy(e,a);}else{ ZF=2;strcpy(e,b);}FM=FM-2*fabs(XM)+1;XM=XM-1;printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}else{if(RNS==2||RNS==5){ ZF=3;strcpy(e,c);}else{ ZF=4;strcpy(e,d);}FM=FM+2*fabs(YM)+1;YM=YM+1;printf(" %d %s FM=%d XM=%d,YM=%d NXY=%d\n\n",BS-NXY,e, FM,XM,YM,NXY);}}}。
10.圆弧插补指令——G02、G03功用:G02:顺时针圆弧(顺圆)插补。
G03:逆时针圆弧(逆圆)插补。
圆弧运动控制指令,用以实现圆弧插补加工。
圆弧顺、逆的判断方法为:在圆弧插补中,沿垂直于要加工的圆弧所在平面的坐标轴由正方向向负方向看,由圆弧起点A——终点B,半径矢量R转动方向是顺时针方向为G02,是逆时针方向为G03。
格式:G17G18G19G02G03I- J-I- K-J- K-或RF-;X- Y-X- Z-Y- Z-注意:程序段中的终点坐标X、Y、Z可以用绝对坐标,也可以用增量坐标。
取决于程序段中已指定的G90或G91,还可以用增量坐标字U、V、W指定(如车床)。
程序段中的圆心坐标I、J、K一般用从圆弧起点指向圆心的矢量在坐标系中的分矢量(投影)来决定。
且对大部分数控系统来说,总是为增量值。
即不受G90控制。
有些数控系统允许用半径参数R代替圆心坐标参数I、 J、K编程。
加工圆弧时,不仅要用G02、G03指出圆弧的顺时针或逆时针方向,用X、Y 、Z 指定圆弧的终点坐标,而且还要指定圆弧的圆心位置。
XYZ起点(y0, z0)终点(y, z)O(J、K)n G90 G19 G02 Y- Z- J- K- F-;XYZ终点(y0, z0)起点(y, z)O(J、K)有缘学习更多+谓ygd3076或关注桃报:奉献教育(店铺)X Y Z起点(y 0, z 0)终点(y, z)O(J, K)R1)采用绝对值编程时, X 、Y 、Z 为圆弧终点在工件坐标系中的坐标值;当采用增量值编程时,X 、Y 、Z 为为圆弧终点相对于圆弧起点的坐标增量值。
2)无论是绝对坐标编程还是增量坐标编程,I 、J 、K 都为圆心坐标相对圆弧起点坐标的坐标增量值,如图2-6所示。
圆弧中心()刀具起点刀具终点刀具终点刀具起点()圆弧中心(a )顺圆(G17 G90 G02) (b )逆圆(G17 G90 G03)图2-6 圆弧圆心坐标的表示方法3)圆弧所对的圆心角α=<180︒时,用“+R”表示;当α>180︒时,用“–R”表示,如图2-7中的圆。
3数控机床逐点比较法圆弧插补:与直线初步相似,圆弧插补加工是将加工点到圆心距离与被加工圆弧的名 义半径相比较,并根据偏差大小确定坐标进给方向,以 逼近被加工圆弧。
下面 以 第一象限逆圆弧为例,讨论圆弧的插补方法。
如图8-4所示,设要加工圆弧为第一象限逆圆弧 AB ,原点为圆心0,起点 y o ),终点为B (X e , y e )半径R ,瞬时加工点为P (X i ,y i ),点P 到圆<0 -<0‘—开始—若点P 正好在圆弧上,则有2 2 2 2X i +y j =R p =R即X i 2+y j 2-R 2=0若点P 在圆弧外则,则有2 2 2 2X i +y j =R p >R即X i 2+y j 2-R 2 > 0若点 P 在圆弧内则,则有2 2 2 2x i +y j =R p <R心距离为Rp------ X >0]+△*为 A (xo , <0* <7 F>0 ?*+X 走 一步 |] -y 走一y f1 FT -Ye ||FJF -Xe图8-2第一象限一象限直线插补轨迹图图8-3第一象限直线插补程序框图图初始化Xe , Ye ,JJ J J-1J =0 ?结束即x i2+y j2-R2 < 0显然,若令F i,j = x i2+y j2-R2( 8-4) 图8-4 逆圆弧插补则有:(1)F i,j= F i,j=0,则点P在圆弧上( 2 )F i,j >0 则点P 在圆弧外则( 3 )F i,j<0 则点P 在圆弧不则常将8-4称为圆弧插补偏差判别式。
当F i,j>时,为逼近圆弧,应向-x方向进给一步;当F i,j<0时,应向+y方向走一步。
这样就可以获得逼近圆弧的折线图。
与直线插补偏差计算相似,圆弧插补的偏差的计算也采用递推的方法以简化计算。
若加工点P (X i, y i)在圆弧外或者圆弧上,则有:F i,j=x i2+y j2-R2> 0为逼近该圆沿-X方向进给一步,移动到新加工点P( X i=1,y i),此时新加工点的坐标值为x i+1=x i-1 ,y i=y i新加工点的偏差为:F i+1,j= (x i-1) 2+y i2-R2=x i2-2x i+1+ y i2-R22 2 2= x i + y i -R +1F i+I,j= F i,j-2x i+1(8-5)若加工P (X i, y i)在圆弧内,则有F i,j=x i2+y j2-R2<0若逼近该圆需沿+y方向进给一步,移到新加工点P (X i, y i),此时新加工点的坐标值图8-5第一象限圆弧插补程序框图为新加工点的偏为:F i,j+i =X i2+(y i+1)2-R2=X i2+ y i2+1 -R22 2 2=X i + y i -R +1+2y iF i,j+i = F i,j -2y i+1 (8-6)从(8-5)和式(8-6)两式可知,递推偏差计算仅为加法(或者减法)运算,大大降低了计算的复杂程度。
圆弧插补大报告引言圆弧插补是数控机床中常用的轨迹插补方式之一。
它通过控制切削工具在圆弧轨迹上进行运动,实现对工件的切削加工。
本报告将对圆弧插补进行详细介绍,包括定义、算法和应用等方面。
一、定义圆弧插补是将一系列线段连接起来,构成一个平滑的曲线轨迹,实现对工件进行加工的方法。
它通过一系列的直线插补和圆弧插补指令来实现。
1.1 圆弧插补指令在数控系统中,通常使用G02和G03两个指令实现圆弧插补。
其中,G02用于指定顺时针方向的圆弧插补,G03用于指定逆时针方向的圆弧插补。
圆弧插补指令的格式如下:G02/G03 X** Y** I** J**其中,X和Y表示圆弧终点的坐标,I和J表示圆弧的圆心相对于起点的坐标偏移量。
1.2 插补算法实现圆弧插补的关键是计算插补路径上各点的坐标。
目前常用的插补算法有三种:线性插值法、圆心法和切线法。
•线性插值法:采用直线来逼近圆弧,将圆弧划分成若干个小线段,计算每个小线段的终点坐标。
•圆心法:通过计算圆心的坐标,以及角度的增量,依次计算插补路径上的坐标点。
•切线法:根据切线方向和切线长度来计算插补路径上各点的坐标。
二、算法比较与选择针对不同的加工要求和系统限制,根据插补算法的特点和适用范围,我们可以选择合适的算法进行圆弧插补。
2.1 线性插值法线性插值法是最简单、最直观的圆弧插补算法。
它适用于对精度要求不高的加工,且插补路径相对简单的情况。
线性插值法的计算简单,但是效率相对较低。
2.2 圆心法圆心法可以实现高精度的圆弧插补,适用于要求较高加工精度的加工任务。
由于圆心法计算复杂,对数控系统的算力要求较高,因此在一些性能较差的系统中可能无法使用圆心法。
2.3 切线法切线法是一种高效的圆弧插补算法,它能够满足大多数加工任务的要求。
切线法计算简单,效率高,且可以实现较高的加工精度。
因此,大多数数控机床采用切线法进行圆弧插补。
综上所述,根据加工要求、系统性能和效率需求等因素综合考虑,选择合适的插补算法进行圆弧插补。
一、课程设计的目的1)了解持续轨迹操纵数控系统的组成原理。
2) 把握逐点比较法圆弧插补的大体原理。
3)把握逐点比较法插补的软件实现方式。
4)通过插补在matlab软件上面调试观看仿真轨迹二、课程设计的任务逐点比较法插补是最简单的脉冲增量式插补算法之一,其进程清楚,速度平稳,但一样只用于一个平面内两个坐标轴的插补运算。
其大体原理是在刀具按要求轨迹运动加工零件轮廓的进程中,不断比较刀具与被加工零件轮廓之间的相对位置,并依照比较结果决定下一步的进给方向,使刀具向减小误差的方向进给,且只有一个方向的进给。
也确实是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。
若是加工点走到轮廓外面去了,那么下一步要朝着轮廓内部走;若是加工点处在轮廓的内部,那么下一步要向轮廓外面走,以缩小误差,如此周而复始,直至全数终止,从而取得一个超级接近于数控加工程序规定轮廓的轨迹。
逐点比较法插补进程中的每进给一步都要通过误差判别、坐标进给、误差计算和终点判别四个节拍的处置,其工作流程图如下图。
三、设计的要求1、本次课程设计时刻为1周,学生应在规按时刻内按任务书要求完成相应象项插补程序设计的任务,并上交全数设计资料(设计任务书、软件流程图、源代码和设计说明书等);2、程序应有必然的注释;3、超期不交设计资料或不按要求完成设计任务的学生成绩评定为不合格;4、课程设计要求每一个学生独立完成,不得剽窃。
四、设计的内容1、了解数控插补的原理2、把握第Ⅲ象项圆弧插补算法;3、进行流程图设计;4、依照流程图编制程序,所编程序应能完整实现设计题目的要求;5、进行程序调试。
通过调试,把握调试方式及技术;6、验证第三象限圆弧插补。
7、编写设计说明书。
五、设计进程一、大体原理在加工圆弧进程中,人们很容易联想到利用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工误差。
逐点比较法第Ⅲ象限逆圆插补假设被加工零件的轮廓为第Ⅲ象限逆走向圆弧SE,,圆心在O(0,0),半径为R,起点为S(XS,Y S )N ’’第Ⅲ象限逆圆与动点之间的关系 当动点N (X i ,Y i )正好落在圆弧上时,那么有下式成立当动点N (X i ,Y i )落在圆弧外侧时,那么有下式成立当动点N (X i ,Y i )落在圆弧内侧时,那么有下式成立由此可见,取逐点比较法圆弧插补的误差函数表达式为当动点落在圆外时,为了减小加工误差,应向圆内进给,即向(+X)轴方向走一步;当动点落在圆内时,应向圆外进给,即向(-Y)轴方向走一步。
当动点正好落在圆弧上且尚未抵达终点时,为了使加工继续下去,理论上向(+X)轴或(-Y)轴方向进给均能够,但一样情形下约定向(+X)轴方向进给。
综上所述,现将逐点比较法第Ⅰ象限逆圆插补规那么归纳如下:当F >0时,即>0,动点落在圆外,那么向(+X)轴方向进给一步; 当F =0时,即=0,动点正好落在圆上,约定向(+X)轴方向进给一步; 当F <0时,即<0,动点落在圆内,那么向(-Y)轴方向进给一步。
由误差函数表达式可知,计算误差F 值,就必需进行动点坐标、圆弧半径的平方运算。
显然,在用硬件或汇编语言实现时不太方便。
为了简化这些计算,按逐点比较法直线插补的思路,也能够推导出逐点比较法圆弧插补进程中误差函数计算的递推公式。
假设第i 次插补后,动点坐标为N (X i ,Y i ),其对应误差函数为当F i ≥0,向(+X)轴方向进给一步,那么新的动点坐标值为X i +1=X i +1, Y i +1=Y i因此,新的误差函数为∴F i +1=F i +2X i +1同理,当F i <0,那么向(-Y)轴方向进给一步,那么新的动点坐标值为X i +1=X i , Y i +1=Y i -1因此,可求得新的误差函数为∴ F i +1=F i -2Y i +1将上式进行比较,能够看出两点不同:第一,递推形式的误差计算公式中仅有加/减法和乘2运算,而乘2可等效成该二进制数左移一名,这显然比平方运算来得简单。
第二,进给后新的误差函数值与前一点的误差值和动点坐标N (X i ,Y i )均有关系。
由于动点坐标值随着插补进程的进行而不断转变,因此,每插补一次,动点坐标就必需修正一次,以便为下一步的误差计算作好预备。
至此,将第Ⅲ象限逆圆弧插补的规那么和计算公式汇总,见表(表1-1) 第Ⅲ象限逆圆弧插补计算公式ON 22222R Y X Y X e e i i =+=+22222R Y X Y X e e i i =+>+22222R Y X Y X e e i i =+<+222R Y X F i i -+=222R Y X F i i -+=222R Y X F i i -+=222R Y X F i i -+= 2 2 2 2 2 12 111) R (Y X R Y X F ii i i i2 2 2 2 2 12 111) R Y (X R Y X F ii i i i2 2 2 R Y X F ii i数向F i ≥0在圆上或圆外+X Fi+1=Fi+2Xi+1Xi+1=Xi+1, Yi+1=YiF i <0在圆内-Y Fi+1=Fi-2Yi+1Xi+1=Xi, Yi+1=Yi-1表1-1圆弧插补进程的终点判别问题。
当圆弧轮廓仅在一个象限区域内,其终点判别仍可借用直线终点判别的三种方式进行,只是计算公式略不同。
Σ=|Xe -Xs|+|Ye-Ys|Σ=max{|Xe -Xs|,|Ye-Ys|}Σ1=|Xe-Xs| ,Σ2=|Ye-Ys|式中 XS 、Ys——被插补圆弧轮廓的起点坐标;Xe 、Ye——被插补圆弧轮廓的终点坐标。
b、插补象限和圆弧走向前面所讨论的逐点比较法直线和圆弧插补,均是针对第一象限直线和逆圆插补这种特定情形进行的。
但是,任何数控机床都应具有处置不同象限、不同走向曲线的能力。
四个象限中圆弧插补圆弧插补情况比直线插补复杂,不仅有象限问题,而且还有圆弧走向问题。
现以第Ⅲ象限顺圆SR1插补为例,介绍圆弧插补的特性。
假设圆弧SE起点为S(XS ,YS),终点为E(Xe,Ye),圆心在座标原点上。
与逆圆插补相似,当某一时刻动点N(Xi ,Yi)在圆弧的外侧时,有F≥0成立,应向+Y)轴方向进给一步,以减小误差;假设动点N(Xi ,Yi)在圆弧内侧,那么应向-X)轴方向进给一步。
由此可推导出第Ⅲ象限顺圆插补误差函数的递推公式如下:当Fi≥0时,向(+Y)轴方向进给一步,那么新的动点坐标为X i+1=Xi, Yi+1=Yi+1新动点的误差函数为∴Fi+1=Fi+2Yi+1当Fi <0时,向(-X)轴方向进给一步,那么新的动点坐标为Xi+1=Xi-1, Yi+1=Yi新动点的误差函数为∴Fi+1=Fi-2Xi+1现将上式比较,能够看出它们有两点不同:1)当Fi≥0或Fi<0时,对应的进给方向不同;2)插补计算公式中动点坐标的修正也不同,以至于误差计算公式也不相同。
进一步还可依照上述方式推导出其他象限不同走向圆弧的插补公式。
现将各类相应误差计算见表(表1-2)四个象限圆弧插补误差计算与进给方向线型F≥0F<0偏差计算坐标进给偏差计算坐标进给SR1NR2SR3NR4F-2|Y|+1→F|Y|-1→|Y|-ΔY-ΔY+ΔY+ΔYF +2|X|+1→F|X|+1→|X|+ΔX-ΔX-ΔX+ΔXNR1SR2NR3SR4F-2|X|+1→F|X|-1→|X|-ΔX+ΔX+ΔX-ΔXF+2|Y|+1→F|Y|+1→|Y|+ΔY+ΔY-ΔY-ΔY表1-22、逐点比较法第Ⅲ象限逆圆插补软件流程图)2222212111RY(XRYXFiiiii(2222212111)RYXRYXFiiiii3、依照流程图编制程序,所编程序应能完整实现设计题目的要求;#include <stdio.h>#include <math.h>int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle);int symbol(double number);main(){ArcXY(0,0,-3,5,360);getch();}int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle){FILE *f1;double i,j,dx,dy,dfr,x,y,ang,step,f = 0.01;int flag,tempx,tempy,statex,statey,direction = 1;dfr = sqrt((dfrx - dfx0) * (dfrx - dfx0) + (dfry - dfy0) * (dfry - dfy0)); if(dfx0 == 0){dfx0 = 1;dfrx = dfrx + 1;statex =1;}if(dfy0 == 0){dfy0 = 1;dfry = dfry + 1;statey =1;}dfrx = 2 * dfx0 - dfrx;i = dfx0 - dfrx;j = dfy0 - dfry;x = dfx0 ;y = dfy0 ;step = ang = 180 * 2 * asin(f/(2*dfr))/3.1415926;if(((dfx0 > 0) && (dfy0 > 0)) || ((dfx0 < 0) && (dfy0 < 0))){flag = direction;}if(((dfx0 < 0) && (dfy0 > 0)) || ((dfx0 > 0) && (dfy0 < 0))){flag = -direction;}f1=fopen("c:\\c.txt","w+");if(statex ==1){x = x - 1;}if(statey ==1){y = y – 1;}fprintf(f1,"%f,",x);fprintf(f1,"%f\n",y);while(ang < angle){dx = f * (j + flag*(f * i)/(2 * dfr))/dfr;dy = f * (i - flag*(f * j)/(2 * dfr))/dfr;tempx = symbol(x);tempy = symbol(y);x = x + dx;y = y + dy;fprintf(f1,"%f,",x);fprintf(f1,"%f\n",y);if( (tempx !=symbol(x)) || (tempy != symbol(y)) ) {flag = -flag; i = i - dx;j = j + dy;ang = ang + step;}return 0;}int symbol(double number){if(number > 0){return 1;}else{return -1;}}4、进行程序调试。