此程序是根据《微型计算机控制技术》(第二版)清华大学出版社 第三章数字控制技术——3.2插补原理中的3.2.1逐点比较法的直线插补,3.2.2逐点比较法圆弧插补编写的。其中的变量定义,原理依据均来源于此,如有疑问,请参考书中的讲解。尤其是例子,以下两个程序的第一个运行图均与例题中的一致。
一、四象限直线插补程序
分别加工第一、二、三、四象限直线,起点均为(0,0),终点坐标为(NX,NY),进行插补计算。
程序中(NX,NY)为终点坐标;NXY为总步数;XOY=1,2,3,4,分别为第一、二、三、四象限; ZF=1,2,3,4,分别代表+x,-x,+y,-y走步方向;FM为加工点偏差,初值为0。 源程序:
# include \# include \# include \void main()
{ int NX,NY,NXY,BS,XOY,ZF; int FM=0;
char a[10]=\ printf(\请输入NX,NY\\n\ scanf(\ {if(NX>0)
if(NY>0) XOY=1; else
XOY=4; else
if(NY>0) XOY=2; else
XOY=3;}
printf(\终点在第%d象限\\n\
printf(\ 步数 坐标进给 偏差计算 终点判断\\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\,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,NXY);}}}
FM=%d NXY=%d\\n\\n\,e, 图一:插补计算过程
第一象限直线OA,起点为(0,0),终点坐标为A(6,4)
图二:插补计算过程
第二象限直线OA,起点为(0,0),终点坐标为A(-3,2)
图三:插补计算过程
第三象限直线OA,起点为(0,0),终点坐标为A(-2,-3)
图四:插补计算过程
第四象限直线OA,起点为(0,0),终点坐标为A(3,-2)
相关推荐: