逐点比较法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2插补计算的步骤
第一步:偏差判别,判别刀具当前位置相对于给定轮廓的偏离情况,并以此决定刀具的进给方向。
第二步:坐标进给,根据偏差判别的结果,控制刀具向相应坐标轴进给一步,使加工点向给定轮廓靠拢,减小偏差。
第三步:偏差计算,刀具进给一步后,计算新的加工点与给定轮廓之间的偏差,为下一步偏差判别做准备。
}
else
{
ZF=4;
X=X;
Y=Y-1;
printf("X=%d,Y=%d\n来自百度文库,X,Y);
}
FM=FM+XE;
}
NXY=NXY-1;
}
}
2.5运行结果
3.数字积分直线插补
3.1数字积分法直线插补的基本原理
数字积分法是利用数字积分的方法,计算刀具沿各坐标轴的位移,使得刀具沿着所加工的轮廓曲线运动
利用数字积分原理构成的插补装置称为数字积分器,又称数字微分分析器(Digital Differential Analyzer),简称DDA。数字积分器插补的最大优点在于容易实现多坐标轴的联动插补、能够描述空间直线及平面各种函数曲线等。因此,数字积分法插补在轮廓数控系统中得到广泛的应用。
只要在JVX、JVY左移的同时,终点判别计数器把“1”信号从最高位输入进行右移来缩短计数长度
图4
⑵按进给速率数FRN编程
为实现不同长度程序段的恒速加工,在编程时考虑被加工直线长度,采用FRN来表示“F”功能,则:
式中V—要求的加工切削速度;L—被加工直线长度;
因为 所以
由上式可见,FRN编程,其实质是控制迭代频率fg,fg与V/L成正比,当插补尺寸L不同时,使迭代频率作相应改变,以保证所选定的进给速度。
start:
printf("请输入直线的起点:");
scanf("%d %d",&Xs,&Ys);
printf("请输入直线的终点:");
scanf("%d %d",&Xe,&Ye);
if(Xe-Xs<0&&Ye-Ys>0&&Xs<0&&Ys>0)
{
i=0,Jrx=0,Jry=0,Jvx=abs(Xe-Xs),Jvy=abs(Ye-Ys);
积分器作直线插补时,不论各段程序的被积函数大小,都必须经过m=2n次累加运算才能到达终点。这样各个坐标溢出脉冲的速度受被积函数的大小影响。被积函数愈大,溢出脉冲速度愈快,因而机床的进给速度也愈快;反之,被积函数愈小,速度愈低,机床的进给速度愈慢。即加工尺寸大,走刀快,加工尺寸小,走刀慢。所以各程序段的进给速度是不一致的,这将影响加工的表面质量,特别是行程短的程序段,生产效率低控制积分器的溢出速度的方法——左移规格化
3.1.1从几何角度来看积分运算
积分运算就是求出函数Y = f(t)曲线与横轴所围成的面积,从t=t0到tn时刻,函 数Y= f(t)的积分值可表述为
如果进一步将t∈[t0,tn]的时间区划分为若干个等间隔Δt的小区间,当Δt足够小时,函数Y的积分可用下式近似表示
在几何上就是用一系列的小矩形面积之和来近似表示函数f(t)以下的积分面积。进一步如果在式中,取Δt为基本单位“1”,则上式可演化成数字积分器算式:
第四步:终点判别,判断刀具是否到达被加工零件的终点,若到达终点,则结束插补,否则继续插补,如此不断循环以上四个节拍就可加工出所要求的曲线。
2.3直线插补程序流程图
图2直线插补程序流程图
2.4直线插补程序
#include<stdio.h>
main()
{
int X=0,Y=0,XE,YE,XOY,NXY,FM=0,ZF;
直线插补时不论被积函数有多大,对于N位寄存器。必须累加2N次才能到达终点。因此可以用一容量为2N的寄存器当计数器,来统计累加的次数。可以用加1计数器,也可以用减1计数器。
采用加1计数器时,首先将计数器清零,运算过程中每来一个累加脉冲△t就加1。当计数器满2N时表明运算完成。
采用减1计数器时,运算前把总运算次数2N送入计数器,每运算一次,就减去1。当计数器减为0时,表明运算完成。
逐点比较法和数字积分的直线插补
1.引言
数控技术逐渐成为了制造业实现自动化和集成化生产的基础技术。为了配合这一生产实践的需要,数控技术也走进了高校,走进了培训机构,成为竞相追逐的热点。其中,在进行插补法教学时,过程一般都是:讲解插补原理,插补流程,最后有条件的进行插补软件的实验。数控系统是数控机床的核心控制系统,其主要功能是使刀具或工件按规定的程序自动地进行工作由于刀具或工件的运动轨迹是由插补模块给出的,因此数控插补模块在数控系统中具有十分重要的地位。
2.逐点比较法直线插补
2.1逐点插补的原理
逐点比较法又称代数运算法或醉步法,其基本原理是每次仅向一个坐标轴输出一个进给脉冲,而每走一步都要通过偏差函数计算,判断偏差的瞬时坐标与规定加工轨迹之间的偏差,然后决定下一步的进给方向。如图1所示(以第一象限直线插补为例)设直线OA为第一象限的直线,起点为坐标原点:O(0,0),终点坐标为:A(xe,ye),P(xi,yj)为加工点。
[2]李恩林,《数控系统插补原理通论》,国防工业出版社,2008年
[3]谭浩强,《C程序设计教程》,清华大学出版社,2007年
[4]田梅,《C语言时尚编程百例》,机械工业出版社,2004年
[5]黄维通,孟威,《C程序设计教程》,机械工业出版社,2003年
for(;Xs!=Xe||Ys!=Ye;i++)
{
Jrx=Jrx+Jvx,Jry=Jry+Jvy;
if(Jrx>=8)
{
Jrx=Jrx-8,Xs=Xs-1,DX=1;
}
if(Jry>=8)
{
Jry=Jry-8,Ys=Ys+1,DY=1;
}
if(DX==1||DY==1)
{
printf("%d(%d,%d)\n",i,Xs,Ys);
3.1.3插补器的组成
二坐标DDA直线插补器包括X积分器和Y积分器,每个积分器都由被积函数寄存器Jvx(速度存寄器)和累加器Jrx(余数寄存器)组成。初始时,X被积函数寄存器存Xe(或Xe/2N),Y被积函数寄存器存Ye(或Ye/2N)。
3.1.4数字积分法稳速控制
⑴直线插补的左移规格化及其解决的问题
图1逐点比较法直线插补
根据OP,OA斜率判断P相对OA的位置,决定脉冲的发出方向,则可推导其递推公式(1)设在加工点P(xi,yj)处,Fi,j≥0当时(其中),则点P在直线OA上方,应向+X方向进给一步,以逼近OA直线,此时新加工点的坐标值为:xi+1=xi+1;yj=yj新加工点的偏差为Fi+1,j- xeyj-(xi+1)ye=xeyj- xiye- ye即Fi+1,j=Fij- ye(2)设在加工点P(xi,yj)处,Fi,j<0当时,则点P在直线OA下方,应向+Y方向进给一步,以逼近OA直线,此时新加工点的坐标值为:xi=xi;yj+1=yj+1新加工点的偏差为:fi,j+1=xeyj+1- xiye=xe(yj+1)- xiye即Fi,j+1=Fij+xe同理,以推广到其他各象限。
3.2数字积分法直线插补框图
图5数字积分法直线插补框图
3.3字积分法直线(第二象限)插补程序流程图
图6(第二象限)插补程序流程图
3.4数字积分法直线插补程序清单(第二象限)
#include<stdio.h>
#include<math.h>
void main()
{
int i,Xs,Ys,Xe,Ye ,Jvx,Jrx,Jvy,Jry,DX,DY;
也可进行简单的各种插补,且易于理解;两种方法都要熟练掌握程序的编写。总之,通过课程设计,进一步学习了各方面的知识及其运用,最终完成要求,实现软件的运行,运行程序后按提示输入直线的起点、终点坐标后即可自动进行插补计算并输出各个插补点的坐标值。
5.参考书目
[1]吴金娇,丁文政,孙明江,刘玲,《数控原理与系统》,人民邮电出版社,2009年
printf("输入XOY=\n");
scanf("%d",&XOY);
printf("输入XE=\n");
scanf("%d",&XE);
printf("输入YE=\n");
scanf("%d",&YE);
NXY=XE+YE;
while(NXY!=0)
{
if(FM>=0)
{
if(XOY==1||XOY==4)
{
ZF=1;
X=X+1;
Y=Y;
printf("X=%d,Y=%d\n",X,Y);
}
else
{ZF=2;
X=X-1;
Y=Y;
printf("X=%d,Y=%d\n",X,Y);
}
FM=FM-YE;
}
else
{
if(XOY==1|| XOY==2)
{
ZF=3;
X=X;
Y=Y+1;
printf("X=%d,Y=%d\n",X,Y);
1
0
1
0
0
0
寄存器:
0
0
0
1
0
1
非规格化数规格化数
规格化数累加一次必有一次溢出,而非规格化的数,必须作两次以上累加才有一次溢出。左移规格化法就是将非规格化数左移使之成为规格化数。为了使每个程序段积分的溢出速度大致均匀,在直线插补时必须把寄存器中的数Xe、Ye同时左移,直到JVX、JVY中有一个数是规格化数为止。同时左移,意味着把X、Y两方向的脉冲分配速度扩大同样的倍数,二者数值之比不变,所以直线斜率不变。因为规格化后每累加运算两次必有一次溢出,溢出速度比较均匀,所以加工的效率,加工质量都大为提高。
当Xe、Ye左移Q位后(至少使其中的一个成为规格化数),为使各坐标分配的脉冲数最后等于Xe及Ye值,这样作为终点判别的累加次数m必须减少。
寄存器中的数每左移一位,数值增大一倍;此时,比例常数k应该为k=1/2n-1 ,累加次数m=2n-1次。若左移q位,则m=2n-q次。进行左移规格化的同时,终点判别计数器中的数也要做相应的改变。具体方法:
由此可见,通过假设Δt=“1”,就可将积分运算转化为式所示的求纵坐标值的累加运算。若再假设累加器容量为一个单位面积值,则在累加过程中超过一个单位面积时立即产生一个溢出脉冲。这样,累加过程所产生的溢出脉冲总数就等于所求的总面积,即所求的积分值。下面就以直线和圆弧轨迹为例详细介绍
3.1.2插补终点判别的具体实现
DX=0,DY=0;
}
}
printf("\n本次插补结束,请输入下一条第二象限直线的坐标\n");
}
else
printf("!!!此直线不在第二象限,请输入第二象限点的坐标\n");
goto start;
getchar();
}
4.结论
本次设计运用软件插补程序进行插补控制,调整和修改都很方便,而且数字积分法插补运算速度快,脉冲分配均匀,易于实现多坐标联动及描绘平面各种函数曲线的特点;逐点比较法
第一步:偏差判别,判别刀具当前位置相对于给定轮廓的偏离情况,并以此决定刀具的进给方向。
第二步:坐标进给,根据偏差判别的结果,控制刀具向相应坐标轴进给一步,使加工点向给定轮廓靠拢,减小偏差。
第三步:偏差计算,刀具进给一步后,计算新的加工点与给定轮廓之间的偏差,为下一步偏差判别做准备。
}
else
{
ZF=4;
X=X;
Y=Y-1;
printf("X=%d,Y=%d\n来自百度文库,X,Y);
}
FM=FM+XE;
}
NXY=NXY-1;
}
}
2.5运行结果
3.数字积分直线插补
3.1数字积分法直线插补的基本原理
数字积分法是利用数字积分的方法,计算刀具沿各坐标轴的位移,使得刀具沿着所加工的轮廓曲线运动
利用数字积分原理构成的插补装置称为数字积分器,又称数字微分分析器(Digital Differential Analyzer),简称DDA。数字积分器插补的最大优点在于容易实现多坐标轴的联动插补、能够描述空间直线及平面各种函数曲线等。因此,数字积分法插补在轮廓数控系统中得到广泛的应用。
只要在JVX、JVY左移的同时,终点判别计数器把“1”信号从最高位输入进行右移来缩短计数长度
图4
⑵按进给速率数FRN编程
为实现不同长度程序段的恒速加工,在编程时考虑被加工直线长度,采用FRN来表示“F”功能,则:
式中V—要求的加工切削速度;L—被加工直线长度;
因为 所以
由上式可见,FRN编程,其实质是控制迭代频率fg,fg与V/L成正比,当插补尺寸L不同时,使迭代频率作相应改变,以保证所选定的进给速度。
start:
printf("请输入直线的起点:");
scanf("%d %d",&Xs,&Ys);
printf("请输入直线的终点:");
scanf("%d %d",&Xe,&Ye);
if(Xe-Xs<0&&Ye-Ys>0&&Xs<0&&Ys>0)
{
i=0,Jrx=0,Jry=0,Jvx=abs(Xe-Xs),Jvy=abs(Ye-Ys);
积分器作直线插补时,不论各段程序的被积函数大小,都必须经过m=2n次累加运算才能到达终点。这样各个坐标溢出脉冲的速度受被积函数的大小影响。被积函数愈大,溢出脉冲速度愈快,因而机床的进给速度也愈快;反之,被积函数愈小,速度愈低,机床的进给速度愈慢。即加工尺寸大,走刀快,加工尺寸小,走刀慢。所以各程序段的进给速度是不一致的,这将影响加工的表面质量,特别是行程短的程序段,生产效率低控制积分器的溢出速度的方法——左移规格化
3.1.1从几何角度来看积分运算
积分运算就是求出函数Y = f(t)曲线与横轴所围成的面积,从t=t0到tn时刻,函 数Y= f(t)的积分值可表述为
如果进一步将t∈[t0,tn]的时间区划分为若干个等间隔Δt的小区间,当Δt足够小时,函数Y的积分可用下式近似表示
在几何上就是用一系列的小矩形面积之和来近似表示函数f(t)以下的积分面积。进一步如果在式中,取Δt为基本单位“1”,则上式可演化成数字积分器算式:
第四步:终点判别,判断刀具是否到达被加工零件的终点,若到达终点,则结束插补,否则继续插补,如此不断循环以上四个节拍就可加工出所要求的曲线。
2.3直线插补程序流程图
图2直线插补程序流程图
2.4直线插补程序
#include<stdio.h>
main()
{
int X=0,Y=0,XE,YE,XOY,NXY,FM=0,ZF;
直线插补时不论被积函数有多大,对于N位寄存器。必须累加2N次才能到达终点。因此可以用一容量为2N的寄存器当计数器,来统计累加的次数。可以用加1计数器,也可以用减1计数器。
采用加1计数器时,首先将计数器清零,运算过程中每来一个累加脉冲△t就加1。当计数器满2N时表明运算完成。
采用减1计数器时,运算前把总运算次数2N送入计数器,每运算一次,就减去1。当计数器减为0时,表明运算完成。
逐点比较法和数字积分的直线插补
1.引言
数控技术逐渐成为了制造业实现自动化和集成化生产的基础技术。为了配合这一生产实践的需要,数控技术也走进了高校,走进了培训机构,成为竞相追逐的热点。其中,在进行插补法教学时,过程一般都是:讲解插补原理,插补流程,最后有条件的进行插补软件的实验。数控系统是数控机床的核心控制系统,其主要功能是使刀具或工件按规定的程序自动地进行工作由于刀具或工件的运动轨迹是由插补模块给出的,因此数控插补模块在数控系统中具有十分重要的地位。
2.逐点比较法直线插补
2.1逐点插补的原理
逐点比较法又称代数运算法或醉步法,其基本原理是每次仅向一个坐标轴输出一个进给脉冲,而每走一步都要通过偏差函数计算,判断偏差的瞬时坐标与规定加工轨迹之间的偏差,然后决定下一步的进给方向。如图1所示(以第一象限直线插补为例)设直线OA为第一象限的直线,起点为坐标原点:O(0,0),终点坐标为:A(xe,ye),P(xi,yj)为加工点。
[2]李恩林,《数控系统插补原理通论》,国防工业出版社,2008年
[3]谭浩强,《C程序设计教程》,清华大学出版社,2007年
[4]田梅,《C语言时尚编程百例》,机械工业出版社,2004年
[5]黄维通,孟威,《C程序设计教程》,机械工业出版社,2003年
for(;Xs!=Xe||Ys!=Ye;i++)
{
Jrx=Jrx+Jvx,Jry=Jry+Jvy;
if(Jrx>=8)
{
Jrx=Jrx-8,Xs=Xs-1,DX=1;
}
if(Jry>=8)
{
Jry=Jry-8,Ys=Ys+1,DY=1;
}
if(DX==1||DY==1)
{
printf("%d(%d,%d)\n",i,Xs,Ys);
3.1.3插补器的组成
二坐标DDA直线插补器包括X积分器和Y积分器,每个积分器都由被积函数寄存器Jvx(速度存寄器)和累加器Jrx(余数寄存器)组成。初始时,X被积函数寄存器存Xe(或Xe/2N),Y被积函数寄存器存Ye(或Ye/2N)。
3.1.4数字积分法稳速控制
⑴直线插补的左移规格化及其解决的问题
图1逐点比较法直线插补
根据OP,OA斜率判断P相对OA的位置,决定脉冲的发出方向,则可推导其递推公式(1)设在加工点P(xi,yj)处,Fi,j≥0当时(其中),则点P在直线OA上方,应向+X方向进给一步,以逼近OA直线,此时新加工点的坐标值为:xi+1=xi+1;yj=yj新加工点的偏差为Fi+1,j- xeyj-(xi+1)ye=xeyj- xiye- ye即Fi+1,j=Fij- ye(2)设在加工点P(xi,yj)处,Fi,j<0当时,则点P在直线OA下方,应向+Y方向进给一步,以逼近OA直线,此时新加工点的坐标值为:xi=xi;yj+1=yj+1新加工点的偏差为:fi,j+1=xeyj+1- xiye=xe(yj+1)- xiye即Fi,j+1=Fij+xe同理,以推广到其他各象限。
3.2数字积分法直线插补框图
图5数字积分法直线插补框图
3.3字积分法直线(第二象限)插补程序流程图
图6(第二象限)插补程序流程图
3.4数字积分法直线插补程序清单(第二象限)
#include<stdio.h>
#include<math.h>
void main()
{
int i,Xs,Ys,Xe,Ye ,Jvx,Jrx,Jvy,Jry,DX,DY;
也可进行简单的各种插补,且易于理解;两种方法都要熟练掌握程序的编写。总之,通过课程设计,进一步学习了各方面的知识及其运用,最终完成要求,实现软件的运行,运行程序后按提示输入直线的起点、终点坐标后即可自动进行插补计算并输出各个插补点的坐标值。
5.参考书目
[1]吴金娇,丁文政,孙明江,刘玲,《数控原理与系统》,人民邮电出版社,2009年
printf("输入XOY=\n");
scanf("%d",&XOY);
printf("输入XE=\n");
scanf("%d",&XE);
printf("输入YE=\n");
scanf("%d",&YE);
NXY=XE+YE;
while(NXY!=0)
{
if(FM>=0)
{
if(XOY==1||XOY==4)
{
ZF=1;
X=X+1;
Y=Y;
printf("X=%d,Y=%d\n",X,Y);
}
else
{ZF=2;
X=X-1;
Y=Y;
printf("X=%d,Y=%d\n",X,Y);
}
FM=FM-YE;
}
else
{
if(XOY==1|| XOY==2)
{
ZF=3;
X=X;
Y=Y+1;
printf("X=%d,Y=%d\n",X,Y);
1
0
1
0
0
0
寄存器:
0
0
0
1
0
1
非规格化数规格化数
规格化数累加一次必有一次溢出,而非规格化的数,必须作两次以上累加才有一次溢出。左移规格化法就是将非规格化数左移使之成为规格化数。为了使每个程序段积分的溢出速度大致均匀,在直线插补时必须把寄存器中的数Xe、Ye同时左移,直到JVX、JVY中有一个数是规格化数为止。同时左移,意味着把X、Y两方向的脉冲分配速度扩大同样的倍数,二者数值之比不变,所以直线斜率不变。因为规格化后每累加运算两次必有一次溢出,溢出速度比较均匀,所以加工的效率,加工质量都大为提高。
当Xe、Ye左移Q位后(至少使其中的一个成为规格化数),为使各坐标分配的脉冲数最后等于Xe及Ye值,这样作为终点判别的累加次数m必须减少。
寄存器中的数每左移一位,数值增大一倍;此时,比例常数k应该为k=1/2n-1 ,累加次数m=2n-1次。若左移q位,则m=2n-q次。进行左移规格化的同时,终点判别计数器中的数也要做相应的改变。具体方法:
由此可见,通过假设Δt=“1”,就可将积分运算转化为式所示的求纵坐标值的累加运算。若再假设累加器容量为一个单位面积值,则在累加过程中超过一个单位面积时立即产生一个溢出脉冲。这样,累加过程所产生的溢出脉冲总数就等于所求的总面积,即所求的积分值。下面就以直线和圆弧轨迹为例详细介绍
3.1.2插补终点判别的具体实现
DX=0,DY=0;
}
}
printf("\n本次插补结束,请输入下一条第二象限直线的坐标\n");
}
else
printf("!!!此直线不在第二象限,请输入第二象限点的坐标\n");
goto start;
getchar();
}
4.结论
本次设计运用软件插补程序进行插补控制,调整和修改都很方便,而且数字积分法插补运算速度快,脉冲分配均匀,易于实现多坐标联动及描绘平面各种函数曲线的特点;逐点比较法