直线插补流程图

合集下载

机床数控课设-插补原理及流程图设计

机床数控课设-插补原理及流程图设计

《机床数控技术》课程设计说明书班级:0511105学号:*******姓名:指导教师:时间:2015年1月地点:明故宫校区计算中心目录一、简要说明--------------------------------------------------------3二、设计目的和任务--------------------------------------------------3三、设计要求--------------------------------------------------------3四.插补原理及流程图设计------------------------------------------4五.变量说明-------------------------------------------------------------6 六.程序界面及运行截图--------------------------------6七. 源程序代码----------------------------------------------------7八参考文献-------------------------------------18一、简要说明插补(Interpolation)在数控机床中,刀具不能严格地按照要求加工的曲线运动,只能用折线轨迹逼近所要加工的曲线。

插补(interpolation)定义:机床数控系统依照一定方法确定刀具运动轨迹的过程。

也可以说,已知曲线上的某些数据,按照某种算法计算已知点之间的中间点的方法,也称为“数据点的密化”。

数控装置根据输入的零件程序的信息,将程序段所描述的曲线的起点、终点之间的空间进行数据密化,从而形成要求的轮廓轨迹,这种“数据密化”机能就称为“插补”。

插补计算就是数控装置根据输入的基本数据,通过计算,把工件轮廓的形状描述出来,边计算边根据计算结果向各坐标发出进给脉冲,对应每个脉冲,机床在响应的坐标方向上移动一个脉冲当量的距离,从而将工件加工出所需要轮廓的形状。

逐点比较法第一象限直线插补

逐点比较法第一象限直线插补

逐点比较法第一象限直线插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。

逐点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。

只要将脉冲当量取得足够小,就可以达到精度要求。

逐点比较插补法在脉冲当量为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 向走一步;当 F<0 时,y 向走一步。

特点:每一步都需计算偏差,这样的计算比较麻烦。

递推的方法计算偏差:每走一步后新的加工点的偏差用前一点的加工偏差递推出来。

采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故。

下面推导其递推公式。

设在加工点 P( ) 处,,则应沿 +x 方向进给一步,此时新加工点的坐标值为新加工点的偏差为即若在加工点 P( ) 处,,则应沿 +y 方向进给一步,此时新加工点的坐标值为,新加工点的偏差为即综上所述,逐点比较法直线插补每走一步都要完成四个步骤 ( 节拍 ) ,即:(1) 位置判别根据偏差值大于零、等于零、小于零确定当前加工点的位置。

§1.4_逐点比较法_直线插补

§1.4_逐点比较法_直线插补

电子教案教学程序教学容及教学双边活动与教学方法导入新课讲授探究总结在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小误差的方向进给。

其算法最大偏差不会超过一个脉冲当量δ。

§1.4 逐点比较法——直线插补一、概述初称区域判别法,又称代数运算法或醉步式近似法。

这种方法应用广泛,能实现平面直线、圆弧、二次曲线插补,精度高。

每进给一步需要四个节拍:(1)偏差判别:判别加工点对规定图形的偏离位置,决定拖板进给的走向。

(2)坐标进给:控制某个坐标工作台进给一步,向规定的图形靠拢,缩小偏差。

(3)偏差计算:计算新的加工点对规定图形的偏差,作为下一步判别的依据。

(4)终点判断:判断是否到达终点。

若到达则停止插补,若没,再回到第一节拍。

介绍讲授图示分析讲授法理解记忆教学程序教学容及教学双边活动与教学方法新课讲授探究总结二、直线插补1.偏差计算公式如图所示第一象限直线OA,起点O为坐标原点,编程时,给出直线的终点坐标A ,直线方程为:●偏差判别:(1)动点m在直线上:(2)动点m在直线上方:(3)动点m在直线下方:偏差判别函数●坐标进给(1)动点m在直线上:,可沿+⊿x轴方向,也可沿+⊿y方向;(2)动点m在直线上方:,沿+⊿x方向;(3)动点m在直线下方:,沿+⊿y方向。

举例板图分析总结e e(,)x ymF<mF≥mF=教学程序教学容及教学双边活动与教学方法探究总结例题讲授例题讲授●新偏差计算+⊿x轴方向进给+⊿y轴方向进给●终点比较用Xe +Ye 作为计数器,每走一步对计数器进行减1计算,直到计数器为零为止。

2.终点判别法分别计数法双向计数法单向计数法3.插补运算过程插补计算时,每走一步,都要进行以下4个步骤(又称4个节拍)的算术运算或逻辑判断:方向判定:根据偏差值判定进给方向。

坐标进给:根据判定的方向,向该坐标方向发一进给脉冲。

逐点比较法直线插补原理

逐点比较法直线插补原理

