找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5850|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);* @0 v$ v' k, d( h6 T; P* h
  2. int  EQ_is_ge (double s, double t);
    5 \3 b- O- {2 D% r( `( ]5 e
  3. int  EQ_is_gt (double s, double t);
    # G2 X$ h* h! _
  4. int  EQ_is_le (double s, double t);
    ! I) C  J2 g* Q3 G( G
  5. int  EQ_is_lt (double s, double t);
    & |% m* o8 g) W/ [* ]# l$ ?
  6. int  EQ_is_zero (double s);) r* P) _3 A, V* G
  7. //=============================================================8 C* {6 E$ C" w+ t2 h
  8. double ARCTAN1 (double y, double x );3 {  _/ I% P* `/ J3 a
  9. //#=============================================================  K. K0 e$ n( q
  10. double ARCTAN2 (double y, double x );
    & d. W; o  ?3 q, ^" l& Q
  11. //#=============================================================- q7 b) G+ w/ A5 L! G/ y1 n7 [  j
  12. double CheckConst ( double angle, double constvar  );
    8 r$ \$ W4 Z) V5 s9 Q5 V
  13. //#=============================================================
    0 |3 {) N2 d/ ~/ t0 q' X1 h" S
  14. double Check360 ( double angle );
    ) P( I8 F: e6 F6 b4 g: `, n0 T1 a
  15. //#=============================================================
    5 F1 F- t  w  ^2 p5 y# i( E
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    # p2 D0 Q7 C) L  R
  17. //#=============================================================
复制代码
) D* V; k2 Y0 T# J( c- \! g
以下为部分源代码,用于判断,计算角度等
# m( }+ e% E  ?0 R# E+ X* A2 P# K9 B
  1. int  EQ_is_equal (double s, double t)3 ^- L7 b- B/ r3 T" ^# D+ c

  2. 7 M2 }2 ^* w" ^# g6 r" _' s. C
  3. {
    - l& h: L8 Y" y4 ?4 r
  4. ) S+ j/ k; Z# h8 l
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    & i! j$ e7 R6 f* Y5 i
  6. + I! r0 `. _2 {+ Y( V% t
  7. }& J8 t; V8 |1 S+ Y7 T. c- v' z' v

  8. % h: T0 Q7 T' L* p8 ^4 x3 |
  9. /***********************************************************************/* s' i3 i; }! `& {5 e$ }5 P
  10. 5 w! _7 v; ]. \3 E5 u9 a
  11. int  EQ_is_ge (double s, double t)
    + P% U9 \) n( @1 h  l* r+ H7 e% `

  12. 0 H6 A* x3 _# |; I: O9 l
  13. {/ G; B: O( p8 U3 H6 W8 N
  14. * y5 @: e! O  W* D1 B
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }# S3 @: l% R' y
  16. 4 r2 E, \  b! V- ?
  17. }2 O2 Y/ I, C# ~# _0 i
  18. 7 ~/ F$ B8 `4 y
  19. /***********************************************************************/
    8 S9 Q- p3 Q; A

  20. % g  w% z' X6 r3 V0 `& G- _
  21. int  EQ_is_gt (double s, double t)
    5 D4 z. H2 S9 W- Q- Q
  22. ! G/ [6 [: \! I2 k; P2 s( G5 R. t
  23. {# Z, C1 v9 Q' p+ X' s& w( q
  24. " x& P  a! H1 _$ T7 W3 Q" p
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }, h; z* s9 w# d4 ?: n' f- e$ ~
  26. / E5 G2 |& ?8 l; D" K5 ?: h+ Q5 W
  27. }  E4 R. ^+ Y: V4 |& s: e  g5 P
  28. , t# I8 Q; o( f+ y: N
  29. /***********************************************************************/
    ; X% f, R6 F6 a- F% }( l

  30. ! b! Y. c$ L5 n6 I0 W5 j1 a
  31. int  EQ_is_le (double s, double t)
    * c% `) y/ o4 a4 b1 p6 f! N

  32. ( y# R! L# g. Q# x; ^
  33. {2 C6 G" R' Y0 N, n

  34. ! @0 z: \; f" u9 R3 ~
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }( k4 X# w* M& [9 W/ I
  36. ; ]  ^+ R" t" E1 R% s
  37. }2 ^# {3 [# g( \: }! [' s  L' x6 H

  38.   U2 ^) l+ e5 c5 G6 C: d
  39. /***********************************************************************/; q1 z4 U2 @8 @5 s

  40. % W) x# V! O! G" Z7 e9 r+ G5 E
  41. int  EQ_is_lt (double s, double t)( n. f# ?) Q$ M0 |4 ~; k

  42. 4 q; Z9 H, P6 w2 H7 x' ^; a. o
  43. {" |& d6 X% w' w3 w; x0 C

  44. % e( i/ c& U- E5 f
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }  S; o. Z. q/ `0 ?& N  E
  46. / ?) M5 }! q0 e- M8 n0 `
  47. }
    & i! T: S' n0 J: o

  48. + b1 K3 ~" s7 M" f. v* f6 N
  49. /***********************************************************************/( \" j  u+ Q/ @6 i- x/ v
  50. & w7 G; f' B& a7 F: m5 V4 J. A
  51. int  EQ_is_zero (double s)
    " ]& W, U* P9 E
  52. 3 p! Q, n% J, \3 F
  53. {1 _2 i1 S/ q0 F2 v) w& s

  54. ! L3 m7 P/ j& ]3 q9 p6 y" {
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ! N4 P- t/ T) U- @

  56.   u; L  U4 K; T2 I6 w; v# W
  57. }
    # J4 h; W: ~) d# i  b- q: p
  58. % r$ L" x5 `1 C* @
  59. //=============================================================# {' D/ {  A7 |( O7 m6 K) L

  60. 2 ?$ ^) R& d/ }8 ~. ^, K+ b
  61. double ARCTAN1 (double y, double x )
    # C& f9 k2 J, i1 R  L  {% M) g

  62. & Y5 ^5 t' X7 X: u
  63. //#=============================================================) O4 q3 {6 o1 c1 X

  64. 6 T5 T7 u7 }0 u( Z
  65. {1 H# z' E& ?9 V5 i8 E% ~
  66. 5 q4 L5 ?, v- Y& N
  67.    double ang;
    , W1 J4 w- b  t% d* v2 ?* Z2 {  V. L

  68. 9 c% M5 @  [& d/ n& X( Z. H$ P" s
  69.    if (EQ_is_zero(y)) { y=0; }
    % o4 f. d2 h$ u
  70. , \4 p5 u1 W. M5 a0 k
  71.    if (EQ_is_zero(x)) { x=0; }9 D+ h4 B3 M. ~" P* j) e5 P$ z
  72. , t4 A4 ]4 `7 j" g; O& b% f- A! d
  73.    if (y == 0 && x == 0) { return(0); }  G8 K$ S6 R+ Y+ ?
  74. 1 u) B8 d  R5 U% x+ }
  75.    ang=atan2(y,x);/ F- S8 Q8 M) @; Q
  76. & @/ J. H; ~1 I$ ~, D
  77.    if (ang < 0 ) {
    / A9 l- r6 U& {7 i& M
  78. 0 O% K$ Y2 s( N% d' P3 D
  79.       return(ang + PI*2);
    : r8 \! z/ Y$ _) B6 U

  80. 2 q& C6 z, q+ O4 b
  81.    }" S8 ^  \/ S! E$ C
  82. + l9 A8 y3 @$ `% `, ~$ f
  83.    return(ang);# L( {  X: L& d- k9 M# k: O6 v

  84. ' m- z$ a$ Y: a' O# V4 U' x! O* M
  85. }: h# {. M6 j; G6 i4 n

  86. 4 M8 p' E% B0 ~( W' A
  87. //#=============================================================
    & f& D: b0 n, H( \
  88. 7 q2 S5 e0 D1 c
  89. double ARCTAN2 (double y, double x )
    3 _3 x1 d; ^4 {
  90. 2 s; o1 ~$ T" }0 ]0 p8 G7 C8 D5 x
  91. //#=============================================================+ m# P4 O3 |% `8 _: J
  92. ( {1 ~$ t9 F( \! {) p# M
  93. {
    # Y( `" i& T$ S& f. [; x1 @/ u3 U0 N* u

  94. 1 P8 K/ \% D4 L: R* }3 m
  95.    double ang;
    / Z9 S! E) ]) o- ?8 b: ]
  96. ) z$ c9 x! c2 p
  97.    if (EQ_is_zero(y)) {
      p8 L( }6 _. S* q8 _# N% a- G/ `# w3 U

  98. : G$ Q5 b, ^% T. |- D
  99.       if (x < 0.0) { return (PI); }4 J8 Z, n0 R7 F2 A* V

  100. 5 s2 ?5 O! k4 G" |
  101.       return (0.0);
    6 l, x) R  N$ R; f' K" `

  102. 4 T. X- [* X! ~. g& o
  103.    }
    2 T8 x5 M( _% {- q- P% k

  104. : N" V3 A: s: c3 J" R
  105.    if (EQ_is_zero(x)) {% U  j- {/ l7 _# ^2 [# {
  106. # {$ ^5 E8 l$ x; t! e1 l$ t% x
  107.       if (y < 0.0) { return(PI*1.5); }
    8 `6 B( X: v4 e' O  A
  108. 2 A9 w% p5 a6 r3 E8 E7 E/ @
  109.       return(PI*.5);3 h2 ^4 o* j" e9 x4 ?4 M: F

  110. 0 c, k8 o) o& j# g
  111.    }# `* h/ k, }# v  Y
  112. % @2 M: @6 j7 o2 u! j# Z
  113.    ang=atan(y/x);
    * T& r. t2 L. w* c  D( g0 B
  114. / ]0 J% ]+ T4 n# |8 t
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }$ Y2 j# Y: g: t

  116. ( _+ N; |( h' D
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    , P- C. V, e' D1 E1 N
  118. 1 O5 d" e5 ^) x% O  u, S) E5 `$ E
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    $ k$ n/ _2 J7 A# n
  120. ( |; E7 E1 y4 W# t8 k4 U
  121.    return(ang);; A8 v& z) J  o( m6 z6 |
  122. 4 l& e, `' G- w& A! M9 I
  123. }
    # y( Z4 g. ^: {- A1 @

  124. : {: }. v  M; I( ]- ~
  125. //#=============================================================$ V2 ]6 A  b  p8 t# w+ T; t$ _' N
  126. + ]* z9 O/ f. b  V" e
  127. double CheckConst ( double angle, double constvar  )
    % ?+ `: E$ S7 x' D7 m

  128. 4 [8 `) T6 C* a( g1 ?% \$ M) c/ s, T
  129. //#=============================================================
    . _% [8 s5 q; c6 J3 }9 T) |
  130. 6 K2 {" t7 ^8 a5 B
  131. {' t* D1 H+ e8 L% q
  132. ! P3 P: g0 }7 v$ W
  133.    while (angle < -constvar) { angle+=constvar ; }& V2 a8 y% T7 c# U6 f

  134. 0 s1 L8 q" K  ^* l4 L1 K
  135.    while (angle >= constvar) { angle-=constvar ; }; _1 P+ t; x! P
  136.   Z, a4 U& Z/ w3 E7 c0 v
  137.    return (angle) ;
    8 j; i8 M) b  M0 I3 w: m
  138. ! e  t$ @* ~$ {- u: [
  139. }( d4 M- S# y$ M$ ?4 h# w
  140. 7 P2 x: ^! o2 @6 X  d& [
  141. //#=============================================================
    * ^+ m7 E; }8 T) D

  142. 7 e8 o' G( j5 `8 T. L
  143. double Check360 ( double angle )
    ; L8 g  ]$ A8 ?! }
  144. + w: N4 b+ P" t5 V0 R$ w' _
  145. //#=============================================================
    ) A, T7 n8 d) E
  146. ( V5 R; u! ^2 M; ]( X
  147. {
    4 e, h8 a* N  m) P2 U

  148. 5 x. \2 I; M9 T) Y& |& K
  149.    while (angle < -360.) { angle+=360. ; }% [" U& q' t) S0 {& _! a& @2 u
  150. 4 x+ P. p8 H) a# c) S+ b
  151.    while (angle >= 360.) { angle-=360. ; }% u7 m- u5 J2 v  m- ~

  152. ! H0 I. |  l6 {- z5 Q# g" U$ _3 F
  153.    return (angle) ;8 L' s1 x) G+ Z( R* \, |

  154. ) t* g* z7 r1 f( a1 ~
  155. }6 K; E" {+ ]/ X+ `3 ]0 H

  156. 6 w* p, A8 q* M
  157. //#=============================================================
    ; @+ ]& j- L: g: T
  158. 3 n8 o1 [( x* K! E& o
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    0 E! _% ^8 K, d( t. f
  160. 8 E: `9 m  B( v+ Z; E/ O
  161. //#=============================================================
    4 |: N4 f  E8 g  V

  162. - D$ s5 X1 M. m- B3 x+ ?
  163. {" y& w) A! F  b0 v

  164. 9 k" n( L. N* c- [+ }0 h$ a9 @5 q
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    . G4 d0 c0 o5 n" H6 I- }: \( o; U
  166. " H" B' s, ]1 r) O. I6 W( `
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
      \& h. ~+ ~7 N; Z
  168. 3 \! Z/ D7 u) f  ]
  169.    return (angle) ;
    8 u; P4 b- R" d3 z

  170. 5 K  e! M7 t! E; Z1 u. z
  171. }
复制代码
* G& [% J  U7 W4 j0 @
以下为摇篮5轴计算过程代码
& G. s7 ]5 ^5 ?- v) ~# e0 j; [6 Y, L
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    5 V9 ]0 R0 h* {" W; g' O
  2. . D. P' W* b+ l$ v7 S
  3.          j=0.; B1=0.; B0=0.;
    9 n5 ^8 {6 ?1 }' {# e

  4. , ?/ Y5 X  a# _
  5.           if (EQ_is_ge(i,0.)) {; G9 Q6 B8 u; d' I& c, {' i

  6. 4 Y1 D9 C/ z3 b1 N; h4 J  I! n
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    : X, P; g1 K' G# k4 P
  8. / c( |% w. U3 g8 y& S  t$ o
  9.           }
    # R0 E5 }( @% s

  10. / Q6 v" H# J. U/ O0 j4 y3 Y
  11.           if (EQ_is_lt(i,0.)) {. \# N0 K, g0 ]+ ^/ S: U' m6 Q
  12. 1 U5 _. M, d: R& c5 ~' G
  13.              if (EQ_is_lt(k,0.)) {
    ! a" D/ i) N, O( v  r9 A6 T6 p
  14. " b; f9 A, b1 \+ z; \) }5 Z/ J
  15.                 B0=atan(i/k); B1=B0+PI ;
    6 l/ C1 w" J6 N% O5 I, V7 o! W3 t
  16. & e4 Y8 D: S6 X% b
  17.              } else {
    4 {; q0 m7 W& W6 L9 x/ [
  18. . C& E  }1 ?: ~: r" C: W" u1 m- w
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }2 o9 ^  Z2 J, o8 c

  20. 0 }9 ?* M, H( m) Q2 p1 h6 @
  21.               B1=2.*PI+B0 ;
    : P0 I3 q) {3 Z; x8 m* B6 }& y1 l

  22. ! I0 C/ m$ M$ x9 Y
  23.              }
    9 P. m& j2 P+ w& c

  24. $ m/ \, Y) p3 T
  25.           }7 h2 D1 x: Y. O. D

  26. ( E6 s9 d9 y4 l+ a
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ; h' t0 V3 j" E5 \0 Q9 ?

  28. 1 |( Y4 q4 |' U7 n, W% f
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));& k# b7 u. Y7 h: M/ V

  30. 2 q0 X" d, F+ G; O9 Z. |+ l" m' I
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;6 D9 E/ {. J9 a& r: F; T& f

  32. 6 `. G* f* {1 A. o: E2 N' m
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
2 _0 ]! Z/ {3 G
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
9 M3 H3 _9 A1 O8 I3 h5 M5 ]9 B( p5 \
640.png 2 s- O' `3 ^! C! D. V% G
测试结果:
) h1 O6 v' T) D 6420.png
; {2 B! D3 T' ?0 a& v# j+ m) U2 ]0 {7 [
3 j$ o( [& E2 B* D$ M反向测试结果 6410.png 5 p2 y! M2 q+ ?+ \) x/ N/ {* w$ r7 N

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

积分
327
发表于 2025-10-15 08:41:53 | 显示全部楼层
谢谢分享
回复

使用道具 举报

1

主题

136

回帖

170

积分

注册会员

积分
170
发表于 2025-10-15 12:52:53 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-13 22:11 , Processed in 4.057267 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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