找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 429|回复: 1

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

[复制链接]

431

主题

5752

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    8 X7 o% z9 s1 Z
  2. int  EQ_is_ge (double s, double t);6 Q, [* B* W: s
  3. int  EQ_is_gt (double s, double t);  F4 ^( \9 R; g6 a. K( a% o
  4. int  EQ_is_le (double s, double t);
    " d1 S& x& B$ N' ^3 {1 m
  5. int  EQ_is_lt (double s, double t);8 o( s% m$ a: M' @# w2 O
  6. int  EQ_is_zero (double s);
    : ?  {' v3 n" ^9 N! u8 Z
  7. //=============================================================8 D1 F; v/ W2 ~2 t1 ]; ^
  8. double ARCTAN1 (double y, double x );
    4 }* D: d2 r6 o  |
  9. //#=============================================================
    2 _, E- R% b( w" x- d/ R; i
  10. double ARCTAN2 (double y, double x );! N  G- l+ |# I+ q. h/ q! u
  11. //#=============================================================
    2 ?6 W1 ?5 v4 `: ]2 @0 t9 a
  12. double CheckConst ( double angle, double constvar  );
    9 Q* t9 t& u, E8 q
  13. //#=============================================================8 s$ z. T: |6 u8 m  E5 E( V7 l
  14. double Check360 ( double angle );/ d! u- x% H6 L0 Y4 Y
  15. //#=============================================================, ~$ q+ L: s0 u
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    * J& @6 X* I6 I4 T) a& i
  17. //#=============================================================
复制代码

' l1 w1 F! o# Q5 f9 Q4 e以下为部分源代码,用于判断,计算角度等3 u7 R# H3 s! l9 _4 U- r( O$ D
  1. int  EQ_is_equal (double s, double t)
    , w, m, Y$ i# T9 n/ p5 Y4 j1 R
  2. 1 W1 J9 a1 U4 R
  3. {
    ) D/ N1 M$ n& u7 A2 R# D
  4. 3 O. H' _0 L' I4 b# y
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    % \4 H: y! k- S, f# x9 g! |) I

  6. 8 x& }8 I+ _4 z  x; X: L
  7. }
    ! R) g; L9 W! A" d2 S+ t
  8. 0 F$ h9 i6 v8 V0 F/ S# c, Z1 D
  9. /***********************************************************************/
    ( d  ]$ ^7 U# g  g) w: c
  10. . m1 i8 r( v0 E; n$ _; P  k! K8 D
  11. int  EQ_is_ge (double s, double t)
    . E7 O/ z' D7 v  o3 @

  12. 3 h4 I/ R8 ?' c. F; G; B  z
  13. {: g! a; K+ ~0 Y, @

  14. 8 @' l5 \& o! F4 L4 `0 m
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }6 ~4 W" J6 W8 f, W- H" q
  16. * G( i" x, z- k5 M! C
  17. }
    ( |: p# P1 k0 Q; J

  18. " T8 U6 [( M9 o0 D0 d
  19. /***********************************************************************/
    3 ?4 r; b3 \+ ?4 n4 Y0 {$ d- y

  20. 0 d1 ?4 R9 Q. {8 [! a6 e7 ^. U
  21. int  EQ_is_gt (double s, double t)
    + @& w/ y" b0 ?

  22. 1 F" J7 y) [" d) H6 i! N
  23. {) N8 c7 f& e5 F, U
  24. : j, X+ T3 F  Y% j0 ~% Z( h5 U
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }8 m' p4 B( r' D4 ]( g6 w
  26. : M. U0 W, j( U! f3 L
  27. }  t& B9 W: f0 n' @3 i
  28. 0 W" n& B- X) J& V3 d
  29. /***********************************************************************/$ Q6 E$ Y$ ], i

  30. 3 [  l; l1 `5 |
  31. int  EQ_is_le (double s, double t)
    8 }/ C, H6 U) f, d/ ^3 h  ]0 D' S
  32. . W6 `. e* T# m
  33. {
    & ?7 a3 G% e: e1 O& Y

  34. ! h# G' t& ]5 C  P4 q
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }5 B+ m9 a& n0 ^) E
  36. 5 t3 G  F4 |6 R% s$ y  ?* D
  37. }
    ) X) t5 u" M/ a& W  Z' C

  38. 2 M  z$ p7 n. M3 o2 k& C) D
  39. /***********************************************************************/& A. U2 v% Z! T

  40. ) i5 q% u) @0 u* V$ B
  41. int  EQ_is_lt (double s, double t)+ F; p4 q0 ]  Q, {8 g' _1 W- l1 s
  42. 4 `; g8 G' F2 f, Y/ a
  43. {
    7 [0 F( h4 S- V

  44. * m! V  |8 T& V- f9 F6 s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }: H6 i5 J- \0 G) @: \5 ]
  46. + ^# L% N5 a( r& f8 ]5 x8 O2 h
  47. }
    - Q+ z+ f: ^; D; r% _' C4 J
  48. 3 e: {  D$ g$ R& Y4 O
  49. /***********************************************************************/' ^/ P. F3 X- s3 H: V& H
  50. % T% P; L- t( ^& R! M+ T% t# I( s
  51. int  EQ_is_zero (double s)
    5 M; D' ]$ L, w( i8 W9 J

  52. , e; X0 N  L4 {% `. U# t
  53. {
    . P, ]5 x2 |  m8 ^) O% c9 P
  54. * Z+ R- V" a( q4 ^6 i9 ^, e
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }( M" X( S  j" o2 G* ]
  56. & H! Q* t+ d- C0 {) e
  57. }" N2 [5 z+ F( A1 B# z8 ]

  58. 8 I0 e) L+ G6 W# J
  59. //=============================================================
    ! d4 d( M1 V+ H% A  j4 Q
  60. 4 z. @: I+ ^2 g9 u! P% g
  61. double ARCTAN1 (double y, double x )5 W6 E5 q8 G% N4 ?5 M
  62. * m8 e1 Z, S3 D( P& \& @
  63. //#=============================================================
    + |  Q% m) k$ \8 q! n, w% ?3 P
  64. 4 l7 m7 B% J5 X0 X8 z  _8 B
  65. {
    3 ?' u3 f* T$ @: U; l; R
  66. . }4 P  H4 v7 e! Y3 w0 b
  67.    double ang;
    / G% J6 u& f/ Z, O2 b1 |
  68. ' z. s1 c2 B) j
  69.    if (EQ_is_zero(y)) { y=0; }
    2 C$ ]5 I( h) c
  70. 4 [% b! n$ |; n/ x; g  A7 _
  71.    if (EQ_is_zero(x)) { x=0; }
    , |6 \4 ^8 \; M3 A# g/ B

  72. : D  |6 H8 l! L. v; n. U$ {) i" o
  73.    if (y == 0 && x == 0) { return(0); }
    9 f( Y- r/ r( q  v5 H8 \
  74. 3 x: B/ T8 C. f- H: P9 J4 o
  75.    ang=atan2(y,x);0 }5 ?; b. n0 ?
  76. $ T6 N& K/ h" m
  77.    if (ang < 0 ) {
    6 Q; o* z: D% g5 n5 _7 T& }  q2 e0 k

  78. 3 Q$ z4 Q  D/ t1 R  Z
  79.       return(ang + PI*2);: q7 C! f7 l$ r" w/ c9 J
  80. - \; T0 ]( ]" |! t* K& t7 Z
  81.    }
    $ O0 I2 Y. m; h  O$ }$ e" d
  82. 7 Q! E% y5 Q2 j$ @' R5 o  s
  83.    return(ang);
    8 Y2 `! E5 C( b' b7 P  J9 u0 [

  84. - K+ m9 {2 u& _6 N5 S- r6 n
  85. }
    ; L( @0 Y  `' b/ @4 d- V

  86. 2 @- Y0 I2 C) D" @
  87. //#=============================================================
    ! M* j1 j0 ^8 m% u, x9 w/ B: l
  88.   e- e8 e( Y  f
  89. double ARCTAN2 (double y, double x )7 A; L0 N+ Z/ O+ m( b. }  J6 u" U8 h8 ~" R
  90. 1 F  N8 J7 e7 H0 ]8 o# I
  91. //#=============================================================
    - c& r; A& c( g8 O

  92. ) A, r3 X: z/ \$ g: \0 D
  93. {
    ! p; y  p7 R' j3 ^: a- A% G

  94.   N: O& u/ B, t# ~7 r
  95.    double ang;
    * w- i, \, n. `5 H3 [- E1 ~

  96. 1 r* f3 D4 B' T) x. g, L2 _' O
  97.    if (EQ_is_zero(y)) {2 ^. P* \/ J+ n

  98. / c% ^- I4 O- Z2 b# u
  99.       if (x < 0.0) { return (PI); }
    9 y3 u2 Y2 `! [' f$ ?. Z

  100. . F. N/ r5 c3 F- x9 D* s
  101.       return (0.0);
    - X. M; P  U2 S8 R+ E
  102. & y; j8 i" K3 m
  103.    }" k1 |+ ^" Z+ t2 [, p1 s
  104. - n% S# Q& y4 C" r) B6 Q7 [
  105.    if (EQ_is_zero(x)) {0 ]  h4 x( r% e5 S3 d! k

  106. 8 V4 W4 k5 G- P/ ~8 {, M
  107.       if (y < 0.0) { return(PI*1.5); }
    0 V- X0 E% [4 W% [  \
  108. ( P+ t; ~1 ~% K5 D) S/ o9 J
  109.       return(PI*.5);" r/ p# i7 q& C) O) ~
  110.   M8 ?1 R3 I' o* M: B) k
  111.    }0 ?" a. o1 P/ D4 h4 s! z

  112. ( |* w. W+ j% k# t0 M
  113.    ang=atan(y/x);
    ( Z* a* G* c' D  }, e/ r% o
  114. $ U, R: A* g5 ^; W
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }8 Y4 [1 G+ _) _9 ^% V# u
  116. * r: M- ]: a, h) R
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    , J# o% A- p9 y: M- s$ b
  118. + ?4 Z- z1 m$ H( q$ o9 b8 c! Y
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }; U) p  _: S' g; T: Z
  120. : N% A* M4 B0 T4 d9 {" ], L  N
  121.    return(ang);, a0 @" D6 a! z/ k* x' g: I1 d

  122. " k( U) M1 e+ A9 S
  123. }; @- O7 x* z$ |4 \# j0 u

  124. , n# Q% F3 z3 {5 g9 V2 f0 w
  125. //#=============================================================; A/ a6 `2 |7 e; n/ N
  126. 5 N4 w. N  x( o
  127. double CheckConst ( double angle, double constvar  )9 w, d- _6 d$ Q+ \- {% N( P0 R1 b

  128. 1 z$ ]. E0 Z, R& b: g* W  Q# m# ]6 Z
  129. //#=============================================================% x: |2 O" [: Y$ H& k2 I
  130. 8 ~$ P. W$ k; ?& V# i0 x
  131. {
    : U8 D) @3 C3 B. u  z0 Y& c

  132. 8 K" ^0 Z- e! Q5 d
  133.    while (angle < -constvar) { angle+=constvar ; }" Q  [- V2 U6 B

  134. , d+ Y- m! \, j' x  F, ^+ ]
  135.    while (angle >= constvar) { angle-=constvar ; }- B, P4 A' c' f
  136. 7 d4 H/ q: c, p  y7 r  m
  137.    return (angle) ;
    1 M5 j# ]' [0 {/ Y
  138. , c0 N. m+ x$ N, X3 e, h
  139. }
      @* W) V% L1 P2 l6 R( g

  140. . C! p% _3 F4 x0 q0 N
  141. //#=============================================================% C  [4 H/ o4 N! S! H
  142. . W7 k: }/ R3 P8 C
  143. double Check360 ( double angle )5 R( H! m' a5 W* Y. t/ a

  144. ( k8 {* e* t/ c: C
  145. //#=============================================================' ]6 q" @  @. `

  146. 0 b. h4 p. S; F9 P( O1 F. W' o
  147. {6 w; r4 X5 i! ?- R0 @
  148. % d! t% D/ ^) [& y4 M
  149.    while (angle < -360.) { angle+=360. ; }" Y) ?4 ^8 j( v3 S, ~0 e
  150. 4 l7 u( S7 f0 l2 i/ I# w5 F$ J
  151.    while (angle >= 360.) { angle-=360. ; }
    # ~  E6 w1 g8 }) c2 g+ g

  152. ) n: `0 E5 ^+ C2 j. ^. ?) a
  153.    return (angle) ;
    + |' r" u5 J/ O( D$ a/ E. a7 `

  154. " e& J  G+ a; r: C; f  s  c# B
  155. }
    ) p9 x: Z: m) |1 _! @
  156. $ A7 m% z1 I4 _& f
  157. //#=============================================================7 P( H1 F2 T- N! w% C- C9 l9 a+ X8 z

  158. " A6 Z: v/ P. |' f, B
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    3 T0 g9 _& w  c+ {1 i% f* R

  160. 6 T7 K; r6 n6 ?6 {
  161. //#=============================================================
    7 f4 _" L) j' y
  162. 2 @0 I3 S4 B3 h* y; o
  163. {2 w- X$ K( u4 O5 }, }; R' T

  164. " N! ~, K* w& C
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    6 t# i- G8 i' S1 ?  c5 v5 `, s

  166. 1 P; |8 x& N5 F6 x9 G
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }3 M% F9 C( r2 q7 t
  168. - m" Z: H) A* }/ U& o2 a
  169.    return (angle) ;) @4 O$ U- e; N8 l
  170. 8 a0 W2 t6 `3 q9 d
  171. }
复制代码
- D8 ~; w' u7 @3 z
以下为摇篮5轴计算过程代码
( ~& B7 f9 {2 q" i- d. @
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    - Q  S- L" I$ E+ W! D& u. O/ H( h6 Z% _
  2.   h( S* ~, r  n
  3.          j=0.; B1=0.; B0=0.;
    , r) R- V  B& I! _' u/ F# X2 ~% ?
  4. - N% I, v: s- H/ _8 j  h8 |
  5.           if (EQ_is_ge(i,0.)) {8 K9 f9 Q7 g8 |) |$ V

  6. 8 H* D, u! Q4 L7 f/ y3 d9 _
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    ' ^: l$ G% f" ?4 V

  8. / @8 N; M* @! c- X. w' y
  9.           }7 y5 u* s# V( m+ ?8 K4 S- ~
  10. + c# O. u9 ~" E  n
  11.           if (EQ_is_lt(i,0.)) {
    $ N2 N0 I4 E7 ]; v- Y! Z8 O
  12. # h* B6 y/ v' u
  13.              if (EQ_is_lt(k,0.)) {, [( q2 m( ~: O5 l  ?

  14. ( y" Z) z) `3 J1 h0 f
  15.                 B0=atan(i/k); B1=B0+PI ;
    ; R% `) b" Y2 e; j" H
  16. ) O6 J: z$ h1 O% i) B9 E- `/ J
  17.              } else {1 {& O! A; K* u

  18. . j& A0 h4 a# c/ l. f) ~/ {5 R
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }: q9 @- p% i9 _8 G! ?8 Z# ~

  20. / P, a" X  `7 W
  21.               B1=2.*PI+B0 ;& }  A. W( ?. L0 {; g( Q4 N# ^

  22. ) O9 H1 J; G$ d: _
  23.              }
    + |6 w% h0 @) ^0 w% i  Z- k9 {

  24. 5 x  m8 k, l2 j. h( ?7 L
  25.           }
    + J4 h4 L, V" G- I! F

  26. ! t% b; u. x- N. \5 P9 B2 ]$ O
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    " {% L! i5 ]+ Z5 P/ b' Y. ^
  28. 7 \) s- G4 m- [2 h
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ' ^7 j/ Y, I0 ~+ q; M3 F6 x$ {
  30. 2 f& `% @; Z# R, @3 ^/ W; y
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;% c4 W% J0 g0 y/ n( u6 n

  32. 3 R6 x, i3 ^. q9 H
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

$ W  g1 C2 j2 H! M4 K, g通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。0 d: a' g( O8 x
  \! f; ]  r% Z
640.png " o2 J6 V0 f( N3 l+ ~
测试结果:% d: x$ s9 V0 ~8 p
6420.png
, ?! i1 e/ ]9 u2 Y2 m8 I0 X" M9 H$ Q' n
反向测试结果 6410.png 3 v4 }1 O  g& Z5 B( U; p/ L/ f

0

主题

24

回帖

12

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-15 22:12 , Processed in 1.714055 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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