四个象限插补计算统一起来; 不同象限的坐标进给方向由坐 F<0 F≥0
F≥0
L1 F<0
标值的符号来确定。
➢ 按照以上的插补规律,
可编制出逐点比较法直
F<0
线插补的程序。下面是
编制的演示程序。
L3
O
F≥0 F≥0
x F<0
L4
携手共进,齐创精品工程
Thank You
世界触手可及
数字增量插补算法中,粗插补由软件完成,精插补可以由 软件,也可以由硬件完成。
精插补由硬件完成: 如日本FANUC公司 的FANUC-3、6, 见图4-1
粗、精插补由软件完 成:如美国AllenBradley(A-B公司) 的9/260,见图4-2
二、脉冲增量插补算法
特点:
➢ 行程标量插补 每次插补的结果仅产生一个单位的行
环系统。
(一)逐点比较法
基本思路: 当刀具按要求的轨迹移动时,每走一步都要与规定的
轨迹比较,根据比较的结果决定下一步的移动方向,使 刀具向减小偏差的方向并趋向终点移动。
特点:
Y
运算直观,插补误差小于
一个脉冲当量,输出脉冲均匀,
速度变化小,调节方便。
(2,2) (3,2)
(1,1)
(2,1)
X
(0,0)
插补开始
偏差判别 坐标进给
偏差计算
终点判别
N
Y
插补结束
Y
例4-1:加工第一象限直线OA
起点偏差: F0,0=0
总步数:n=3+2=5
(2,2) A(3,2)
(1,1)
(2,1)
插补运算过程
O(0,0) (1,0)

2--插补象限、圆弧走向处理以及逐点比较法合成进给速度

2--插补象限、圆弧走向处理以及逐点比较法合成进给速度

于是,X轴方向和Y轴方向的进给速度为
vx 60 f X
v
y
60
fY
刀具的合成进给速度为
v vx2 vy2 60 f X 2 fY 2
当刀具沿着平行于坐标轴的方向进行切削时,其进给速度最大,该速度 称为脉冲源进给速度。
vMF 60 fMF 60 ( f X fY ) vx vy
② |Y|=|Y|-1
② |X|=|X|-1 ② |Y|=|Y|+ 1
② |X|=|X|+1
Y SR3、NR4
N +Y -Y
Y SR2、NR3
N
+X
-X
Y SR2、NR1
N +Y -Y
Y SR1、NR4
N
+X
-X
∑= ∑-1
∑= 0
N
Y
结束
(三)圆弧过象限 直线只可能处于一个象限中,因此不存在过象限问题。但是圆弧有可能 跨越几个象限,这时需要在两象限的交接处做相应的处理,此即圆弧过象限 问题。 当圆弧过象限时,具有如下特点: ① 在过象限前后,动点坐标的符号会发生改变; ② 在过象限后,圆弧的走向不变。 逆圆弧过象限的顺序为:NR1 → NR2 → NR3 → NR4 → NR1 →• • • 顺圆弧过象限的顺序为:SR1 → SR4 → SR3 → SR2 → SR1 →• • • ③ 过象限圆弧与坐标轴必有交点,当动点处在坐标轴上时必有一个坐 标值为零。此点可以作为过象限的标志。 ④ 终点判别不能简单地直接使用前述的三种方法,否则将丢失一部分 圆弧轮廓。
Y (0,5)
(3,4) (4,3)
X (5,0)
第一象限顺圆弧的插补问题可转换为第一象限逆圆弧的插补问题,转换方 法如下。

DAA法汇编语言四个象限直线插补

DAA法汇编语言四个象限直线插补

DDA法汇编语言四个象限直线插补DDA法汇编语言四个象限直线插补程序流程图如图所示。

四个象限直线插补程序流程图#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <math.h>int xe,ye,jvx,jvy,jrx,jry,xi,yi,jsh,lxy;/* xe、ye终点坐标jvx、jvy被积函数,jrx、jry余数寄存器xi、yi动点坐标,jsh计数长度, ,lxy象限号*/void zxcb1(); //声明第一象限直线插补函数void zxcb2(); //声明第2象限直线插补函数void zxcb3(); //声明第3象限直线插补函数void zxcb4(); //声明第4象限直线插补函数void main() //主函数{ int gd=DETECT,gm; //显示模式变量again: clrscr(); //清屏printf("L1_L4: Please input xe,ye:"); //提示输入终点坐标scanf("%d,%d",&xe,&ye); //等待输入if(xe==0&&ye==0){ printf("input error,enter any continue.");getch();goto again;} //输入错误继续输入if(xe==0&&ye>0)lxy=2; //终点为第2象限if(xe==0&&ye<0)lxy=4; //终点为第4象限if(ye==0&&xe>0)lxy=1; //终点为第一象限if(ye==0&&xe<0)lxy=3; //终点为第3象限if(xe>0&&ye>0)lxy=1; //终点为第一象限if(xe>0&&ye<0)lxy=4; //终点为第4象限if(xe<0&&ye>0)lxy=2; //终点为第2象限if(xe<0&&ye<0)lxy=3; //终点为第3象限xi=320;yi=240; //动点置屏幕中间initgraph(&gd,&gm,""); //图形显示方式jsh=0;jrx=0;jry=0;jvx=abs(xe);jvy=abs(ye);switch(lxy){ case 1: zxcb1();break; //第一象限调用插补程序函数1 case 2: zxcb2();break; //第一象限调用插补程序函数2 case 3: zxcb3();break; //第一象限调用插补程序函数3 case 4: zxcb4();break; //第一象限调用插补程序函数4 }gotoxy(10,24);printf("L%d: xe=%d,ye=%d",lxy,xe,ye); //显示终点坐标 gotoxy(10,25);printf("press any key:"); //提示按任意键 getch(); //等待按键}void zxcb1() //第一象限插补函数1{asm mov cx, xi //显示起点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm int 10hagain: asm mov ax, jvx //X方向积分asm add jrx, axasm jnc next1 //无进位下asm inc xi //下正X方向进给next1: asm mov ax, jvy //Y方向积分asm add jry, axasm jnc next2 //无进位下转asm dec yi //正Y进给next2: asm mov cx, xi //显示动点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm mov dx, 0100h //延时next2a: asm mov cx, 00ffhnext2b: asm dec cxasm jnz next2basm dec dxasm jnz next2aasm inc jsh //计数长度加1asm jnz again //未到终点继续}void zxcb2() //第2象限插补函数1 {asm mov cx, xi //显示起点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm int 10hagain: asm mov ax, jvx //X方向积分asm add jrx, axasm jnc next1 //无进位下asm dec xi //下负X方向进给next1: asm mov ax, jvy //Y方向积分asm add jry, axasm jnc next2 //无进位下转asm dec yi //正Y进给next2: asm mov cx, xi //显示动点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm int 10hasm mov dx, 0100h //延时next2a: asm mov cx, 00ffhnext2b: asm dec cxasm jnz next2basm dec dxasm jnz next2aasm inc jsh //计数长度加1asm jnz again //未到终点继续}void zxcb3() //第3象限插补函数1 {asm mov cx, xi //显示起点asm mov dx, yiasm mov ah, 0chasm int 10hagain: asm mov ax, jvx //X方向积分asm add jrx, axasm jnc next1 //无进位下asm dec xi //下负X方向进给next1: asm mov ax, jvy //Y方向积分asm add jry, axasm jnc next2 //无进位下转asm inc yi //负Y进给next2: asm mov cx, xi //显示动点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm int 10hasm mov dx, 0100h //延时next2a: asm mov cx, 00ffhnext2b: asm dec cxasm jnz next2basm dec dxasm jnz next2aasm inc jsh //计数长度加1asm jnz again //未到终点继续}void zxcb4() //第一象限插补函数1 {asm mov cx, xi //显示起点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm int 10hagain: asm mov ax, jvx //X方向积分asm add jrx, axasm jnc next1 //无进位下asm inc xi //下正X方向进给next1: asm mov ax, jvy //Y方向积分asm add jry, axasm jnc next2 //无进位下转asm inc yi //负Y进给next2: asm mov cx, xi //显示动点asm mov dx, yiasm mov ah, 0chasm mov al, 2asm int 10hasm mov dx, 0100h //延时next2a: asm mov cx, 00ffhnext2b: asm dec cxasm jnz next2basm dec dxasm jnz next2aasm inc jsh //计数长度加1 asm jnz again //未到终点继续}。

直线插补

直线插补
iTmp2 = ( iXEnd - iXStart ); //计算终点Y坐标与起点Y坐标的偏移量
fData = sqrt( ( iTmp1 * iTmp1 ) + ( iTmp2 * iTmp2 ) ); //计算直线长度
//计算直线夹角的正弦与余弦值
g_tLinePolPara.CosD = ( iXEnd - iXStart )/ fData;
//确定X轴插补方向
if( ( iXEnd - iXStart ) > 0 )
{
g_tLinePolPara.XDir = 1; //正向
}
else
{
g_tLinePolPara.XDir = 0; //反向
}
//确定Y轴插补方向
if( ( iYEnd - iYStart ) > 0 )
{
g_tLinePolPara.YDir = 1; //正向
g_tLinePolPara.SinD = ( iYEnd - iYStart ) / fData;
//起点x,y坐标
g_tLinePolPara.CurX = iXStart;
g_tLinePolPara.CurY = iYStart;
//终点x,y坐标
g_tLinePolPara.EndX = iXEnd;
{
g_tLinePolPara.IncY = g_tLinePolPara.EndY - g_tLinePolPara.CurY + g_tLinePolPara.IncY;
g_tLinePolPara.CurY = g_tLinePolPara.EndY;
g_tLinePolPara.Flag = 1; //置插补完成标志

数字积分插补法直线插补

数字积分插补法直线插补

数控原理与系统课程设计课题名称:数字积分插补法直线插补专业:班级:姓名:指导老师:数控原理与系统课程设计任务书班级姓名学号课程设计的目的1)了解连续轨迹控制数控系统的组成原理。

2) 掌握数字积分插补的基本原理。

3)掌握数字积分插补的软件实现方法。

二、课程设计的任务数字积分法又称数字微分分析法DDA(Digital Differential Analyzer)。

数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。

其缺点是速度调节不便,插补精度需要采取一定措施才能满足要求。

由于计算机有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。

本次课程设计具体要求如下:1)数字积分插补法基本原理2)数字积分插补法插补软件流程图3)算法描述(逐点比较法算法在VB中的具体实现)4)编写算法程序清单5)软件运行仿真效果二、课程设计报告要求1)按课程设计任务5点要求为标题,编写课程设计报告,最后加一点:此次课程设计小结(包括设计过程中所碰到的问题、解决办法以及有关设计体会等)。

2)字数在3000字左右。

3)仿真软件一份。

三、学生分组学 生 姓 名数控原理与系统课程设计说明书一、数字积分法直线插补的基本原理数字积分法是利用数字积分的方法,计算刀具沿各坐标轴的位移,使得刀具沿着所加工的轮廓曲线运动利用数字积分原理构成的插补装置称为数字积分器,又称数字微分分析器(Digital Differential Analyzer ),简称DDA 。

数字积分器插补的最大优点在于容易实现多坐标轴的联动插补、能够描述空间直线及平面各种函数曲线等。

因此,数字积分法插补在轮廓数控系统中得到广泛的应用。

从几何角度来看,积分运算就是求出函数Y = f (t )曲线与横轴所围成的面积,从t =t 0到t n 时刻,函数Y= f (t )的积分值可表述为⎰⎰==n n tt t t dt )t (Ydt S 00f如果进一步将t ∈[t 0,t n ]的时间区划分为若干个等间隔Δt 的小区间,当Δt 足够小时,函数Y 的积分可用下式近似表示t Y Ydt S n i i tt n ∆∑⎰-=≈=1在几何上就是用一系列的小矩形面积之和来近似表示函数f (t )以下的积分面积。

直线插补与圆弧插补程序设计

直线插补与圆弧插补程序设计

直线插补与圆弧插补程序设计一.直线插补1.直线插补程序流程图直线插补程序流程图2.直线插补程序设计#include <stdio.h>#include <graphics.h>#include <stdlib.h>void cb_line(int x1, int y1, int x2, int y2) {int dx, dy, n, k, i, f;int x, y;dx = abs(x2-x1);dy = abs(y2-y1);n = dx + dy;if (x2 >= x1) {k = y2 >= y1 ? 1: 4;x = x1;y = y1;} else {k = y2 >= y1 ? 2: 3;x = x2;y = y2;}putpixel(x, y, 1);for (i = 0, f = 0; i < n; i++)if (f >= 0)switch (k) {case 1:putpixel(x++, y, 1);f -= dy;break;case 2:putpixel(x, y++, 1);f -= dx;break;case 3:putpixel(x--, y, 1);f -= dy;break;case 4:putpixel(x, y--, 1);f -= dx;break;}elseswitch (k) {case 1:putpixel(x, y++, 1);f += dx;break;case 2:putpixel(x--, y, 1);f += dy;break;case 3:putpixel(x, y--, 1);f += dx;break;case 4:putpixel(x++, y, 1);f += dy;break;}}int main(){cb_line(0,0,15,20); /* <--- you forgot ; here */return 0;}二.圆弧插补2.1.四象限圆弧插补程序流程图2.1四象限圆弧插补程序设计#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;}}。

第三象限直线插补PLC课程设计

第三象限直线插补PLC课程设计

PLC 插补程序设计3.2.3.2逐点比较法直线插补根据以前学过的知识可知,偏差计算是逐点比较法关键的一步,下面以第一象限直线为例导出偏差的计算公式。

如图所示,假定直线OA 的起点为坐 标原点,终点A 的坐标为(x e , y e ) ,P (x i ,y i )为加工点,如 P 点正好处于OA 的直线上那么下式 成立:xyx eei=y i即x e y i - x i y e =0若任意点P (x i ,y i )在直线OA 的上方(严格地说在直线OA 与y 轴所成的夹角区域内),那么有下述关系成立;xyx eei>y i即x e y i -x i y e >0若任意点P (x i ,y i )在直线OA 的下方(严格的说,在直线OA 与x 轴的所成的夹角区域内),那么有下述关系成立;xyx eei<y i亦即x e y i - x i y e <0 由此可以得偏差判别函数F i,i 为F i,i = x e y i - x i y e由F i,i 的数值(称为 “偏差” )就可以判别出P 点相对的位置,即:当Fi,i =0时,点P(xi,yi)正好落在直线上;当Fi,i >点P(xi,yi)落在直线的上方;当Fi,i <点P(xi,yi)落在直线的下方。

若Fi,i ≥0时,则向+x轴发一个脉冲,刀具从(xi,yi)点向x方向前进一步,到达新加工点P(xi+1,yi),xi+1=xi+1,因此新加工点P(xi+1,yi)的偏差值为:Fi+1,i=xeyi-xi+1ye=xeyi-(xi+1)ye=xeyi-xiye-ye=Fi-yeFi+1,i=Fi,i-ye(3-1)如果在某一时刻,加工点P(xi ,yi)的Fi,i<0 ,则向+y轴发出一个进给脉冲,具从这一点向y方向前进一步,新加工点P(xi ,yi+1)的偏差值为:即Fi,i+1=xeyj+1-xiye=xe(yj+1)-xiye=xe yi-xeye+xe=Fi,i+xeFi,i+1=Fi,i+xe(3-2)根据式2-1 和2-2可以看出,新加工点的偏差完全可以用前一加工点的偏差递推出来。

数控原理直线插补课程设计

数控原理直线插补课程设计

太原工业学院课程设计任务书系部:机械工程系专业:机械设计制造及其自动化学生姓名:学号:设计题目:数控插补程序设计–第×象项直线(圆弧)插补起迄日期:设计地点:指导教师:发任务书日期: 年月日一.实验名称:直线插补(第一象限)二.实验要求:1.了解数控插补的原理;掌握第××象项直线(圆弧)插补算法2.设计流程图,并根据流程图编制程序,学会用软件方法实现插补运算。

3.学会调试程序三.实验内容:算法设计:上图为第一象限直线,其终点坐标为(Xe,Ye),现分析其插补规律。

刀尖点位置不外乎3种情况:轮廓线上方(点A),轮廓线上(B点),轮廓线下方(点C)。

显然,在点A处,为使刀尖点向轮廓直线靠拢,应+X向走一步;C点处,应+Y向走一步;至于B点,看来两个方向均可以,但考虑汇编编程时的方便,现规定往+X向走一步。

A(X,Y)点处有:Y/X e XeY-XYe > 0e XeY-XYe = 0C(X,Y)点处有:Y/X< e XeY-XYe < 0F=XeY-XYe为原始的偏差计算公式(X,Y为当前插补点动态坐标),F称为偏差,每走一步到达新位置点,就要计算相应这个F值。

显然,F≥0时,须+X向走一步;F<0时,须+Y向走一步。

为方便汇编编程和提高计算速度,现对偏差F的计算公式加以简化:插补点位于A、B点时,走完下一步(+X):动态坐标变为(X=X+1,Y=Y),新偏差变为F=XeY-(X+1)Ye=XeY-XYe-Ye=F-Ye。

这个公式比F=XeY-XYe计算要方便。

插补点位于C点时,走完下一步(+Y):动态坐标变为(X=X,Y=Y+1),新偏差变为F=Xe(Y+1)-XYe=XeY-XYe+Xe=F+Xe。

因此,走完+X后:偏差计算公式为F=F-Ye;走完+Y后:偏差计算公式为F=F+Xe。

●程序流程图:●源程序设计:#include <stdio.h>#include <math.h>void main(){int x=0,y=0; /*x,y分别为运行过程中各点的横纵坐标值*/int f=0; /*f存偏差判别的值*/int n,i,j,t; /*n为终点横纵坐标绝对值之和,i,j分别为终点横纵坐标*/printf("请输入终点坐标:");scanf("%d,%d",&i,&j);n=abs(i)+abs(j);if(i>=0) /*终点的横坐标大于0,说明在一或四象限中*/{if(j>=0){ /*纵坐标大于0,说明终点在第一象限*/for(t=1;t<=n;t++){if(f>=0){x=x+1;f=f-j;printf("x=%d,y=%d\n",x,y);}else{y=y+1;f=f+i;printf("x=%d,y=%d\n",x,y);}}}}}程序编译与调试:编译环境为TurboC2.0,一次编译通过。

3.5.1 直线和圆弧逐点比较法插补原理

3.5.1 直线和圆弧逐点比较法插补原理
2012-5-30
THE
END
2012-5-30
i j i, j j
终点判别方法:| Xe- X0| + | Ye - Y0|
2012-5-30
三 逐点比较法插补
逐点比较法圆弧插补示例
设圆弧AB为第一象限逆圆弧,起点A(Xa=3,Ya=0),终 点为B(Xb=0,Yb=3),用逐点比较法加工圆弧AB。 Y 3 2
B
1
A O
2012-5-30
2012-5-30
三 逐点比较法插补

逐点比较法直线插补示例
2012-5-30
三 逐点比较法插补
线四 插个 补象 计限 算直
Fm ≥0 线型 进给方向 偏差计算 线型
Fm <0 进给 方向 偏差 计算
L1,L4
2012-5-30
+X
-X
Fm+1= Fm-ye
L1,L2
L3,L4
+Y
-Y
Fm+1= Fm+xe
L2,L3
三 逐点比较法插补
第 一 象 限 直 线 插 补 程 序 框 图
2012-5-30
2 逐点比较法圆弧插补
Y
B (Xe,Ye) F=0 M(Xi,Yj)
当M(Xi,Yi)在圆弧上,则F=0; 当M(Xi,Yi)在圆弧外,则F>0; 当M(Xi,Yi)在圆弧内,则F<0;
F<0

Ri R
2012-5-30
一 插补基本概念
2)关于插补的几个概念: 1 位置检测分辨率 2 反馈信号倍频 3 反馈信号鉴相 4 最小设定单位(脉冲当量)
机床工作台
指令脉冲 步进电机 驱动线路

逐点比较法(代数运算法、醉步法)图解

逐点比较法(代数运算法、醉步法)图解

逐点比较法(代数运算法、醉步法)图解1、逐点比较法直线插补第Ⅰ象限一加工直线,起点坐标原点O,终点坐标为A(xe,ye),则直线方程可表示为,即令Fi,j=xeyj-yexi为偏差判别函数,则有:(1)当Fi,j≥0时,向+X方向进给一个脉冲当量,到达点Pi+1,j,此时xi+1=xi+1,则点Pi+1,j的偏差判别函数Fi+1,j为(2)当Fi,j<0时,向+Y方向进给一个脉冲当量,到达点Pi,j +1,此时yj+1=yj+1,则点Pi,j+1的偏差判别函数Fi,j+1为可见,新加工点的偏差Fi+1,j或Fi,j+1是由前一个加工点的偏差Fi,j和终点的坐标值递推出来的,假如按前两式计算偏差,则计算大为简化。

终点判别三种方法:(1)判别插补或进给的总步数:N=Xe+Ye;(2)分别判别各坐标轴的进给步数;(3)仅推断进给步数较多的坐标轴的进给步数。

总结:第一拍判别其次拍判别第三拍判别第四拍比较Fij≥0+ΔxFi+1,j= Fi,j-yeEi+j=E终-1Fij0+ΔyFi,j+1= Fi,j+xe第Ⅰ象限直线插补流程图:例5-1 设加工第一象限直线,起点为坐标原点O(0,0),终点A (6,4),用逐点比较法对其进行插补,并画出插补轨迹。

