找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 427|回复: 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);3 [/ c% j& t, [' n) ]+ L) ~
  2. int  EQ_is_ge (double s, double t);
    ! w9 o1 I2 \* h3 N) K3 r! O
  3. int  EQ_is_gt (double s, double t);. J1 c+ g. J& d
  4. int  EQ_is_le (double s, double t);+ K% [3 b  ^) I" F/ }: Z/ L( j( Z
  5. int  EQ_is_lt (double s, double t);  f  X0 U( v: r* S. w/ I
  6. int  EQ_is_zero (double s);
    # Q, U" d& r' }0 {* I+ \
  7. //=============================================================/ c: ?# I. X" `* A) ]
  8. double ARCTAN1 (double y, double x );
    : G/ O0 F% I# h, G5 ^& |
  9. //#=============================================================
    9 k# T2 k% u- U! p+ a
  10. double ARCTAN2 (double y, double x );5 S3 u) w. u! X
  11. //#=============================================================' a) p9 u8 G0 R! o
  12. double CheckConst ( double angle, double constvar  );5 E4 d6 p+ ]1 q" a# k1 c" t
  13. //#=============================================================
    & Y3 n0 Z3 [( V4 T# k2 D
  14. double Check360 ( double angle );$ t/ z/ I$ P. C; I
  15. //#=============================================================; v' v0 }/ y8 p: B$ C
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ) V; @1 w& o, j% s6 r
  17. //#=============================================================
复制代码
# T( U" ]) \- a4 ~
以下为部分源代码,用于判断,计算角度等
! l- W% Z5 {6 U; g& y
  1. int  EQ_is_equal (double s, double t)  f9 @* N# \0 _
  2. ( ?! Q% b2 a& W0 s8 |
  3. {
    1 `' J1 D8 b( ]6 A1 h; V
  4. ' w" k6 f" g1 L0 E
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }; d' @9 T: }% s: L# h

  6.   P, q: `% a* N5 J( g; s. W. D
  7. }
    8 @! g3 `, N8 }

  8. 1 v' N( Z8 P5 Y2 P+ B6 K
  9. /***********************************************************************/8 l9 w1 q  p) ^1 W
  10. # G. y6 C  G$ s+ g
  11. int  EQ_is_ge (double s, double t)% f1 q6 Z, J, q: G6 R6 ]) M

  12. 6 c& O0 H! {0 X
  13. {
    + a: w& A' M; O8 E3 R8 @/ t2 m0 ?* g
  14. - f( k) }, l2 h/ Z
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    + ?' j/ B- q) P

  16. * {' x, g3 @% W( |& g2 c
  17. }
    6 v" x% k' v+ `" M* O3 E$ Y- R" S
  18. 2 m6 p. @4 a. m- ?( f% B
  19. /***********************************************************************/
    ! f5 L5 c: G# w* N. q) t

  20.   S$ x% X' ]* ]! Z& S
  21. int  EQ_is_gt (double s, double t)3 ?0 |) j( F$ R6 d" I
  22. ; T( m1 q* v% d0 m3 P& t/ p$ o
  23. {
    / ~! U9 v& T; p
  24. * D& ^3 I3 k% i$ ]9 V* n
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    . t' O7 a) M3 {8 p, D9 `9 Q0 W

  26. 3 g0 y- v6 g# q% Z) g
  27. }" n% o$ o: N9 l7 @1 n9 }

  28. / V, ]. e9 M( v+ R+ p9 [; P
  29. /***********************************************************************/, R% ]% f% R' M1 T8 h/ A, H; ^
  30. ) M" n% F2 {( l9 a- z. {
  31. int  EQ_is_le (double s, double t): \, W5 g  W; p) |( W( V3 O) _
  32. % y9 {! O- y! I4 a! r. O, H# j
  33. {6 X' O! q5 f* c+ T% A7 t

  34. 9 j  d2 Z5 p$ ?. n# R
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }: {% c$ B2 f0 Q9 j! X
  36. : P4 `3 y+ z1 J- w( K7 i3 X# v
  37. }* N$ R  @" N3 y  n% ?1 Q

  38. $ G( [! P9 x5 n. V' r1 E
  39. /***********************************************************************/
    " ~2 y) |  w$ P/ K! t; p6 D

  40. , L4 n, @* _4 {4 h# R
  41. int  EQ_is_lt (double s, double t)
    8 h5 x  U8 z. Z2 M* \2 k" \" h

  42. 3 E- q$ t7 n8 a+ V" L
  43. {
    " V1 u( k) i! a

  44. " s. i! J, B$ {5 F% @) U2 s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }4 \1 z& _3 B; B! w% s8 \

  46. ( h" r" e* V2 x4 o3 |9 X
  47. }: j! S& x9 ~; d! T' P
  48. ' k5 v, `" T. c! O
  49. /***********************************************************************/5 L7 R/ L; e$ r6 H: {- N+ l
  50. ; n/ Z# ?! O5 @% Q* Y! U2 A! S
  51. int  EQ_is_zero (double s)
    , c$ @. ]( s" ]: D0 h  k

  52. & I; ^( I- P. p+ R7 r
  53. {5 x- Y3 b. _+ s+ Y0 Z& e; U; g0 Y
  54. , f7 a* N, Z2 d- z) Y) ]4 s5 j
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }. C4 J& K! J( a

  56. 8 M8 D2 o" b8 w, C' \# {& R
  57. }! H: @" g0 [3 d7 L1 o! {
  58. / w1 B3 e& D$ i' t" d
  59. //=============================================================* q, L# }/ h$ H+ A* w1 {+ ~8 f
  60. ; [7 @- v3 Q, j3 q1 e
  61. double ARCTAN1 (double y, double x )
    2 F) _: |4 O& S3 g! H
  62. 2 A: L# O3 P4 x* x/ r
  63. //#=============================================================7 s% x! a0 e2 \, E' C( [
  64. 0 ^4 {4 w5 g) }$ I7 F4 b5 ~9 i: b) H! `
  65. {  {' R0 A0 l  w* x) A3 U, q0 T# l

  66. & ], N7 o3 M! @; y4 h* m
  67.    double ang;
    , G  L( U' s8 v% i# N2 Y# l9 z2 _

  68. 9 g1 F6 v' r3 P
  69.    if (EQ_is_zero(y)) { y=0; }
    2 `( n8 v# m3 D7 Q/ m  K

  70. . t. @2 `  @( N& S) P. G1 a
  71.    if (EQ_is_zero(x)) { x=0; }" `& o1 Z1 ]1 L

  72. , g. N* F( |* e0 N7 I: N, I# u
  73.    if (y == 0 && x == 0) { return(0); }$ j% Y. M  F' t  E% \' i

  74. : f: e4 W3 @1 ]/ E! N' ^) q
  75.    ang=atan2(y,x);2 c3 H" K; `# j% [# v0 _) o# s

  76. $ S5 v+ o0 R$ {
  77.    if (ang < 0 ) {( _7 o8 z2 y( y: j

  78. 2 t; ^: k' ?3 x+ g
  79.       return(ang + PI*2);/ q1 Z6 I2 e' ~/ q- x. v  T
  80. 8 m1 w5 {+ \  j7 z( ]& ?
  81.    }! k9 _: \  U) i* N
  82. & i. ~0 Y1 t% V# d
  83.    return(ang);/ S2 F/ `9 M+ R" U4 {4 j
  84. ( n: L# X' o$ G" W) A8 N
  85. }7 A7 B, [3 U" H; k/ X
  86. ) J# Q# w' s& S. U) G, G, f5 j# ^
  87. //#=============================================================
    " z( |: w2 s) j. y* R: U2 F

  88. # O2 g% c4 G; f  B3 s
  89. double ARCTAN2 (double y, double x )
    + K7 J8 M! k- l5 _7 f% p, h
  90. $ ]" x) P& O4 E
  91. //#=============================================================
    & Y5 r( @- d% a+ J
  92. & w$ K. c7 L' L( |- f& x& N
  93. {0 a, L. g7 e; n" \( Q0 N- T

  94. & z( F- w9 j3 s/ T! f7 j
  95.    double ang;9 X8 F, _4 `& n# n& q
  96. , S# y5 X1 p$ ^
  97.    if (EQ_is_zero(y)) {
    , n/ B1 M1 r9 V0 k/ O$ y

  98. , P4 k3 _; k& L& L) J0 C2 ]
  99.       if (x < 0.0) { return (PI); }9 B' ^6 {" u& b# N5 h. L/ g

  100. 0 N4 u# G; O7 L' Z  R, c. P
  101.       return (0.0);
    5 j, M/ ^0 C8 S
  102. 8 w1 A( S8 Y0 @% @/ `  k) R
  103.    }: D) _- P/ H4 M
  104. ' ]& H) L! X1 h$ j2 x
  105.    if (EQ_is_zero(x)) {
    7 ~$ q! R3 m4 W0 u

  106. ' F# j9 |, E6 ^! E
  107.       if (y < 0.0) { return(PI*1.5); }
    2 x7 |% d9 A# o  u% Q% R

  108. ' k$ y; l5 k# Q% p5 f
  109.       return(PI*.5);
    " G' J8 N1 I1 T; j
  110. / g3 \0 c: C5 x+ E" ^4 j5 b& g
  111.    }
    ; l0 }/ l4 X  j( \5 U
  112. - ?, J5 c0 }3 r: k
  113.    ang=atan(y/x);
    " K) I$ H2 E. C& i7 E/ s4 s
  114. ( p0 d9 ~7 A8 M' w6 U- }+ H$ l
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }, p1 I' W6 a) u: K( S
  116.   e9 q7 h  s; p7 I) R' d" \# U
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    % a) R) ^; x3 K( V# n! b2 Q

  118. ( Y% O( Y; E, P) i7 c+ _
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ; G7 J& P, u* X3 l+ E& a0 W+ H& Z$ x
  120. ) u, @( _4 _6 j) D4 r7 m. K
  121.    return(ang);
      l+ Q, ^( ?6 Q  {0 x' K

  122. 8 G1 e" ?0 O7 U$ T) p
  123. }! N! i( q4 T4 l- v

  124. ! K; Q6 ]  G5 @3 p. w# o$ [
  125. //#=============================================================+ a# F5 F8 `  T+ e9 b: J

  126. " {6 @, v/ t+ T/ w* S
  127. double CheckConst ( double angle, double constvar  )4 K) j# Y& R) f

  128. # X. I% o! P) T$ u
  129. //#=============================================================1 f$ K5 |* J1 J, t2 v

  130. 9 i: j# P' @* h% T, ~
  131. {
    1 C' @5 w; K$ r; N, o6 B0 A. A5 P

  132. 9 o) {8 `" S* `+ T
  133.    while (angle < -constvar) { angle+=constvar ; }. `1 }" o) c, v# E2 b

  134. 7 y& R- W2 y0 e* b
  135.    while (angle >= constvar) { angle-=constvar ; }
    ' b! g3 k* M& \3 D8 H% V  @

  136. ) x' E% \2 ^# \* J" ?. o, o+ U9 O" X
  137.    return (angle) ;
    ( ^# S! O& d" ~+ M& y5 \  Z: t
  138. % P' d; H: F0 S# I2 N
  139. }
    # z" G6 s; U. x$ f! U

  140. ! f& \: `4 R! F
  141. //#=============================================================1 N& \2 B1 S3 {7 @; w: m( W9 H
  142. 0 Q' F8 g0 P. p. f+ M! \. H$ a
  143. double Check360 ( double angle )
    . v9 h, F7 g' R# ]6 }( Y- j7 D

  144. * |8 ^* Z" v% z( z8 x2 _0 Z9 ^% ~5 h
  145. //#=============================================================
    , J2 }& z& k$ k/ Y- Z
  146. 4 b2 A; f' B% i) n# @5 ?/ y4 u4 Y" h
  147. {
    % R8 M& f# m: y

  148. ! x! @8 j+ C( v( G  L
  149.    while (angle < -360.) { angle+=360. ; }
    - w! a0 Y# W/ H; M
  150. ; `/ `3 \. ~% c
  151.    while (angle >= 360.) { angle-=360. ; }. @8 |7 W* W1 }  {* G: `6 z% H
  152. # f& C; T& E$ T/ y0 n
  153.    return (angle) ;; r3 j' J9 V' W; j1 [* ~% s$ R' x; F

  154. # V9 Z# `: T( U9 t
  155. }6 j3 I+ ?2 o9 `( D( L. t
  156. " @! b  ?$ i  ]- }$ M0 y8 W
  157. //#=============================================================
    3 ~: r4 N8 A7 r0 ]

  158. 2 `+ U- d/ w/ i
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    6 F, ?1 y) g. _* i+ {& q

  160. ' ~; h+ \- W4 l' g% u/ B
  161. //#=============================================================9 t  B2 S5 e  y& O

  162. / A. x4 v- U! C( Y
  163. {
    / F' u; s& u, `

  164. ( J3 E/ L7 Y4 @) ~1 h8 {5 ~- A! j
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }! Z" W3 i" A* m- S! v9 I' z& B
  166. ! Z5 _% I! E  ~; s$ K* v; G1 N
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }) h0 `  R* j: O  O& E& {" h! l
  168. / v# u* N, W% m5 [6 y+ Y
  169.    return (angle) ;$ p  `/ v$ |* \" ~8 j' V/ U) ?* \
  170. - D* |/ J3 L. g: l6 k
  171. }
复制代码
. q" A0 T; |6 C  M
以下为摇篮5轴计算过程代码
, N+ i8 h; G7 ?) I/ L+ w, m
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);+ M- Z$ R& F# I5 k* b4 y7 z
  2. : G, i. g+ f' O& Y! X
  3.          j=0.; B1=0.; B0=0.;+ i8 M4 N1 s7 ~
  4. 8 X; A0 U6 m5 w5 Q" w
  5.           if (EQ_is_ge(i,0.)) {
    " G/ t/ o/ j3 n3 ]/ y
  6. 9 d) p% j- H9 B. z
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }5 x& {  i% z, K
  8. 2 R# F4 V. t  Q
  9.           }
    * `  p. C4 ~" t4 m* \" Y, K6 Y" @

  10. 0 P9 o; f) ?' N* C
  11.           if (EQ_is_lt(i,0.)) {1 ?6 H. d# ?% s& I; r
  12. 7 p. U+ v0 {$ x4 ^
  13.              if (EQ_is_lt(k,0.)) {  |; ]5 C& ^! p0 E, |
  14. ) w" _+ S" W/ f9 J7 s4 I) d
  15.                 B0=atan(i/k); B1=B0+PI ;1 v/ X' S+ X: p* R& f
  16. 0 S/ B7 i/ d" s9 @8 X% \6 v
  17.              } else {
    : B3 s2 h" g0 v6 G- S* x6 ^# e
  18. 9 L& s, @+ d4 ]
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    7 z/ f8 W' z) B: v5 k( j

  20. 7 v. F) V1 V$ `1 o
  21.               B1=2.*PI+B0 ;- c. H3 ?0 Y2 ?3 P/ {9 H4 Z
  22. * H3 C3 f  ]( q2 ?, `
  23.              }
    6 x/ C3 H; I" t! Z6 a) S$ {4 X, v6 ]
  24. & E% o. x2 Y3 }
  25.           }) K, l. Z7 w4 ]/ h1 |& u5 u% ], L
  26. 1 G! P) ~6 r) k6 }
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ( W0 d  A4 Q$ r6 K% d5 A- C' t& Y! c9 b

  28. , q$ K1 K, ~& ]- z
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));! s; ~7 L, e: V+ _7 _/ g; ?

  30. . M4 |( @; j# y8 q+ i; t0 Z
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ) N7 M: C/ H% b& i" D

  32. " u' a$ S. w8 u
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

% O3 q/ t3 |; s$ g; r% U$ D1 r: D通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
3 ?% w- t# h7 p
; R; i/ t3 M' D  R" r; n& ~ 640.png - b- h- t# G$ p1 J% R
测试结果:
4 J/ w! U: v! H5 D6 F: p2 @$ A 6420.png * \& Y  \7 T! T/ @& o
0 K- j9 s, G+ e( }/ {
反向测试结果 6410.png ( L/ i6 L+ c( F- T7 R

0

主题

24

回帖

12

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-15 21:31 , Processed in 1.957245 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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