APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。
需自行编写刀轨数据的读取与处理。
以下仅为部分代码
以下为头文件部分源代码
int EQ_is_equal (double s, double t);int EQ_is_ge (double s, double t);int EQ_is_gt (double s, double t);int EQ_is_le (double s, double t);int EQ_is_lt (double s, double t);int EQ_is_zero (double s);
//=============================================================double ARCTAN1 (double y, double x );
//#=============================================================double ARCTAN2 (double y, double x );
//#=============================================================double CheckConst ( double angle, double constvar );
//#=============================================================double Check360 ( double angle );
//#=============================================================double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
//#=============================================================
以下为部分源代码,用于判断,计算角度等
int EQ_is_equal (double s, double t){ if (fabs(s-t)<= system_tolerance) { return(1); } else { return(0) ; }}/***********************************************************************/int EQ_is_ge (double s, double t){ if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int EQ_is_gt (double s, double t){ if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int EQ_is_le (double s, double t){ if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int EQ_is_lt (double s, double t){ if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int EQ_is_zero (double s){ if (fabs(s)<= system_tolerance) { return(1); } else { return(0) ; }}//=============================================================double ARCTAN1 (double y, double x )//#============================================================={ double ang; if (EQ_is_zero(y)) { y=0; } if (EQ_is_zero(x)) { x=0; } if (y == 0 && x == 0) { return(0); } ang=atan2(y,x); if (ang < 0 ) { return(ang + PI*2); } return(ang);}//#=============================================================double ARCTAN2 (double y, double x )//#============================================================={ double ang; if (EQ_is_zero(y)) { if (x < 0.0) { return (PI); } return (0.0); } if (EQ_is_zero(x)) { if (y < 0.0) { return(PI*1.5); } return(PI*.5); } ang=atan(y/x); if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); } if (x < 0.0 && y < 0.0) { return(ang+PI); } if (x < 0.0 && y > 0.0) { return(ang+PI); } return(ang);}//#=============================================================double CheckConst ( double angle, double constvar )//#============================================================={ while (angle < -constvar) { angle+=constvar ; } while (angle >= constvar) { angle-=constvar ; } return (angle) ;}//#=============================================================double Check360 ( double angle )//#============================================================={ while (angle < -360.) { angle+=360. ; } while (angle >= 360.) { angle-=360. ; } return (angle) ;}//#=============================================================double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )//#============================================================={ while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; } while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; } return (angle) ;}
以下为摇篮5轴计算过程代码
i=sin(ang_rad[1]); j=0.0; k=cos(ang_rad[1]); j=0.; B1=0.; B0=0.; if (EQ_is_ge(i,0.)) { if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; } } if (EQ_is_lt(i,0.)) { if (EQ_is_lt(k,0.)) { B0=atan(i/k); B1=B0+PI ; } else { if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); } B1=2.*PI+B0 ; } } if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ; B2=(-1.)*B0*(2*PI-fabs(B1)); ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.; ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
测试结果:
反向测试结果