终点判别寄存器E=6+4=10,每进给一步减1,E=0时停止插补。

步数偏差判别坐标进给偏差计算终点判别起点F0,0=0E=101F0,0=0+XF1,0=F0,0-ye=0-4=-4 E=10-1=92F1,0<0+YF1,1= F1,0+xe=-4+6=2 E=9-1=83F1,1>0+XF2,1= F1,1-ye=2-4=-2 E=8-1=74F2,1<0+YF2,2= F2,1+xe=-2+6=4 E=7-1=65F2,2>0+XF3,2= F2,2-ye=4-4=0 E=6-1=56F3,2=0+XF4,2= F3,2-ye=0-4=-4 E=5-1=47F4,2<0+YF4,3= F4,2+xe=-4+6=2 E=4-1=38F4,3>0+XF5,3= F4,3-ye=2-4=-2 E=3-1=29F5,3<0+YF5,4= F5,3+xe=-2+6=4E=2-1=110F5,4>0+XF6,4= F5,4-ye=4-4=0E=1-1=02、其他象限直线插补的方法:1)分别处理法分别建立其他三个象限偏差函数计算公式。

直线插补流程图

直线插补流程图

直线插补与圆弧插补程序设计一.直线插补直线插补程序设计:#include"stdio.h"#include"math.h"void CHABU1 (int F,int n,int Y,int X) /*第一象限调用函数*/{int nx=0,ny=0;for(;n>0; n--){printf("运算前:F=%d ",F);i f(F>=0){printf("需走步数:n=%d\n",n);printf("------向+xe方向走一步 ");F=F-Y;printf("F=%d",F);printf("+X\n");nx++; /*X方向走的总步数*/}e lse{printf("需走步数:n=%d\n",n);printf("------向+ye方向走一步 ");F=F+X;printf("F=%d",F);printf("+Y\n");ny++; /*y方向走的总步数*/}}printf("nx=%d,ny=%d\n",nx,ny);void CHABU2(int F,int n,int Y,int X) /*第二象限调用函数*/{int nx=0,ny=0;for(;n>0; n--){printf("运算前:F=%d ",F);if(F>=0){printf("需走步数:n=%d\n",n);printf("------向-xe方向走一步 ");F=F-Y;printf("F=%d ",F);printf("-X\n");nx++; /*X方向走的总步数*/}else{printf("需走步数:n=%d\n",n);printf("------向+ye方向走一步 ");F=F+X;printf("F=%d ",F);printf("+Y\n");ny++; /*y方向走的总步数*/}}printf("nx=%d,ny=%d\n",nx,ny);}void CHABU3(int F,int n,int Y,int X) /*第三象限调用函数*/{int nx=0,ny=0;for(;n>0; n--){printf("运算前:F=%d ",F);if(F>=0){printf("需走步数:n=%d\n",n);printf("------向-xe方向走一步 ");F=F-Y;printf("F=%d ",F);printf("-X\n");nx++; /*X方向走的总步数*/}else{printf("需走步数:n=%d\n",n);printf("------向-ye方向走一步 ");F=F+X;printf("F=%d ",F);printf("-Y\n");ny++; /*y方向走的总步数*/}}printf("nx=%d,ny=%d\n",nx,ny);}void CHABU4(int F,int n,int Y,int X) /*第四象限调用函数*/{int nx=0,ny=0;for(;n>0; n--){printf("运算前:F=%d ",F);if(F>=0){printf("需走步数:n=%d\n",n);printf("------向+xe方向走一步 ");F=F-Y;printf("F=%d ",F);printf("+X\n");nx++; /*X方向走的总步数*/}else{printf("需走步数:n=%d\n",n);printf("------向-ye方向走一步 ");F=F+X;printf("F=%d ",F);printf("-Y\n");ny++; /*y方向走的总步数*/}}printf("nx=%d,ny=%d\n",nx,ny);}main(){int F=0,X=0,Y=0,n,xe,ye,x0,y0,ny,nx;void CHABU1 (int,int,int,int);/*函数声明*/void CHABU2(int,int,int,int);void CHABU3(int,int,int,int);void CHABU4(int,int,int,int);/*函数声明*/printf("输入相关数据\n");printf("x0=");scanf("%d",&x0);printf("xe=");scanf("%d",&xe);printf("y0=");scanf("%d",&y0);printf("ye=");scanf("%d",&ye);X=abs(xe-x0); /*取绝对值*/Y=abs(ye-y0); /*取绝对值*//*printf("X=%d\n",X);验证绝对值函数*/n=X+Y;printf("n=%d\n",n); /*总步数*/printf("运动结果如下:\n");if(x0>=0&&y0>=0&&xe>=0&&ye>=0) { printf("第一象限\n");CHABU1(F,n,Y,X);}else if(x0<=0&&y0>=0&&xe<=0&&ye>=0) { printf("第二象限\n");CHABU2(F,n,Y,X);}else if(x0<=0&&y0<=0&&xe<=0&&ye<=0) { printf("第三象限\n");CHABU3(F,n,Y,X);}else if(x0>=0&&y0<=0&&xe>=0&&ye<=0) { printf("第四象限\n");CHABU4(F,n,Y,X);}else printf("跨象限运动");}。

