找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12536|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    # G( U2 a1 P& c/ ?
  2. int  EQ_is_ge (double s, double t);
    , {. N3 e  p! B- {  s! |
  3. int  EQ_is_gt (double s, double t);
    ! D% O6 l* W5 [+ u4 V& E
  4. int  EQ_is_le (double s, double t);; a7 Y5 J9 v  F! T
  5. int  EQ_is_lt (double s, double t);
    9 G! y7 o) O- }* b6 J0 b
  6. int  EQ_is_zero (double s);
    4 u+ U/ t1 T# Q1 o# u* B/ k1 ~/ f2 X! k
  7. //=============================================================
    - T7 {% w& l9 U, S
  8. double ARCTAN1 (double y, double x );
    * y, O+ {" _9 c
  9. //#=============================================================1 @1 \8 c* `; g9 h& H; F
  10. double ARCTAN2 (double y, double x );& t0 Z' u, N: k1 e
  11. //#=============================================================2 U" a2 b+ N5 z
  12. double CheckConst ( double angle, double constvar  );
    / R" D8 l# Q( i0 m- y% f& G
  13. //#=============================================================* c5 v3 M/ R! w
  14. double Check360 ( double angle );
    $ P) ~- I# j$ z" \* \* }5 Y: {$ I
  15. //#=============================================================- W( Q& K/ h- G9 F6 d& E- \" S
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );) Y8 h, P/ R2 H% E/ ~' K2 b3 a9 C
  17. //#=============================================================
