找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 433|回复: 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);! ]+ S5 @  b6 z! ?2 i4 p
  2. int  EQ_is_ge (double s, double t);
    , u4 N( O% a0 ~* N2 W# m1 o
  3. int  EQ_is_gt (double s, double t);! r: A* R! O4 J% \, Q+ u
  4. int  EQ_is_le (double s, double t);6 j0 l- e5 _8 Z# P" h
  5. int  EQ_is_lt (double s, double t);
    ; a& X$ [' Z, Q% r4 m
  6. int  EQ_is_zero (double s);0 K5 I* |( Y9 G: H
  7. //=============================================================) G6 }. _2 L5 r! J+ q; K' b& l
  8. double ARCTAN1 (double y, double x );2 K% d% }5 V9 ?, E8 H
  9. //#=============================================================! f' x8 l$ @! }( d/ {7 P+ d
  10. double ARCTAN2 (double y, double x );2 C. V' d% c( V' r' w
  11. //#=============================================================
    8 B+ x7 a: d6 ^1 T: t
  12. double CheckConst ( double angle, double constvar  );" L# J! }4 ?& I" T! s2 d0 T8 p' U
  13. //#=============================================================8 ]7 X/ J7 K( t) y) j" k, D4 e
  14. double Check360 ( double angle );
    0 A- u2 Z. t% x$ n
  15. //#=============================================================
    & o$ [: K! d* U6 g' |
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );/ v, b! C  y9 i$ H' B4 k) L: i
  17. //#=============================================================
复制代码

- ]$ i* {: k2 e, z" N' Q以下为部分源代码,用于判断,计算角度等
0 H  ^. [; C+ l. @+ ]+ U
  1. int  EQ_is_equal (double s, double t)
    2 ?- _" m2 I5 h! O1 A8 O

  2. , F. ]0 b" c! F/ t1 J2 U
  3. {
    ) b; w7 ~& {" F+ @' S0 c8 e

  4. - B: [: l# ^" l7 _2 H& G
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }6 |9 ?; z' j* g' f" _

  6. ' }/ @; I0 Y) k$ `+ ~
  7. }4 \* n! R8 f, [4 u7 E
  8. * r1 m# |. D  O! j' W
  9. /***********************************************************************/
    2 }( b7 _; y/ @1 V' @

  10. " |$ I! u% Z/ e4 B# X! N  t
  11. int  EQ_is_ge (double s, double t)
    8 k1 _' P' V3 b. S# T9 P3 _
  12. 5 Z0 O. g& E1 g
  13. {3 B; f" A3 |+ l6 \9 @

  14. / \* D# j, o/ y( H! K! `  B  F: C
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }. j/ e$ a! R4 v% U

  16. 5 D. S% ^: `! `9 p8 c* X
  17. }
    # a4 D$ J5 d5 j$ i1 E0 _# @5 a

  18. 4 Z+ r) h: _7 x+ _( e  [* L) e# h
  19. /***********************************************************************/3 u8 p8 `/ I' Y+ C* F- ^1 E
  20. $ I$ J, X% C! Z' Q- G) `
  21. int  EQ_is_gt (double s, double t)
    , c" v' ?/ y, ~; B$ i, E+ V

  22. : t- m% k9 X. v! C9 Z; B: G- ]
  23. {
    + j2 p5 j/ t; N1 x. V+ B; L/ E
  24. + U, z& z% K* G& S, O
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    . ]% E+ U+ D) X3 m1 y
  26. & U$ ?3 w, w" y8 r/ p
  27. }
    7 Z- D4 |, M7 j
  28. : S5 |  K$ m) W2 r+ J, ?& R
  29. /***********************************************************************/
      D$ j7 K) T- ]6 y5 A. c8 B& }3 u

  30. 7 l7 l; I8 b5 p! ~2 o# O, Y
  31. int  EQ_is_le (double s, double t)  F4 R4 x; l5 ?$ Y' ~

  32. * D+ W0 M$ X! B/ t0 S
  33. {* u2 y2 z7 j5 f8 ?4 @! X, j

  34. 4 X+ S0 x5 b; c8 j& N  X5 }
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    " Q# Z$ s4 Z1 @/ r2 _8 J9 R3 J$ @1 D
  36. % n- ?) {* ]5 K+ ], n3 l8 @
  37. }3 _  V! a! M; l( j* H
  38. 0 a) ?( {$ {4 Y" n7 \7 C6 J# C, [
  39. /***********************************************************************/
    2 b5 Z) Q( E# A$ ?6 A2 x8 \- i+ z
  40. + Q) o" O+ v, c+ ~$ C
  41. int  EQ_is_lt (double s, double t)
    0 j- k. i) C# H" u  L
  42. / P7 r, W( d8 _& E$ h
  43. {! e& |' Y( v" {- t6 w

  44. % ?- X) Q+ Z5 w
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 ?; v7 I9 e8 x6 y

  46.   S+ g/ E. h1 n/ g( |7 ?( s
  47. }
    + \; p6 ]9 U! M0 b; |8 j

  48. # W+ X$ c( R4 Q5 `
  49. /***********************************************************************/
    5 j' H3 ^+ \6 g7 t

  50. 1 J; @# _3 A- k' S. X& D* M
  51. int  EQ_is_zero (double s)) J/ `5 Z! m2 Q

  52. 7 F) v  ]  L* B' z2 D
  53. {# P* _1 p) Y  d5 C% I5 s/ E9 N3 C

  54. ( ]" D8 _- [, j" p
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ! r& D2 h5 Y2 s6 `" a

  56. ' b2 ^1 K) t3 p  r" f" r
  57. }
    " F0 k6 |# m6 |0 P6 U8 l) {

  58. ; q  p# S& @8 s2 g6 z
  59. //=============================================================
    ( r1 W3 b# M1 s# |: Z; `
  60. + x& Z) T& G) V. T; b4 N7 f0 j. s
  61. double ARCTAN1 (double y, double x )
    * I) f$ M) w, X" M; F$ z! l9 _

  62. ) A7 A* l4 x  v% N, o
  63. //#=============================================================7 u+ f: Q- B3 a& m. {$ d% v
  64. " ^+ \0 I' V8 Y( _6 G) A
  65. {% ]* d2 F9 x' ?4 ~; d7 x$ D8 M

  66. $ B& m+ W# {4 |
  67.    double ang;9 Z- G( r" S, i7 B2 k2 Y& D3 i
  68. , a6 s+ O9 q7 {5 r- s: e( w5 e, R/ m
  69.    if (EQ_is_zero(y)) { y=0; }" f5 E+ r3 h6 h
  70. ) k6 I8 U1 z3 `! ^
  71.    if (EQ_is_zero(x)) { x=0; }
    # B4 k/ x0 `. F( v; F  O8 j

  72. 9 {3 F+ P4 ~& L6 R" m0 s, w) b
  73.    if (y == 0 && x == 0) { return(0); }* a7 g5 }, W# J! I0 e' k
  74. " B3 M6 s6 I) t9 x
  75.    ang=atan2(y,x);( i' H5 J- c: }6 Y5 x: I: l

  76. ' I+ f" K+ s9 c# t6 T7 v
  77.    if (ang < 0 ) {4 U+ R9 f  u  F* }: Z% _9 M8 G

  78. & C) L0 r: t" s8 S$ `
  79.       return(ang + PI*2);
    8 a' W/ C6 A5 T' Q) x3 F' I: Y1 t  i0 M
  80. 5 U! m; \4 r0 X/ Z  x* h/ _# n, s
  81.    }
    ; E* g6 C2 I# F  R) b( B5 O2 r

  82. $ g$ q% p# n! ]3 K
  83.    return(ang);
    % C1 e! T7 Y. X
  84. % r' ?0 N2 s7 e* E$ Y
  85. }+ K) q* t! r* O2 I6 h3 n0 z2 o

  86. 9 M/ Y4 k2 O; F: F% m
  87. //#=============================================================
    , T4 B2 V( ~+ B6 h

  88. . c& p5 f" Y3 G! l: \% X
  89. double ARCTAN2 (double y, double x )
    * q. w0 Z: K! T& `7 ~4 D

  90. 3 G# q) b! m$ W% t) G' m* E  R
  91. //#=============================================================7 W% o: {- o  K% T' O% S/ G' w/ w
  92. 6 F) f/ ]4 Y2 |/ ~3 l
  93. {. Z. [  _- E9 Z: M9 D. s4 w8 z( @
  94. ' ?4 ^1 P7 z& C/ g: Y- i
  95.    double ang;& @) g, G: Z; Y* D" u3 h; e! O

  96. / L& p, i( n% d" V0 T  E3 j
  97.    if (EQ_is_zero(y)) {
    : F, q9 n! T% z$ }
  98. " `" Y; W3 \2 q& i$ ^8 ~6 l
  99.       if (x < 0.0) { return (PI); }
    1 Q: ^5 D; w0 `$ }. i, \
  100.   p1 N/ L8 f) A( H. E
  101.       return (0.0);, B/ t5 o. B' H: r
  102. * v+ ?2 Z0 I. j' Y- M) p# b
  103.    }
    : U5 ?8 e7 w+ L9 O, d# z  ^5 t

  104. 8 y+ e. |) D2 |6 u6 z$ s8 p9 a6 M. e
  105.    if (EQ_is_zero(x)) {
    5 p- ?5 @* D7 S7 k) ?6 ^7 }

  106. : J4 J. u, q3 r' f8 v& {
  107.       if (y < 0.0) { return(PI*1.5); }
    ' R0 c8 }$ V: r) x- U4 W0 K3 `

  108. 6 B' W, R5 i' \( o' h+ v
  109.       return(PI*.5);
    % U; o( }3 v$ }5 L( X6 m. D

  110. ( M% v" D/ z0 C5 @
  111.    }
      T5 s# P, O7 @. k# A

  112. ' _2 q( t8 C0 V* H0 u
  113.    ang=atan(y/x);" e+ O) L1 j' _" H! n$ ~) k' i! v; c

  114. 7 y% l- i# p  ]
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    $ T( R, T4 ~7 v; w, e
  116. ; x' U+ S+ k! p; r; s! R% z
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    # _9 M5 J* P% a( e

  118.   V* F( T$ ~. C% f
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }$ V- k+ i" m2 F; y
  120. & h. m' S* K" y# n1 {
  121.    return(ang);: Q- t- b$ v' d7 F, r: S" e
  122. 7 q0 f7 X* X0 ?
  123. }
    4 U' d, m& m# E$ H! Y
  124. 9 F% ?: @' G: J  z' g; W
  125. //#=============================================================6 i0 d' R4 L8 y' z- d$ n
  126. ' U/ I( B% O. j* r0 X, M
  127. double CheckConst ( double angle, double constvar  )
    % y. Q* A' J- Y7 F) Z

  128. 4 ?7 a! y  f8 G
  129. //#=============================================================: u3 Q; n+ N9 k

  130. 3 }' e9 r; e; K% u* O
  131. {
    1 }0 S5 @7 [6 U; v$ @

  132. - q2 I8 G  L3 n" n' O$ ]/ O$ a& s! v
  133.    while (angle < -constvar) { angle+=constvar ; }
    ! b4 T/ I4 @* J. o; y

  134. 5 t2 P. }- Z, q0 U6 E" y
  135.    while (angle >= constvar) { angle-=constvar ; }9 ]0 \  p) p4 V3 k5 h/ X
  136. / H4 p  A2 f8 P* u1 c
  137.    return (angle) ;
    : L6 ]2 ]9 ]. }' E" l+ Z' A3 ^
  138. " _- r" H) J# k7 v, T9 p! x0 [
  139. }$ K( t( G  z$ h" |4 ~+ U4 ]- k

  140. / ]5 M9 F  V: l* J
  141. //#=============================================================! V$ p5 I8 Q5 z, O9 J, t- P+ f

  142. $ Q% a& O- c; s/ u7 r
  143. double Check360 ( double angle )' H/ T" m* \. U( B( U" `
  144. ( }4 }# a& K+ I  b0 X7 `" C0 I
  145. //#=============================================================
    % k1 f8 ^: X! `8 h, {7 ~* [

  146. . B- R5 Q7 L! n4 q1 \, e+ E, _
  147. {! U2 J1 u. x* E7 w6 J. i
  148. 9 T& i( j5 W) w  h. o( N3 M$ y, i
  149.    while (angle < -360.) { angle+=360. ; }( o% Z! W4 q# I; N

  150. 6 f! k3 _& ]( m, c$ m$ x- }
  151.    while (angle >= 360.) { angle-=360. ; }+ @0 D  h& J& u: s
  152. ( Y1 \, e) Y( ^3 E- P
  153.    return (angle) ;. w( S) f3 |# V& C

  154. " L- t: ~% ^% ?9 ~  c
  155. }. w5 w' G5 X/ b9 ~4 V9 z0 i& b" n9 N
  156. " s! a9 n. Y* ~+ h% j7 }. N! b' z% k
  157. //#=============================================================
    0 _% @6 V6 R. E- L3 L" R9 x

  158. - M& t  [: s3 m3 ]; L5 C/ _
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )0 ~4 x8 Z  C, D0 K6 @* p

  160. - V* }/ x# |; M  W3 E  x0 l
  161. //#=============================================================
    5 M- d6 O' Z8 @& h9 K& X( \3 G
  162. . B3 ?7 N2 l$ C) \  E- y
  163. {
    ! B+ h# Q; E  |, J  r

  164. 9 K5 t( S! ?' u5 g/ b% E8 V9 c
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }+ n$ x- \- B( Y

  166. - ]" |/ r. V$ h3 ^6 Z
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    5 L7 C1 g9 L7 t
  168. + S& i2 s3 M, _
  169.    return (angle) ;$ u/ o, D  v+ a" n  t4 m2 F
  170. 7 ^# p  r8 I* b) F5 w, `
  171. }
复制代码

% M& ~/ a7 t7 B以下为摇篮5轴计算过程代码
0 D7 ^6 ]6 H  G8 t
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);2 |4 m1 t' b0 G
  2. $ `$ ^0 Z# D0 z0 V# C4 y
  3.          j=0.; B1=0.; B0=0.;
    & ?% o* v5 \/ O) h4 |3 p6 I9 I7 K

  4. ; h7 N. X5 t' a1 c( z
  5.           if (EQ_is_ge(i,0.)) {, v3 ?8 d2 l, l% U6 W
  6. 3 Z8 G( u: D' M
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }) [- A( i7 g2 c; O+ k1 L, n8 M
  8. 5 r- h; E1 q' h! |- F7 k) J
  9.           }
    5 j9 |2 c) X4 d1 @/ h8 q8 G5 R+ L
  10. % l/ i! }; s8 {2 p: X- G6 I
  11.           if (EQ_is_lt(i,0.)) {% [& C/ @9 @: L  D6 j& Q. r

  12. . @* p& h$ \4 ?. j& j8 S
  13.              if (EQ_is_lt(k,0.)) {
    ) e& K4 Y( q4 z# X3 R
  14. 9 p- [5 S9 C3 l& f
  15.                 B0=atan(i/k); B1=B0+PI ;3 b# W, A4 C- b, r: n" C) @
  16. % ~: [; D  U$ p/ T) j7 {  `6 k
  17.              } else {
    , t! d& d. k2 e2 l2 ?7 Z3 }' P
  18. $ k8 l2 x) i/ Z- h) q
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }( {7 d6 A% j  C: [, }: e
  20. 9 ^  }% T) `6 r4 [7 @( c/ Y8 X
  21.               B1=2.*PI+B0 ;
    ( K2 S/ T1 S4 J7 x

  22. / i& l" U7 s1 P1 A
  23.              }
    ' j6 k/ ?1 s& [, F1 \, s
  24. 3 O0 `9 B5 y% T+ t. O$ _
  25.           }
    7 J) V( o2 q' @' u1 B

  26. 9 y1 b( d0 o7 p0 f2 j. y
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    + Y8 N1 b9 c. b; C  c

  28. ! j  _, j- Z# L: a$ m! `1 }# S
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));2 _$ D, R& a- _3 o
  30. ( g; f4 i% |3 \
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;- M, X: K2 }" ]0 o
  32. ( c, E) x1 }1 _# T7 L
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
# y- c5 g4 o3 D5 n
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
1 M, f( c7 c- e1 V4 q6 K
7 D- V8 p- q: a 640.png * d: g' F8 Z# c0 ?% Q
测试结果:
+ }  P  [, }) z+ f: i% G 6420.png 4 d4 p5 s9 P8 k; f" E* [6 X
0 `7 z0 n% {* v! X# n) V; q: E
反向测试结果 6410.png - p4 @9 p( h& g) `% Y% b* y  S# ]

0

主题

24

回帖

12

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-16 05:47 , Processed in 2.128479 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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