数控车床 直线插补G01 圆弧插补G02,G03(技术材料)

数控车床 直线插补G01 圆弧插补G02,G03(技术材料)
技术课件
上一页 下一页
25 返回
参考程序
G00 X80 Z80; T0100 M05; M30;
注释
快速返回刀具起点 主轴停止,换回基准刀 程序结束
1. 由于T0100偏刀加工F-H的轮廓时刀具与工件有干涉,所以采用T0202切槽
刀来加工。
2.本程序G02/G03的程序段采用混合坐标编程。
3.刀具精加工时应根据刀具的性能采用不同的转速。
程序名 定位到安全的换刀位置 主轴正转,转速600r/min,一号刀具 靠近B点 从B点切削至C点 从C点切削至D点 退回安全位置 停止主轴 程序结束
技术课件
13
技术课件
14
国际标准规定顺时针圆弧插补指令为G02和逆时针圆弧插补指令为 G03。数控车床是两坐标的机床,只有X轴和Z轴,因此,按右手定则的 方法将Y轴考虑进来,然后观察者从Y轴的正方向向Y轴的负方向看去, 即可正确判断出圆弧的顺逆。
上一页Leabharlann F--切削进给速度。下一页
技术课件
18 返回
圆弧插补指令是命令刀具在指定平面内按给定的F进给速度做圆 弧运动,切削出圆弧轮廓。
技术课件
上一页 下一页
19 返回
技术课件
上一页 下一页
20 返回
技术课件
上一页 下一页
21 返回
实例1,如图所示,工件已粗加完毕,各个位置留有0.3mm的余量,根 据图所示的路线编写精加工程序,不切断。
W/U、Z),在同一程序中也可任意使用。
2.本例题采用绝对坐标编程。
技术课件
上一页 下一页
11 返回
为了完成零件的自动加工,需要按照CNC的编程格式编写零 件程序。CNC执行程序完成机床进给运动、主轴起停、刀具 选择等控制,从而实现零件的加工。

01-2.逐点比较法直线插补