复制代码
5 H# I0 y3 v  L4 I+ j7 I4 F. z
以下为部分源代码,用于判断,计算角度等, t- ~0 j  Z9 T& D& U. _
  1. int  EQ_is_equal (double s, double t)5 F  Y1 F: }  G) s8 r( @5 C; W
  2. " Q5 b) i( X5 t/ l# |4 q
  3. {
    9 Q" m+ j. K* \, x" v' x
  4. # f* m, D9 a& q% X9 r" t& q0 r
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }% L" r& h% Q% i% }9 B* [5 L
  6. + w2 n6 `/ K' i7 {
  7. }
    $ K5 v  W2 T" b, I9 a  ~
  8. ; I; I1 K) {2 }* I' F
  9. /***********************************************************************/
    & Z9 ~4 W8 D0 E, \

  10. : i/ n3 X) o8 q, Q/ r5 i
  11. int  EQ_is_ge (double s, double t)3 I2 E, c+ L; h7 D
  12. % v+ i: f0 ~( w3 O' t
  13. {
    1 y0 E& f, Y. O5 j) X0 y! b

  14. 7 `2 k- f+ N0 A& `% d- I
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }6 y; R8 g; q  l/ W8 L. i
  16. # s4 r3 I% r. Y4 ^: u  V
  17. }
    - z7 b7 `9 b( ?4 B0 P

  18. ( U/ Z7 t1 a/ c9 @  ~- ]
  19. /***********************************************************************/
    # w( i6 n4 p. }

  20. : S7 i1 E: K! q) Y% ~1 a/ Y
  21. int  EQ_is_gt (double s, double t)3 {1 D8 R# k9 b
  22. ! Z+ S6 `0 T5 W% ]6 Q* o
  23. {3 _4 c0 `& g/ g

  24. ' u4 K1 L1 U. q1 I$ z& C
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }- t) U& K5 w' \+ s5 F. ?
  26. 2 Y& A$ e( W" h
  27. }
    , P: ~  Y" |4 d$ Q$ [( w% E
  28. 3 W& `; v4 F) q0 `1 G
  29. /***********************************************************************/6 N$ ]/ U1 n: e5 f6 g/ i2 i! }# V

  30. , [" C6 a( g: r, I. j- m* c* d
  31. int  EQ_is_le (double s, double t)# s# \# M+ U" q$ ?

  32. # T. K' J+ j: w6 ^  J
  33. {
    $ U9 \, h! i9 Q: m0 X. k: V& A

  34. ; k" \/ ]2 x* ?( s2 q
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ) v, d& S& p. i7 B2 K. p$ h
  36. - H# Q5 l& X$ |6 l! v0 A1 J
  37. }4 K& ]$ A' E9 F7 r

  38. 2 j/ L# n1 I' w& ?; ^" v. E
  39. /***********************************************************************/
    8 c$ A! N+ j* \/ y$ |+ I/ O" J
  40. 4 r& d. i$ E+ Z+ I, Q  I- V$ w
  41. int  EQ_is_lt (double s, double t)& |- {2 m& q/ }4 m. J/ y

  42. & J* j  t0 }: }+ p* y* v: k- L, n& M
  43. {" g( j1 {( [1 I6 k$ C

  44. - D, W& E- j7 t% P( Y2 \
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    2 h) j  |0 M3 m$ L8 L' ?8 I

  46. # v& ^7 m7 m0 n
  47. }
    0 ^% z5 e& K2 T8 x0 H% R0 z/ l

  48. 1 ^# c3 L  V0 v
  49. /***********************************************************************/
    ' k0 r' r( S# N# h; L* V+ k& G
  50. 1 u! Y  g0 t& e8 |- ?
  51. int  EQ_is_zero (double s)
    ' k( I9 w7 j* u; I: b3 A* n6 o) k% U

  52. 2 ]* M& k, I. L  s7 k2 I
  53. {
    / Z$ I0 x7 G- c' X
  54. " i0 J+ W; H. P  _
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    : o; s7 h2 {# M, R* h3 C+ o, J" g1 j
  56. 3 P3 y* v! o% \
  57. }
    0 Q+ j7 T- Z# `' h

  58. 4 S3 e# |3 Z/ t, {2 P( F4 Y9 a" H+ E
  59. //=============================================================% _+ H( K5 E9 R( [

  60. 6 K& u. _& g1 K! {
  61. double ARCTAN1 (double y, double x )+ h+ h9 N/ ^% |$ v
  62. . Y1 o+ ?  K$ |- A% L0 ^4 O9 U
  63. //#=============================================================
    ! [  S2 S$ ?+ F5 E2 a3 @% W7 J" C

  64. 0 b5 t6 O. P# G  j# b& l; m, H
  65. {
    & B3 n( I0 a* w( d3 V

  66. 3 {0 R$ |7 a( W0 v' r1 G/ `, y
  67.    double ang;- k1 t5 f  t, S( ~
  68. 3 S3 E6 G2 O. f: d+ a0 _
  69.    if (EQ_is_zero(y)) { y=0; }$ j* A9 j- C1 @

  70. / [4 D& v% D! @! Q% A( r5 v
  71.    if (EQ_is_zero(x)) { x=0; }3 _- r# V* d/ Q$ C3 }

  72. + m. l9 X6 B  j1 M1 ^2 U& q) {1 Q
  73.    if (y == 0 && x == 0) { return(0); }. w) k: X: ]* C! Z7 ^
  74. ' |# Q' }# p3 w% |2 I# r9 m% r( O
  75.    ang=atan2(y,x);& o! p. |: q% f% C; |* ?* B! r5 M

  76. 6 c9 B' E7 f$ f- N% u5 j) F4 |8 `
  77.    if (ang < 0 ) {6 p& m3 Y) r+ H( J

  78. , p/ b# j! l0 ~  I1 ^5 \, D% `3 r
  79.       return(ang + PI*2);
    & {* W9 D% O  C! G$ Y

  80. * t% O, A* u* S% D/ A
  81.    }
      E( M& g2 f. J1 j! l( G' r

  82. 7 l# _2 a0 J3 P% v" m3 l9 |
  83.    return(ang);3 b; @# ~& T* ?" }0 Y! W

  84. / R8 T) `$ N$ D% l* i& X. u- v
  85. }
    + U, u4 d/ `# H( i( ]

  86. ! Z; u# H/ ^% k4 c
  87. //#=============================================================
    ) v! }" R' M0 ^  d

  88. 7 C/ v$ x2 R" [$ M
  89. double ARCTAN2 (double y, double x )* y: L) j  m+ J, [% G
  90. - I- q2 v! G* O, B
  91. //#=============================================================
    1 ^8 l4 j+ h: a) z% |' z; T
  92. & u1 m6 J5 T6 {  l. Z
  93. {5 y2 i- N$ s* {$ q. i' }$ C2 O9 j
  94. 6 v  J4 z, Z$ E! J# \1 s- O" K! ^
  95.    double ang;
    $ J) @6 Q5 M% [

  96. $ P/ O* ]" U0 K/ z$ ^
  97.    if (EQ_is_zero(y)) {5 ?1 r& v; q% C, x* Z
  98. : C/ T6 b  J' A' G
  99.       if (x < 0.0) { return (PI); }
    * }+ b1 Z, Z- |. U* U

  100. 0 Y3 x2 u! b+ c' v7 K$ a
  101.       return (0.0);+ ?8 ^& J7 B2 o
  102. 6 a. w8 b8 I' R
  103.    }
    0 L/ S. {2 ~2 T. V# `" l
  104. : P9 a& |8 ^5 H
  105.    if (EQ_is_zero(x)) {
    0 K5 M0 b2 h. d5 v2 M' `

  106. 3 n' q7 K0 z9 H
  107.       if (y < 0.0) { return(PI*1.5); }
      N0 g8 Q8 l. l+ F6 T  Y

  108. ( f1 y6 y( {; A8 U* M
  109.       return(PI*.5);) k; o. B+ N& @2 @' r+ M& W: b
  110. " r  V/ c! @* Y- T
  111.    }. |  {  i- N  q, D
  112. 0 h, ^: Y& n) K6 L
  113.    ang=atan(y/x);+ \' w, R$ G6 \1 Q

  114. ! S" h' ~( m% R* v) h1 Y$ o
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    4 E) m' Y* d, }/ `/ [& ]- `
  116. ( a# Y1 T! L2 R2 B$ j' ^7 l; f+ x! [
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }) I, q+ V+ u: X* @! S; a% t0 x
  118. . d7 R: Q: `( Q
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    0 O. P3 |* r5 D3 ?: y6 F( Y

  120. $ x, \, H# j! ]6 S8 [2 r
  121.    return(ang);6 c$ s0 z  m2 x9 m/ F" w1 k
  122. * A9 \0 w% a5 V% i- f
  123. }
    , @5 |+ U7 Z8 C+ s3 [' O
  124. ! _* V: g1 w+ i/ ]- Q
  125. //#=============================================================6 J: d, [5 l! N

  126. ) _  {( p3 }9 G; S4 q
  127. double CheckConst ( double angle, double constvar  )
    $ L- f0 n, b0 i* l; d
  128. ! N2 \( X6 [3 o: }
  129. //#=============================================================
    4 Y* n( k# }* p/ a
  130. , g( o% y) K2 s: x8 R0 T7 q8 {
  131. {/ w/ N& \1 d) Y# j! I

  132. ) q9 r7 d$ ~, {" N  x! _% @
  133.    while (angle < -constvar) { angle+=constvar ; }
    " h9 R2 W, |5 H* y9 f

  134. 8 k( {) }4 n0 N9 f  A; N! B
  135.    while (angle >= constvar) { angle-=constvar ; }  T9 d; f# O- C5 Z7 h) ~  I
  136. ' |0 S% f6 l1 O6 n1 K' Y1 b1 A3 Q
  137.    return (angle) ;, w! |+ V# D* y2 m- K4 u% \

  138. " d. y# S& G0 h( x, I. B2 I1 H
  139. }' ^3 a  M) h+ f

  140. & x* V2 j$ f6 c% C
  141. //#=============================================================- X+ e3 w# |! ^+ y

  142. " f: g$ a1 q; p- v
  143. double Check360 ( double angle )1 V8 @6 B" O8 e0 L- ?) Z# y! Q

  144. - v4 z) k* u$ e" h0 A. h. K8 {
  145. //#=============================================================5 \' W$ ]( q6 ^' e

  146. ) G+ w! [: c$ v
  147. {
    # h9 `4 W3 k7 |. ?
  148. / V+ Y0 @3 a( E8 b) t
  149.    while (angle < -360.) { angle+=360. ; }
    4 `& z$ X- S" F$ U% g' I

  150. 6 a7 ^9 Z( X0 y5 x, Z
  151.    while (angle >= 360.) { angle-=360. ; }1 l1 U7 `" |$ g
  152. / J; v. q+ J% ~4 `0 E7 J" J
  153.    return (angle) ;
    6 b6 ]4 q& d1 G' ^0 n

  154. * |2 U" R3 L6 @+ B+ [$ G1 h- Q
  155. }+ T, h; }7 X7 a' j
  156. 6 s" E1 Y0 N8 S! t3 l- V& G
  157. //#=============================================================: B$ a) y9 x$ J9 n) ?; B% v/ L
  158. ! n$ J; S- U- m' |7 e
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )5 D& X# q$ [1 H; ?
  160. 4 f' z* a& ^3 _+ X
  161. //#=============================================================6 o6 }: A6 k6 P& s& u9 T  h" h

  162. # I7 Y6 r' S& l6 w  q
  163. {9 \7 l  Z5 c2 }1 i" T- j! a

  164. 7 f  f7 z3 A3 K  W; `! t' E' p% Z
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }$ r3 V' F' x9 y4 ?3 T
  166. & E6 \2 P" S; t
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    , N/ [! e# h# S2 _3 m6 }9 M

  168. 2 b. W; a% v6 ?$ E  A
  169.    return (angle) ;( h4 @& R, E) x/ ]/ `
  170. 2 A8 _& A6 f( C# ~/ O/ y& `+ L
  171. }
复制代码
4 q4 L9 W+ ^' X9 Y; y3 S6 ]7 {
以下为摇篮5轴计算过程代码2 s, K& I" f# w/ b
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);( w2 \0 s$ r# o  l* L
  2. * m' o9 i6 r$ p! j1 H+ N
  3.          j=0.; B1=0.; B0=0.;
    0 i  T5 Y% R( ?# y! E" u' C

  4. ) ~+ e$ u. E" E% Q4 q. ]0 F
  5.           if (EQ_is_ge(i,0.)) {
    1 ~3 F$ H9 d( g  y
  6. 6 q, {# H2 C9 C! `' X+ q
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    8 y$ h4 p9 G( Z. u3 k

  8. $ r* v6 N; _( g- e) [
  9.           }; Q! y/ L+ N9 |! T; p

  10. # R* {. |& H( m
  11.           if (EQ_is_lt(i,0.)) {
    ' C" Z- f. J- S2 h3 {* p
  12. + ?; `' u+ l1 {( @, v# \* J2 ~8 w3 y
  13.              if (EQ_is_lt(k,0.)) {
    & u# \; y' N* \! \1 }( b4 }
  14. - k2 }6 U5 V& t1 [+ b" _
  15.                 B0=atan(i/k); B1=B0+PI ;9 n9 U# \" c! |* i' h% s( {

  16. 9 V8 w8 h; A1 L3 v* u
  17.              } else {" u" l2 ]4 x0 [, _0 t1 P0 ?

  18. . d' W& [+ F4 u
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }) }, n. q$ J0 ^" ?

  20. 3 Z& E% K. f# Z  T, p6 y
  21.               B1=2.*PI+B0 ;8 w! B+ R8 {6 u
  22. 3 N# l! C, E% b3 l' Q
  23.              }
    : W/ Y/ H* `3 {

  24. ' l2 A$ u8 I$ G  Y4 @8 b" y
  25.           }
    " a" c0 E/ R' A- T' W
  26. 4 ~4 @& t, y* i7 g/ S( k
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    7 H# ~6 Z2 ~/ R+ ^% G

  28. " L, g" b7 R. S7 t* A* t
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));! W( a+ x8 Z) x  n. h3 Q7 `! o1 o

  30. - l0 }! a1 Z5 T. k% s- A
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;; Y3 [5 [) ^1 M5 r2 J. [
  32. ' V& }& j0 C4 P+ N
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

2 l& v6 }/ H  N" c+ x# e" ]通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。8 ^8 Q; X3 }+ c# Q

& ~" J9 B6 G8 C- p1 V; n! a0 s 640.png 0 S# n9 p" o1 B! s& I; B
测试结果:
4 H$ v: z- u( u 6420.png 5 Q  T3 W" P' N+ ?  d" k
- `, F% r% {5 I
反向测试结果 6410.png , ~3 v0 a7 b3 v1 x

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

354

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-10-13 06:17 , Processed in 0.187822 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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