找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4247|回复: 1

[原创] APT刀轨数据生成NC程序C++源代码

[复制链接]

431

主题

5754

回帖

901万

积分

管理员

积分
9013993
发表于 2025-5-21 20:59:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ' W6 J, P3 c, H9 Y
  2. int  EQ_is_ge (double s, double t);0 Y0 J4 Z5 ]9 e( g4 s
  3. int  EQ_is_gt (double s, double t);
    8 g0 t+ @! ?, C- q/ r
  4. int  EQ_is_le (double s, double t);
    & F  a) `& A* v; b
  5. int  EQ_is_lt (double s, double t);) {# A' k6 b9 O) _4 t; g
  6. int  EQ_is_zero (double s);
    8 P3 N# x) W) V) e, y
  7. //=============================================================5 t" h7 G. c4 ~# I0 P) Q
  8. double ARCTAN1 (double y, double x );
    8 k5 `1 l9 v& D
  9. //#=============================================================6 }1 E5 i8 M' X3 ^% e% ~
  10. double ARCTAN2 (double y, double x );
    : D6 K  w& d5 @
  11. //#=============================================================
    4 b  U- E1 P  s" z' O( ]/ c
  12. double CheckConst ( double angle, double constvar  );5 X/ p: \. }; S( V) [' I; U3 U
  13. //#=============================================================, `5 z* P1 h- ?9 s8 q
  14. double Check360 ( double angle );$ ~' L& S% S' k8 e
  15. //#=============================================================! P5 ~8 C4 P( C  t
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );5 r# [2 }) Q2 a' n3 O+ z( ^4 R
  17. //#=============================================================
复制代码

9 o9 I; G5 D6 d5 X! Z以下为部分源代码,用于判断,计算角度等
5 x0 R1 @8 k7 I% {
  1. int  EQ_is_equal (double s, double t)! y% j, @- x$ B+ v- ?. F, q

  2. % P" m8 d( L/ Z' X5 ~2 Z; E4 ^( m
  3. {2 I& k0 @& i; |) ?1 N

  4. 5 B  D" `2 L: s6 z; t) [; q
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
      m) X4 L% h& N" y% o) [+ \2 T

  6. / N7 u! ^4 K& E& _# ~/ m
  7. }
    , A: \5 w" U* B9 o( {7 f* H
  8. / u9 J1 ^$ C& ]% O, C7 s
  9. /***********************************************************************/: M: e& i+ t. ]; n

  10. " E3 R3 d3 m  T+ K' R' ^
  11. int  EQ_is_ge (double s, double t)9 g& Y- C! s+ t( w! q0 Z7 z4 l

  12. " m5 y. x: s( {$ ]4 M( N; k. H0 ^
  13. {4 p( Q# F+ @6 U5 i: x9 H
  14.   `( O4 }( d% A  z  w! `/ R( A
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }* I8 V! S( E, @3 f3 W4 K: a

  16. + e9 \5 M! \2 [- u  Z
  17. }' f- u/ c  L1 H: Z% j

  18. 9 c( S4 H' e3 x( w' h
  19. /***********************************************************************/
    $ k8 z1 t9 ]2 r5 O8 Z( H
  20. ' t! o0 N3 x7 Q0 S- v% ^
  21. int  EQ_is_gt (double s, double t)
    5 Q: z8 @" D1 H0 [+ [+ O# Y
  22. 1 a: }9 A- c1 G
  23. {
    9 E  s% c1 O! L) [$ a) a6 n
  24. . {7 A5 M. t6 h
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    . h' \" {1 r, ^; L3 t. @- E

  26. 4 D  S# ]( Y8 i% U% @* R; _
  27. }
    / ~  S& B+ r' H% y

  28. 4 @' o7 @7 l. ]+ T
  29. /***********************************************************************/5 P, c3 a6 C6 V% Z  ^- I) o: F

  30. $ W- i- p( ~1 L4 H  b
  31. int  EQ_is_le (double s, double t)  g' A2 r. W- J) e/ x

  32. , S" F- G8 \6 t" A" E0 l: P
  33. {
    % H5 o/ L5 A! V! R6 \) ~

  34. ; i- }. {/ q8 P4 o" E+ |, I
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    , A( J, w/ v2 {5 \: m0 \+ l
  36. 9 o* A1 ], f4 y5 ?7 l1 C4 E) J4 w
  37. }5 ^: W* e# Q; K( n* R8 q& W
  38. 9 I2 b- O& U6 I: J( y- r
  39. /***********************************************************************/
    - Z% U) h9 N+ }  x1 v" t8 {, @6 \

  40. / @( W8 a( A0 z) [- [: [
  41. int  EQ_is_lt (double s, double t)
    : g. z/ R" Y2 Q8 g6 v

  42. ; l2 ]4 ^" F5 l2 p) T7 }4 r
  43. {
    1 f$ n7 D9 _6 r6 t3 U2 l
  44. , c: q" c- c/ F+ f$ R3 l% l$ s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    $ M7 I. _. s' i; h7 h, B- d

  46. $ M+ w/ x1 \! I! V
  47. }
    3 x+ F3 h1 N% k! a  L2 [
  48. ) `' P) w# k" e8 ~5 A# Z3 w: T; P, v
  49. /***********************************************************************/
    0 F& p) [* x1 A: e) Z4 R

  50. $ c3 ]1 Z3 e1 e3 q  i! f5 P, I
  51. int  EQ_is_zero (double s)) x- K0 c7 H8 ~$ F+ ^# W8 l: s1 D

  52. % {+ \( p2 J! A; m1 i; i
  53. {
    5 L* f6 G( `& ~( C% o

  54. 4 f6 ~9 c& d8 x9 v% C
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }% o/ Z& ~- m" {
  56. 8 D3 b3 Y8 @( N
  57. }
    6 M; ^4 F/ e1 T! Z
  58. 8 S) @. ?6 m# n3 z; u# D9 Z3 P1 O
  59. //=============================================================
    : b! c9 W( r' C1 N7 E% `: U

  60. + F3 H7 m( p  t0 A+ n
  61. double ARCTAN1 (double y, double x )
    * s5 h" I# N7 g8 _9 |: c
  62. 8 ~9 M! N' `, m/ }, z
  63. //#=============================================================! E9 h% F; H( z; B+ O8 K& ^' N* E
  64. 4 `; B! Y' K. D0 V
  65. {
    * ]* a+ m+ j/ [- a1 J

  66. * l1 j( V$ R# F$ N8 v3 h" C9 b) q
  67.    double ang;
    . c; M2 r. H  R0 _

  68. $ z  ~/ }- z/ [! y1 U8 C8 v8 i
  69.    if (EQ_is_zero(y)) { y=0; }
    7 Q; _- r' q  F$ k  P# Z- \9 I

  70. % m% e$ J, T* d3 Z/ ?
  71.    if (EQ_is_zero(x)) { x=0; }+ v& p( e, R# y6 ^8 r  S

  72. / Y) t; ~* S" y
  73.    if (y == 0 && x == 0) { return(0); }
    5 ]  {9 d* Z' q' v" B
  74. % r9 Z* W& N% k( M2 U  i% n
  75.    ang=atan2(y,x);
    : o( a9 Q* W' u, j
  76. 8 }, a$ y4 g/ a  I2 y
  77.    if (ang < 0 ) {
    ; F5 H1 m' d' |: K9 A* f! v

  78. 4 |! A4 |  A# r; {9 r& _
  79.       return(ang + PI*2);
    : o- Y! p* \: F& F

  80. & o( Z1 H7 a& }" i6 ^7 b
  81.    }
    ( P6 Y3 @$ i2 e
  82. & W5 H( _/ [$ q: s
  83.    return(ang);0 [/ s8 o0 w2 |4 q1 g3 j
  84. ) I$ k0 Y4 w7 f0 L3 U- T
  85. }9 u% L2 U& q) [  k) f: p
  86. $ K1 A/ z$ a* ?! b+ k- x
  87. //#=============================================================
    ! K2 F- V; m2 a' L0 o$ O1 T9 G- S4 g
  88. , l& u& b: ]. b; }3 }' ~
  89. double ARCTAN2 (double y, double x )
    / X7 a) f4 ~8 X6 L% l# g

  90.   U4 z- i6 v! p1 }( z
  91. //#=============================================================
    % z4 v( S  B, b  O. p% m8 h

  92. + b6 ~+ ^( b! ~1 S4 H: ^2 O! d
  93. {. I! X4 D3 h  O0 ?! ?

  94. + k7 _$ a' w: q' I- g: v
  95.    double ang;
    / A+ @  T" E' p) q" ]
  96. ( H! R# k0 ~/ l1 e  d. S! `
  97.    if (EQ_is_zero(y)) {8 D: f* j8 R/ L3 I# W$ c, H

  98. ! `& S, G. c( Q1 M8 ]0 a
  99.       if (x < 0.0) { return (PI); }* e& R  N9 S; u+ j  k
  100. ! z7 a0 l, t* J1 W! c1 P1 i6 V4 F
  101.       return (0.0);
    # `) Y$ K) j& {  H) ~
  102. % p% B2 v# L' f6 s
  103.    }) ~- c, A1 G! a* C! u

  104. 1 U* s" U' i* y4 k- O$ ~" E, X
  105.    if (EQ_is_zero(x)) {
    1 C. X$ W/ e' [  s4 B- e
  106. " Y& i3 ^6 n: T! g; h/ j' a. C5 T
  107.       if (y < 0.0) { return(PI*1.5); }
    , _' `8 m# s" R! ^4 `! b
  108. 3 ?% V$ |7 }0 B: j* m5 N/ l% a
  109.       return(PI*.5);7 z& V  A' K" L. u' R$ z% T# G7 |

  110. " f+ _$ e9 w6 i8 Y% W
  111.    }
      P  I% ~; w! `' G$ c

  112. ! W! f$ w) O" |! ^) |1 d7 @- m9 W4 `
  113.    ang=atan(y/x);6 r% v6 O3 z" Y( Z0 m2 i6 G

  114. 9 H) C- M: B. y7 F, w
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    6 S+ T- `/ d6 s( r0 p
  116. 5 A6 b; i) ?4 D( F; ^1 @* a- ?
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }' a8 W% o7 D8 N& u7 l3 _! D2 V9 B
  118. 5 C, H( a: ?2 p2 U- \! Y6 \* Z
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ( @6 N6 N' r/ u6 ]7 U) E( x2 j- v
  120. & X- Q  L1 H# {1 S* d" h/ i2 ]
  121.    return(ang);
    3 n0 n# l9 [# y  a. d$ W; O/ M

  122. 1 e6 M$ w" |4 \0 V1 d% X  E
  123. }' N2 p" X( ]" K1 ?' M3 ^* ~

  124. % I2 Q9 J. s" b
  125. //#=============================================================
    / x+ X( `$ _8 k5 J# m7 J0 k2 r7 K2 d! Q
  126. 0 k( I* D) C2 y
  127. double CheckConst ( double angle, double constvar  )
    , O1 M2 N7 \- |* A& ?2 b
  128. - n: |$ p0 |  }" ?% g3 d; A
  129. //#=============================================================
    * z: W: z* f9 _
  130. 0 S& d3 a3 s# v& i5 g  K2 X' V
  131. {! }+ f$ n: F& Q; p

  132. * Z; ]! U' u, ~
  133.    while (angle < -constvar) { angle+=constvar ; }: c' x$ L. x: T' `2 C7 `

  134. + a( k  U7 @  m
  135.    while (angle >= constvar) { angle-=constvar ; }  [8 w1 x4 B. z# l5 c' {$ A% c$ Y
  136. / O& _, p: r9 U
  137.    return (angle) ;
    " p* n. N$ f: P2 r$ Q

  138. 2 z8 w- d& ?3 t
  139. }
    7 t5 c3 E; I9 w. F

  140. ) F0 B% u9 J& X5 o3 i1 v
  141. //#=============================================================% O% \4 C; \) Y( y% b0 }

  142. " C# N0 o, c) R/ a6 h( Q& F
  143. double Check360 ( double angle )
    ! X' |! x. P( s. J+ l/ V
  144. ) {- }- J# q+ T) d
  145. //#=============================================================
    / n6 g+ K* ^) o9 L

  146. , ~# L& B$ m6 ^/ I- w! P
  147. {1 @; a4 c/ Q! J; o2 j1 w; F
  148. 3 I7 b' i! O. J2 I. K( Z+ b
  149.    while (angle < -360.) { angle+=360. ; }
    / R4 g1 u% l; i
  150. / k+ H  w6 T2 w8 t' u/ `: w
  151.    while (angle >= 360.) { angle-=360. ; }
    . G0 F* Q) W+ F* i
  152. * H3 k8 p8 K! |8 V' m4 ^' m
  153.    return (angle) ;# z8 R7 Q, B7 @, i

  154. $ U; R' t  q9 v) ?1 Z' U# Q
  155. }
    # [5 V3 G' L7 h5 m/ k
  156. ) l- Z" Z8 p7 g
  157. //#=============================================================% `1 H/ Q. c7 e; O5 j: `. o5 ]  J2 P

  158. 5 W' g3 V; a( }
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- Y4 J, e1 N( ]0 A( Z7 r  A& `, p

  160. & O* l$ Q; x6 j  }# ]( H
  161. //#=============================================================3 E+ `! Q) x; v1 f3 ]
  162. % l2 D' u5 Q/ r! P' `1 `& B! P
  163. {7 G1 G: A4 N9 \$ J$ @3 S
  164. 9 B& J0 U4 S( f; g
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    0 }0 J8 G, J: o2 E9 ~$ ~0 Y
  166. 1 B0 E5 U" P% p# i: P. ]$ j
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    4 Y( V. R) D8 \  I, {5 O. a& `
  168. + l: E) D2 i) R: y# f$ `  D& V
  169.    return (angle) ;
    6 Y+ w: G9 p$ e( I% m

  170. & |7 {0 j; g# G6 l, o6 t/ L9 {2 A
  171. }
复制代码

6 j$ H- D" P& z7 P以下为摇篮5轴计算过程代码
, }5 ?' q: I. i
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);3 u5 }4 r+ M9 D% n2 Y0 p" P

  2. - b& Q, Z; K& v% O% v$ V  N' O) Y
  3.          j=0.; B1=0.; B0=0.;
    ( N6 h8 G& D# F  p. Q

  4. 6 o8 [; R5 r% k& k! h
  5.           if (EQ_is_ge(i,0.)) {
    $ G+ q) ?4 q5 e9 c
  6. 6 O5 v8 _, Q- s: c( h+ }
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }! b% F/ a7 Y$ b! z3 U6 S' `8 a
  8. ; Y' @/ T- z$ Z( ]* G+ l+ n
  9.           }8 f% ~1 {. R0 S7 E4 J* |
  10. : {5 v* q8 t5 V0 f& a0 v1 E3 _
  11.           if (EQ_is_lt(i,0.)) {  ]* r! H) e: ]! n

  12. 3 J" R+ L# Q: Q
  13.              if (EQ_is_lt(k,0.)) {) ]+ W$ |& u9 T; W

  14. 9 A2 ^8 a' `- f4 Q  N- s
  15.                 B0=atan(i/k); B1=B0+PI ;5 x3 \8 }1 v  Q. W" l$ p

  16. / O8 P7 j( p8 {2 Y8 q% r
  17.              } else {- x7 ]5 ~# n; z& D1 a- @8 c

  18. * p/ L/ B9 |3 G9 I6 f5 T4 b
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }& E  S3 O% x6 j5 ]% n+ e! @2 N
  20. + T* l- f' z% P, H' J. S
  21.               B1=2.*PI+B0 ;2 I! C4 R8 `7 D" j
  22. 3 C3 i1 d3 V6 N2 ?
  23.              }
    + |( j7 \: A: w5 l& d6 h2 [" C1 V& g
  24. 1 `# \- B0 O. x
  25.           }
    . k% q% _" s6 H/ F* M4 j/ k

  26. 2 M7 @! F$ Q# b7 E% q6 Q1 R/ _) C7 F
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;+ Q/ p8 _( i% z# y; H  |" B

  28. 2 a# G" p8 P; k, i  h7 p7 C
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    . C9 {2 e2 i" A3 U. |% ?! _
  30. - W) J( _  v: S5 O, T1 ~
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;) z- A5 @  z2 U& I0 p
  32. / U4 N) |8 V9 Z
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

3 `$ ^1 u3 ~8 ?$ l通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
; E2 A: Z/ l6 J! x' A7 \+ n
* l( }* k; c' R8 G7 i+ t9 I# ? 640.png
/ i: K9 f  U# K% E' E测试结果:" Y  [) J, k4 G. N) ^
6420.png 6 }$ e# _# f( l* p6 D
6 f( v- W- a8 k2 W
反向测试结果 6410.png
3 b. X8 V, }( |. |

0

主题

25

回帖

17

积分

新手上路

积分
17
发表于 2025-6-3 18:53:03 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|Archiver|手机版|小黑屋|若枫后处理论坛 ( 苏ICP备11015087号-1|苏公网安备32059002001368号 )

GMT+8, 2025-7-31 12:48 , Processed in 0.272759 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表