数据采样法插补C语言程序
#include
#include
#include
/********************************************************************/ /* 函数名: InsertPoint */
/* 功能:控制机床各轴进给并将进给结果写入文件中 */
/* 参数:double x, double y 插补点单位:毫米 */
/* 说明:与机床硬件关联,每产生一个点调用一次 */
/********************************************************************/ void InsertPoint(double xCur,double yCur)
{
extern FILE *fp;
char ch=10;
printf("xCur=%f,yCur=%f\n",xCur,yCur);
fprintf(fp,"%f,%f",xCur,yCur);
fputc(ch,fp);
}
/********************************************************************/ /* 函数名: Judge_Quadrant */
/* 功能:判断参数坐标的所在象限并返回相应象限值 */
/* 参数:double x mm */
/* double y mm */
/********************************************************************/ unsigned short Judge_Quadrant(double x, double y)
{
unsigned short nDir;
if (x>=0)
{ //象限判断
if (y>=0)
{
nDir=1;
return 1;
}
else
{
nDir=4;
return 4;
}
}
else
{
if (y>=0)
{
nDir=2;
return 2;
}
else
{
nDir=3;
return 3;
}
}
}
/********************************************************************/ /* 函数名: DSM_Line */
/* 功能:数据采样法直线插补 */
/* 参数:double XEnd, double YEnd 插补终点 mm */
/* double FVal 插补速度 mm/min */
/* unsigned short Ts 插补周期 ms */
/********************************************************************/ void DSM_Line(double XEnd, double YEnd, double FVal, unsigned short Ts) {
double fDeltaL,fL;
double K;
int bXIsBigger;
double GEnd,NEnd;
double GStepVal;//NStepVal;
double AxisGVal,AxisNVal;
double fStVel;
double fDistToEnd;
fStVel=FVal/300000; //插补速度 ,单位为mm/st
AxisGVal=AxisNVal=0;
fDeltaL=FVal*Ts/(60*1000); //一个插补周期内的合成增量,单位为毫米 fL=sqrt(XEnd*XEnd