找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7063|回复: 3

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

[复制链接]

433

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ; ?# V1 T4 Y1 B
  2. int  EQ_is_ge (double s, double t);( ^6 Z) }# {' F: @
  3. int  EQ_is_gt (double s, double t);
    1 _, F: G  |& B& ^: P8 N* k4 V1 w
  4. int  EQ_is_le (double s, double t);& Z3 N' t- C& t: {" q  V
  5. int  EQ_is_lt (double s, double t);) G! Y5 w5 b' e4 q
  6. int  EQ_is_zero (double s);
    , J6 l7 k- X' R% {
  7. //=============================================================
    1 f; q6 Z2 |& `# m7 i
  8. double ARCTAN1 (double y, double x );- u4 `5 J9 L7 Y0 d) b; \
  9. //#=============================================================
    ) E% y- U  L' g" h6 f5 C7 v$ U3 {! l
  10. double ARCTAN2 (double y, double x );4 M+ \( I$ o7 |5 K. }7 }7 k1 s& ~
  11. //#=============================================================
    + N: @7 v1 D3 B# f
  12. double CheckConst ( double angle, double constvar  );
    ( m2 d$ w7 n7 B8 J  C
  13. //#=============================================================
    8 a- o8 B& ~4 s: z, ?, @
  14. double Check360 ( double angle );
    7 d/ f4 s9 d( }3 d
  15. //#=============================================================
    , Y/ ]  K. e( v2 H8 _
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    6 Q2 {. D" c1 n2 f' I) u- g6 Q7 b
  17. //#=============================================================
复制代码
- S2 N0 u" n2 Q: V
以下为部分源代码,用于判断,计算角度等
5 x; |* o& V) e- f
  1. int  EQ_is_equal (double s, double t)$ F% B4 C9 t& v
  2. ' X* P' \8 r* D8 R% t. R
  3. {7 e% m( C( X" [, u

  4. ! x# B8 [5 W$ x8 A" K5 y7 g4 J
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }, l+ I1 [) _' a( g* w
  6. 8 E) a( G& I6 i( ^- \. h/ j! e* ?. j
  7. }
    ; a3 F1 i. x6 S2 B& J% g7 t8 k
  8. $ ~+ v5 U* }- t# l( j, |
  9. /***********************************************************************/
    8 j; R* g0 m6 T7 n$ ~3 F, R

  10. 9 ~2 e, {3 C5 F. n
  11. int  EQ_is_ge (double s, double t)2 t3 U& h! Z( Y3 A, I

  12. . w+ X) J' E5 f3 L0 \3 V
  13. {7 c* y  R& R& e  w4 _: C
  14. 3 B# _7 b; a$ `3 f8 z. g$ g
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    + L4 F3 m1 k1 r

  16. 2 X; h$ P& j( t, Z+ b: s5 Z
  17. }* E" \' r& y. C( N, z4 _% N
  18. 9 m1 V9 o% f$ t) o$ A+ j
  19. /***********************************************************************/! A( ~5 ~! C6 f& d
  20. 5 q# a$ y# E) s8 I9 I" N  o6 g
  21. int  EQ_is_gt (double s, double t)
    & v! h8 S$ k2 D' ~7 X7 y6 `

  22. ) t2 z# N  e) z. H2 t5 S
  23. {
    % n$ }. q5 f% w! s

  24. 7 F, T, A: @, D% ]" V# }4 m
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    1 E: r& P2 U% `/ B/ ~

  26. 3 C7 J8 [  C' Q, _+ {( W
  27. }( P! e: h, H7 ^. T% g: k& C

  28. 6 I4 m: q& m( z, p, k3 C" C: m
  29. /***********************************************************************/6 W- s8 c. [' Z8 [4 B
  30. / `, U* r( e& T$ b3 g
  31. int  EQ_is_le (double s, double t)/ A6 d0 _" Z7 ~  D* @& v; s8 ^

  32. ( K- x3 }0 A! _) P) S. M+ ?; s5 E& ~
  33. {
    & ~1 o4 w  I& C  c% E, c! A: R

  34. * L" `, L: Y* ]+ K/ W; S" [
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }9 D) Q* v. d. _- ]+ m) L
  36. 5 Z& n7 a, h/ i
  37. }
    6 m$ t# L% r: x% F, y

  38. * f1 V" ^5 O3 r
  39. /***********************************************************************/  _3 y: I5 s! m" u4 C7 V; R( n
  40. 2 ?& \: y7 h- v+ m' k  J. v
  41. int  EQ_is_lt (double s, double t)4 c( n! T7 @! Q! u1 Y
  42. : O! }; o( [3 C: ]5 m2 J% G
  43. {
    # a$ [% ]( f, ?( Q9 m9 D, B! q

  44. 2 ~4 Y4 d, N; P7 J& L" U
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    : e5 p9 B+ A# e' h

  46. / g3 _) \. l2 m0 V
  47. }9 E2 K5 F, e" f
  48. 9 x. |) t6 U9 A" d% H3 v4 h
  49. /***********************************************************************/5 F3 Q/ m" T, x

  50. ! e/ h% D2 M$ R& P* J$ ^" `  y
  51. int  EQ_is_zero (double s)
    1 n7 P) p! u8 K6 w+ G
  52. " y4 C2 a; ]9 T3 k% q" k
  53. {4 v, ?; ?7 F& ]

  54. 9 }" S1 H+ Y# D) @
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    & T, Z3 e; S8 \8 x
  56. 5 `2 C( ^7 Q/ ]& L
  57. }
    ' V3 t6 O4 v) |$ k8 b- S1 X/ \
  58. & w4 n  x3 v) {) I
  59. //=============================================================: u3 B9 i  t5 P$ \' h

  60. ( e4 `. |2 e4 r1 b8 b
  61. double ARCTAN1 (double y, double x )
    5 h9 U1 b" n; z/ i# I( n

  62. % v+ h8 y% X- l& r& @2 V- f3 k
  63. //#=============================================================6 j7 \; }" p/ ^4 F) j! Z3 Q
  64. % P' o* s7 U( @/ v9 c8 W
  65. {. D  N9 V/ A# u
  66. ! s" o2 ]8 b( A7 v
  67.    double ang;
    7 h$ z! c, E4 i7 ]
  68. 5 ~6 b$ W+ A% t8 O0 L2 i! r
  69.    if (EQ_is_zero(y)) { y=0; }) G9 i, u9 Y  e1 M

  70. ; Y" [; F) B: @$ y' \8 ^; c- c0 A
  71.    if (EQ_is_zero(x)) { x=0; }
    ; A6 ?$ \. L2 _* i' y7 }( }, L5 Z7 x

  72. ( K+ ]& i3 n' x- F
  73.    if (y == 0 && x == 0) { return(0); }5 S% Z( ^9 e+ f/ u

  74. + @& U1 e% R* _/ I; _
  75.    ang=atan2(y,x);" q! f4 P9 r% I. ~: C4 E

  76. ' Y. ^7 d( |# X+ T# C4 S
  77.    if (ang < 0 ) {' ^' Z6 x2 x- c7 k" }1 Y9 q: e
  78. $ R* S2 L( H  U  L+ K& m3 B( G
  79.       return(ang + PI*2);
    , R8 c) S/ L: I/ D% ~

  80. 3 U1 M8 _0 y, c/ r/ I- B
  81.    }
    : x) g" R1 Y) V, |0 P
  82. * x9 v6 {' S. r0 v8 T. @/ a
  83.    return(ang);
    + L6 k/ ^: Y" r0 e1 j
  84. 2 N# c" M  X1 y# w$ `9 n* ?4 W
  85. }
    0 u: @, [2 `1 m- g- V
  86. . p% S3 e+ ^: @# a! s' T" V6 h
  87. //#=============================================================) @  a5 j8 E2 i8 N- r" N! x

  88. 5 A! L) E$ n3 i) g. X
  89. double ARCTAN2 (double y, double x )2 I3 @/ _( _3 g) q1 _( m; i
  90. 9 M! `6 i; k' v  M
  91. //#=============================================================
    3 K3 ^- ]! t% m! |8 I
  92. ) q0 g' m* H, K9 M
  93. {9 H) N' K% J; i$ r0 a5 k2 t; R8 x
  94. 4 s/ n1 N  u0 y" }6 I
  95.    double ang;
    8 D+ H! z' i, B3 j& n1 q7 U
  96. ; ]* T" G2 P( q- j) k- A7 e  x
  97.    if (EQ_is_zero(y)) {
    , E5 J# G" K4 S8 S( T
  98. - S0 Q6 d. Z: |* K3 Y6 P$ h2 n' [
  99.       if (x < 0.0) { return (PI); }8 k$ N8 Z6 _  W5 o

  100. 4 @  j4 @4 p" u. B7 K+ L4 [) j( x
  101.       return (0.0);
    1 R8 {% A+ B- e0 b( \

  102. * S" n# H' A' L: P) `: N
  103.    }: f* s! K# M+ B9 D. V8 Q6 e

  104. ' l9 {! e* P9 A
  105.    if (EQ_is_zero(x)) {
      ?) x: _- s8 W+ S

  106. 2 a9 J+ D0 j1 p- p- E6 e, l
  107.       if (y < 0.0) { return(PI*1.5); }
    ' p- L7 v. b! Q2 Y/ M
  108. 8 c9 U4 \0 o+ n! k- s4 X
  109.       return(PI*.5);
    ) A. c0 a( `% [2 q( B6 e7 D. a* F
  110. ) {$ t# p5 t5 a, e- o, f
  111.    }" u9 C# h3 S& ?& k1 y' C

  112. 0 Y3 k* Y( l) i
  113.    ang=atan(y/x);: l3 N9 B1 h0 e, D2 c

  114. " C) p9 l6 O0 {0 u' i1 [; w; Y" ]
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }) f) C( b. ?. R9 a7 G( j
  116. 5 O/ y9 [7 o/ _. h# F  j
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    : `$ d  b% u, z* C! r' m
  118. 2 ]0 g5 a" a, |( E# l! f
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    4 c8 C' \7 v+ }: V
  120. : C8 A( R% @" V- k/ ]
  121.    return(ang);& Y  j8 W, k5 H

  122. 3 T6 h# U7 W' @  Q+ U
  123. }" @9 K% m1 [" J3 x7 B* K

  124. 6 X: w; H) o9 N# w+ f# b- O
  125. //#=============================================================' }" Q* u; _+ |8 q& v- C& B, Y0 \
  126. - Y) H7 d7 {7 C& I% W( ~8 s0 H3 b4 ~
  127. double CheckConst ( double angle, double constvar  )
    ) D4 H& v+ A( a. A0 m0 `1 v
  128. ' o/ D2 j/ C- {! I: @1 ]8 k+ h# G
  129. //#=============================================================
    " Q/ }& U+ Y/ w& ?8 A" O) {

  130. , B) m2 Z8 V! T5 e& \% ?
  131. {" F0 t2 T8 A2 C9 x
  132. : R4 w: R: P$ O+ r# {) Z( m
  133.    while (angle < -constvar) { angle+=constvar ; }% C2 q0 E( W  _2 X4 `; h& c' {5 R

  134. 4 A; f1 K' K9 f( ?9 B1 ~
  135.    while (angle >= constvar) { angle-=constvar ; }
    & u: ~6 W; u. u; F

  136. - a( {* h7 ~3 V
  137.    return (angle) ;
    / G4 p6 R+ H3 U5 V' h- j8 R# e  y

  138. : Q1 U6 y( N) z/ G* _
  139. }5 E3 J2 C4 e1 ]6 u- b  B# R, e

  140. 0 w% q: V% \+ K" {/ [
  141. //#=============================================================
    0 m; m1 B+ _/ p4 C4 A
  142. & f, N& i, @" Z" g
  143. double Check360 ( double angle )1 ]! g; H3 i+ Y9 U' \  R

  144. 6 h; w' ~3 ~. `
  145. //#=============================================================
    $ N) _* Q$ e. t: x% \) r7 W! K
  146. / f5 s. W! k' H7 s2 I# L. @6 ?+ a
  147. {
    ) y& q/ \7 W" m" X0 d3 K( [3 A
  148. 9 O( U: h# F: ], v
  149.    while (angle < -360.) { angle+=360. ; }; ?: n  F7 n5 ]# X4 ~

  150. , \" b2 f2 t9 b  a
  151.    while (angle >= 360.) { angle-=360. ; }
    8 e- a: E' a/ K" j' y& M
  152. " u. M% q; h: ?& M7 t
  153.    return (angle) ;9 U' U7 c3 Q4 o% `4 g
  154. 7 o; m1 Y+ z9 ?$ g: J- i/ b
  155. }
    * h# c; Y* {0 c

  156. ' C' ?6 E% ~9 a
  157. //#=============================================================
    0 X( {! `/ P  L8 Y  `5 [
  158. # ]4 R1 O; V7 O& w$ ~
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )7 D: I4 }* X$ T- S% H7 a# F
  160. & e. Y) ?( b. ^: w+ P- k3 a
  161. //#=============================================================
    . R# X; U$ l) ]1 f' d

  162. % g  S& g& |: J- B' Y9 B
  163. {  B4 `! b& W; t

  164. " N  r0 `8 Z7 U6 J, @( ^
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }0 ?- ?! O9 f# s# X+ v- ^) n6 y. w

  166. # t1 i6 }" x' F9 v" G. @9 E
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }2 R; j# V' v' I5 O& b# _

  168. , \4 j3 @1 s  ?- p: |0 L+ @8 B* V
  169.    return (angle) ;
    , D& X- n% R: N1 R+ a2 R3 n
  170. / y) i- m- y$ `( u
  171. }
复制代码

0 C  I0 ^5 Q! h& s6 J以下为摇篮5轴计算过程代码$ Q  p4 `8 z9 Q& L
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);9 j. v+ J3 v. h+ C/ ~5 N+ i
  2. 7 Y! H3 `8 v9 Q" ^: H0 C6 l
  3.          j=0.; B1=0.; B0=0.;
    , M0 ~$ k: g8 d/ [% Q
  4. : C2 E, t4 S! P  a; Y1 T% R7 N
  5.           if (EQ_is_ge(i,0.)) {
    * J6 V( d5 f  ?
  6. & r! K) X& V6 R0 Y3 u
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }: B  ]9 K2 P5 B. w0 D' p0 I
  8. 0 F9 K! e1 r8 w; q" I" ~7 h
  9.           }
    - a) t3 `5 p; H; I# m
  10. " E' g. b% Z  V
  11.           if (EQ_is_lt(i,0.)) {  `$ q$ f# D0 U; w# |6 W
  12. , g+ F! w, l: ^+ T9 v
  13.              if (EQ_is_lt(k,0.)) {
    1 {  }1 {7 E9 ]7 @$ }. g, ]+ c. ]
  14. 8 q! |6 c+ U( I; K
  15.                 B0=atan(i/k); B1=B0+PI ;
    " w" e, Q( e3 g  [
  16. * ]7 t1 y* \/ e, `  U' s
  17.              } else {
    1 d  C$ ]' a% u# f7 g1 _
  18. 8 f5 U$ V3 B* z( F9 D
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }: w. Z4 S# S' k. J
  20.   j2 G9 `# K7 J4 V; w
  21.               B1=2.*PI+B0 ;$ ?. d6 a( d8 y& `1 k
  22. 2 j, ?7 r( ]0 W, Q: L0 \. C- y
  23.              }
    * H, m1 n. g1 ^  _+ X

  24. & B' B# d0 N# |/ P& ~) X6 D
  25.           }
    1 S/ W1 M( x6 K5 Z, n
  26. 9 N2 x  G/ x: K6 H! [
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    3 w' d4 L# b6 l8 l

  28. $ U6 G7 ?) Q$ d
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    9 C3 V& ^# u  [' q; G

  30. " Z  o/ T  g, w
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    " i* s( E+ s. h1 ?3 O1 n4 h
  32. 7 ?2 n' ?  I/ h! W* ~/ s$ u2 [
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

7 z6 D0 G! T. g通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
3 z! @3 \1 j1 o; M
! `+ y( _! D( _0 q' [ 640.png 9 t5 w  s2 k7 O% P, _
测试结果:- q% ]6 D; @) k& N  O% M' j
6420.png . B9 @/ j, J$ P. U6 D9 v

% M( v1 v( d4 y7 M- k反向测试结果 6410.png
  x  {. N8 E4 E4 r  v. e$ H7 Q

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

211

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-3-24 03:57 , Processed in 0.248528 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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