//第一象限顺弧
#include<reg51.h>
//#define xe 10 //终点横坐标
//#define ye 0 //终点纵坐标
//#define x0 10 //起点横坐标
//#define y0 0 //起点纵坐标
//#define R 10 //半径
void xzRotateStep() // X向走一步
void yzRotateStep() // -x向走一步
void xfRotateStep() // y向走一步
void yfRotateStep() // -y向走一步
void d1shun() //第一象限顺弧
void d4shun() //第二象限顺弧
void d3shun() //第三象限顺弧
void d2shun() //第四象限顺弧
int kx=0x01int ky=0x10//
/*延时函数*/
void display(int x)
{
int i,y
for(i=xi>0i--)
for(y=100y>0y--)
}
void main()
{
d1shun()
d4shun()
d3shun()
d2shun()
}
void d1shun()
{
int F,xi,yi,count // (xi,yi)为动点坐标,F为偏差值,count为计数值。
int k=0
int kx=
F=xi=0
yi=10
count=20
do{
if(F>=0)
{
yfRotateStep() //-y向走一步
F=F-2*yi+1
xi=xi
yi=yi-1
}
else
{
xzRotateStep() //+x向走一步
F=F+2*xi+1
xi=xi+1
yi=yi
}
count-- k++
P2=k
}
while(count) //计数为0?
}
void d4shun()
{
int F,xi,yi,count // (xi,yi)为动点坐标,F为偏差值,count为计数值。
int k=0
F=xi=10
yi=0
count=20
do{
if(F>=0)
{
xfRotateStep() //-x向走一步
F=F-2*xi+1
xi=xi-1
yi=yi
}
else
{
yfRotateStep() //-y向走一步
F=F+2*yi+1
xi=xi
yi=yi+1
}
count-- k++
P2=k
}
while(count) //计数为0?
}
void d3shun()
{
int F,xi,yi,count // (xi,yi)为动点坐标,F为偏差值,count为计数值。
int k=0
F=xi=0
yi=-10
count=20
do{
if(F>=0)
{
yzRotateStep() //+y向走一步
F=F-2*yi+1
xi=xi
yi=yi-1
}
else
{
xfRotateStep() //-x向走一步
F=F+2*xi+1
xi=xi+1
yi=yi
}
count-- k++
P2=k
}
while(count) //计数为0?
}
void d2shun()
{
int F,xi,yi,count // (xi,yi)为动点坐标,F为偏差值,count为计数值。
int k=0
F=xi=-10
yi=0
count=20
do{
if(F>=0)
{
xzRotateStep() //-x向走一步
F=F-2*xi+1
xi=xi-1
yi=yi
}
else
{
yfRotateStep() //-y向走一步
F=F+2*yi+1
xi=xi
yi=yi+1
}
count-- k++
P2=k
}
while(count) //计数为0?
}
void xzRotateStep()
{
int i
switch(kx)
{
case 0x01: kx=P1=0x02display(200)for(i=0i<20000i++)break
case 0x02: kx=P1=0x04display(200)for(i=0i<20000i++) break
case 0x04: kx=P1=0x01display(200)for(i=0i<20000i++) break
}
}
void xfRotateStep()
{
int i
switch(kx)
{
case 0x01: kx=P1=0x04display(200)for(i=0i<20000i++)break
case 0x04: kx=P1=0x02display(200)for(i=0i<20000i++) break
case 0x02: kx=P1=0x01display(200)for(i=0i<20000i++) break
}
}
void yzRotateStep()
{
int j
switch(ky)
{
case 0x10: ky=P1=0x20display(200)for(j=0j<20000j++)break
case 0x20: ky=P1=0x40display(200)for(j=0j<20000j++)break
case 0x40: ky=P1=0x10display(200)for(j=0j<20000j++)break
}
}
void yfRotateStep()
{
int j
switch(ky)
{
case 0x10: ky=P1=0x40display(200)for(j=0j<20000j++)break
case 0x40: ky=P1=0x20display(200)for(j=0j<20000j++)break
case 0x20: ky=P1=0x10display(200)for(j=0j<20000j++)break
}
}
数控装置根据输入的零件程序的信息,将程序段所描述的曲线的起点、终点之间的空间进行数据密化,从而形成要求的轮廓轨迹,这种“数据密化”机能就称为“插补”。
插补常用方法:
1、逐点比较法:由运动偏差产生信息,通过不断比较刀具与被加工零件轮廓之间的相对位置,决定刀具的进给。
2、数据采样法:这种方法先根据编程速度,将给定轮廓轨迹按插补周期分割为插补进给段,即用一系列首尾相连的微小线段来逼近给定曲线。
3、数字积分法:数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。
扩展资料
插补分类:
1、直线插补:在此方式中,两点间的插补沿着直线的点群来逼近,沿此直线控制刀具的运动。所谓直线插补就是只能用于实际轮廓是直线的插补方式。
2、圆弧插补:圆这是一种插补方式,在此方式中,根据两端点间的插补数字信息,计算出逼近实际圆弧的点群,控制刀具沿这些点运动,加工出圆弧曲线。
参考资料
百度百科-插补
百度百科-插补运算
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)