01-2.逐点比较法直线插补
X2+Y2-R2=0 P点在圆弧外侧时,则OP大于圆弧半径R,即 X2+Y2-R2>0
P点在圆弧内侧时,则OP小于圆弧半径R,即 X2+Y2-R2<0 用F表示P点的偏差值,定义圆弧偏差函数判别式为
F X 2 +Y 2 R2
当动点落在圆弧上时,一般约定将其和F>0一并考虑。
机电工程学院
第一象限顺圆弧
即:
F X Y X Y i +1
e i+1
i+1 e
Xe (Yi +1 ) XiYe
Xe Yi XiYe + Xe
Fi+1 Fi + Xe
机电工程学院
开始加工时,将刀具位于起点,刀具正好处于直线
上,偏差为零,即F=0,根据这一点偏差可求出新一点偏 差,随着加工的进行,每一新加工点的偏差都可由前一点 偏差和终点坐标相加或相减得到。
坐标计算 X 0=0,Y 0=4 X 1=0,Y 1=3 X 2=1,Y 2= 3 X 3=2,Y 3=3 X 4=3,Y 4=3 X 5=3,Y 5=2 X 6=4,Y 6=2 X 7=4,Y 7=1 X 7=4,Y 7=0
Y
4 A(0,4) 3
2
1
B(4,0)
O 1 2 34
X
机电工程学院
终点判别 N =8 N =7 N =6 N =5 N =4 N =3 N =2 N =1 N =0
图5-10 脉冲增量差补流程框图
机电工程学院
2. 圆弧插补
在圆弧加工过程中,可用动点到圆心的距离来描述刀具位置与被加工 圆弧之间关系。设圆弧圆心在坐标原点,已知圆弧起点A(Xa,Ya),终 点B(Xb,Yb),圆弧半径为R。加工点可能在三种情况出现,即圆弧上、 圆弧外、圆弧内。当动点P(X,Y)位于圆弧上时有
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直线插补与圆弧插补程序设计一.直线插补
1.直线插补程序流程图
直线插补程序设计:
#include"stdio.h"
#include"math.h"
void CHABU1 (int F,int n,int Y,int X) /*第一象限调用函数*/
{
int nx=0,ny=0;
for(;n>0; n--)
{
printf("运算前:F=%d ",F);
i f(F>=0)
{
printf("需走步数:
n=%d\n",n);
printf("------向
+xe方向走一步 ");
F=F-Y;
printf("F=%d
",F);
printf("+X\n");
nx++; /*X方向走的总步数*/
}
e lse
{
printf("需走步数:
n=%d\n",n);
printf("------向
+ye方向走一步 ");
F=F+X;
printf("F=%d
",F);
printf("+Y\n");
ny++; /*y方向走的总步数*/
}
}
printf("nx=%d,ny=%d\n",nx,ny);
void CHABU2(int F,int n,int Y,int X) /*第二象限调用函数*/
{
int nx=0,ny=0;
for(;n>0; n--)
{
printf("运算前:F=%d ",F);
if(F>=0)
{
printf("需走步数:
n=%d\n",n);
printf("------向-xe方向走一步 ");
F=F-Y;
printf("F=%d ",F);
printf("-X\n");
nx++; /*X方向走的总步数*/
}
else
{
printf("需走步数:n=%d\n",n);
printf("------向+ye方向走一步 ");
F=F+X;
printf("F=%d ",F);
printf("+Y\n");
ny++; /*y方向走的总步数*/
}
}
printf("nx=%d,ny=%d\n",nx,ny);
}
void CHABU3(int F,int n,int Y,int X) /*第三象限调用函数*/
{
int nx=0,ny=0;
for(;n>0; n--)
{
printf("运算前:F=%d ",F);
if(F>=0)
{
printf("需走步数:n=%d\n",n);
printf("------向-xe方向走一步 ");
F=F-Y;
printf("F=%d ",F);
printf("-X\n");
nx++; /*X方向走的总步数*/
}
else
{
printf("需走步数:n=%d\n",n);
printf("------向-ye方向走一步 ");
F=F+X;
printf("F=%d ",F);
printf("-Y\n");
ny++; /*y方向走的总步数*/
}
}
printf("nx=%d,ny=%d\n",nx,ny);
}
void CHABU4(int F,int n,int Y,int X) /*第四象限调用函数*/
{
int nx=0,ny=0;
for(;n>0; n--)
{
printf("运算前:F=%d ",F);
if(F>=0)
{
printf("需走步数:
n=%d\n",n);
printf("------向+xe方向走一步 ");
F=F-Y;
printf("F=%d ",F);
printf("+X\n");
nx++; /*X方向走的总步数*/
}
else
{
printf("需走步数:n=%d\n",n);
printf("------向-ye方向走一步 ");
F=F+X;
printf("F=%d ",F);
printf("-Y\n");
ny++; /*y方向走的总步数*/
}
}
printf("nx=%d,ny=%d\n",nx,ny);
}
main()
{
int F=0,X=0,Y=0,n,xe,ye,x0,y0,ny,nx;
void CHABU1 (int,int,int,int);/*函数声明*/
void CHABU2(int,int,int,int);
void CHABU3(int,int,int,int);
void CHABU4(int,int,int,int);/*函数声明*/
printf("输入相关数据\n");
printf("x0=");
scanf("%d",&x0);
printf("xe=");
scanf("%d",&xe);
printf("y0=");
scanf("%d",&y0);
printf("ye=");
scanf("%d",&ye);
X=abs(xe-x0); /*取绝对值*/
Y=abs(ye-y0); /*取绝对值*/
/*printf("X=%d\n",X);验证绝对值函数*/
n=X+Y;
printf("n=%d\n",n); /*总步数*/
printf("运动结果如下:\n");
if(x0>=0&&y0>=0&&xe>=0&&ye>=0) { printf("第一象限
\n");CHABU1(F,n,Y,X);}
else if(x0<=0&&y0>=0&&xe<=0&&ye>=0) { printf("第二象限\n");CHABU2(F,n,Y,X);}
else if(x0<=0&&y0<=0&&xe<=0&&ye<=0) { printf("第三象限\n");CHABU3(F,n,Y,X);}
else if(x0>=0&&y0<=0&&xe>=0&&ye<=0) { printf("第四象限\n");CHABU4(F,n,Y,X);}
else printf("跨象限运动");
}。

相关文档
最新文档