找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7062|回复: 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);5 E$ T* E, `/ X! ?) T
  2. int  EQ_is_ge (double s, double t);
    # S' S" h/ l5 H" O
  3. int  EQ_is_gt (double s, double t);/ c6 ^6 ]* N+ l6 }% n! @" W
  4. int  EQ_is_le (double s, double t);
    . ~+ Q, O6 P7 s4 u& `
  5. int  EQ_is_lt (double s, double t);
    ) P: _% k- w5 f" x2 y
  6. int  EQ_is_zero (double s);: f* X* v$ J0 X5 D+ f6 r: `0 V+ k
  7. //=============================================================' F) c8 U" r% I
  8. double ARCTAN1 (double y, double x );
    + V0 q8 k$ s7 P/ }6 }0 m
  9. //#=============================================================
    3 K; j" o7 G8 y! O" J
  10. double ARCTAN2 (double y, double x );
    # |, _) T$ z, c- n& [
  11. //#=============================================================
    . z, x. Z9 M' g% V+ Z, b# b2 D
  12. double CheckConst ( double angle, double constvar  );% X# ?# W+ H( ~& l2 W" @% B
  13. //#=============================================================
    + y3 J  H' _% E/ m" x# y% |
  14. double Check360 ( double angle );
    1 l+ T& m# @( T
  15. //#=============================================================
    ( O* B3 D; r; L+ y; G: c
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    0 I% l0 {& @1 E5 T
  17. //#=============================================================
复制代码

! Q/ @+ Q4 Q0 g9 O以下为部分源代码,用于判断,计算角度等) c" a' W% p5 S5 z( d% `2 p! V3 h: J! \
  1. int  EQ_is_equal (double s, double t)
    % `1 j* E# ]8 d9 Y! J1 J* U

  2. ! m4 r+ L6 E$ i9 _7 i+ l& D
  3. {0 {( M( }9 e" h4 q" M5 B
  4. / p: Y& h7 C! K+ W2 R& c
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    1 L* ]5 ~: u  e+ v4 O% i& Z

  6. % C) T8 l* `, j5 ~7 c9 R
  7. }
      I! ]4 O- g* R9 C/ P
  8. * O- n: o5 Q: W+ s4 l' v$ X' E
  9. /***********************************************************************/) E- r( R! p$ ~$ G' L' c
  10. : |5 o  c9 e' j+ y" T/ V
  11. int  EQ_is_ge (double s, double t)' p# ?9 V, K4 J4 K

  12. . \5 l# r2 D4 C+ `
  13. {
    ( f3 l/ `8 `! |# Y, H- W
  14. . H5 y7 K3 q$ ^
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    - F: [. N7 \. e: a3 d+ B* F
  16. " G3 ~4 Z( J6 F9 u; x# B1 {
  17. }. G  f) @% G* D* S9 w. d/ [# A6 \6 T4 C
  18. * n& H( ]3 ], K7 ?" ^! e! [7 y
  19. /***********************************************************************/
    . ^1 c* A1 ~, i) y' `0 i" D
  20. " {+ f2 ^, q: c. I2 O8 [9 j1 k
  21. int  EQ_is_gt (double s, double t)
    ; s4 ^% t5 ]! ?
  22. $ C9 l' c' B9 b0 _: ^/ u
  23. {
    8 F1 ?. R* H& G' I  Y

  24. 3 l7 e& A4 f- D- h, K
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }% p$ h2 ?& D7 K: u2 K
  26. - ]  f' H1 j( U3 X* J9 b
  27. }
    ! {: d0 v8 k1 A& @. J/ b9 w% {

  28. * n7 Y, f) X0 |4 F/ j) V! O
  29. /***********************************************************************/3 M( X4 l3 ~; H/ Z% c5 b1 l) M7 K
  30. . }5 N( z( i, t% g$ ]: W" H; W6 n
  31. int  EQ_is_le (double s, double t)
    ) N4 |0 T8 m* f  ?

  32. , B6 ?) R* O: M1 t' P
  33. {# w0 N$ r) n4 `# }2 _

  34. , g' O7 l' B# S' a3 |2 p. X
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; p0 R5 A# T% J. ?( I: C+ y! N
  36. / @0 K% Y. |$ c4 D' Q6 Q
  37. }+ k. o$ w) Q5 O
  38. 4 |7 s# Y' w! R2 ~* R3 |5 [
  39. /***********************************************************************/
    4 Q" O0 m9 A* d" A1 J

  40. 1 P* Q; R  X$ V/ X! P8 v0 g+ X: Y' b
  41. int  EQ_is_lt (double s, double t)
    5 S0 O$ Y9 j5 m0 m
  42. 5 v( s  p- ]1 Y2 N. t
  43. {
    ! u" g) I  p- r  ~6 d8 v

  44. 8 h( F% T/ {+ _$ B4 p: K. r: F
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }% Q2 U5 x3 u: F5 _( c! v" |# ~  @8 }
  46. " o) Q  y9 O% ]
  47. }# j7 `: Q  x! r' X
  48. 6 @6 M$ |% `- q# |* x7 ]7 M
  49. /***********************************************************************/. T8 s+ g; W& h, v
  50. 8 D3 j' G/ e% U/ o# Q. {( |
  51. int  EQ_is_zero (double s)) r1 Z$ S; J/ q2 L" W5 e

  52.   z2 d) z, ~& F0 s0 {
  53. {* w# Q6 T3 C2 _0 I

  54. . J8 E: d9 T, r$ G3 ~: n+ D, o0 t% ]
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    . i' `5 z3 _1 i( z8 h" r' M
  56. % Z( j& T3 i5 H1 m& N# j- b
  57. }
    ! h5 J$ \) E0 Y6 D2 x& R, T
  58. . y6 j! w! d+ b! G9 Y
  59. //=============================================================' I8 w: l% u' G1 i
  60. # ~5 Y1 s8 S2 Q  ~+ b- N
  61. double ARCTAN1 (double y, double x )( Z, D' H3 a8 e

  62. , ^5 x# j; ^3 F4 @. `# h
  63. //#=============================================================4 u  B4 ~. C6 C5 X/ d

  64. ; d$ F0 c2 O8 _2 m# N
  65. {. G+ f1 g, I( E" G  s
  66. " t+ R. R( f% }9 N! U& ~% N/ a
  67.    double ang;1 k' H, ~" f" q( b8 h9 ?

  68. ' w; v& J1 }, n+ g8 G6 \4 g+ k
  69.    if (EQ_is_zero(y)) { y=0; }
    * e; K/ z* s; @7 v! [& j

  70. 0 g8 Y5 n1 o- x2 |" m5 F
  71.    if (EQ_is_zero(x)) { x=0; }
    2 _8 S# r4 [3 \# [5 q1 B  m  h- w8 s

  72. : H+ [" G( v  I5 v) D+ A. |
  73.    if (y == 0 && x == 0) { return(0); }  o& p5 g8 G& E5 z5 t. d5 _( u2 l

  74.   [  h% b& m9 I( ^
  75.    ang=atan2(y,x);3 J/ m# n% E0 a& p

  76. 9 a0 ~7 M- V) e7 g! q& _$ q1 h
  77.    if (ang < 0 ) {- h5 b8 o, Z1 m* @

  78. 9 W9 Q" o* s0 f8 Z
  79.       return(ang + PI*2);  g8 C& m( I! b7 X

  80. $ h0 E: g4 M, l2 I7 Q6 F  C
  81.    }
    # P; |' W  {5 k; G" M! O) s

  82. 3 p  h% ~- m# Y4 Y
  83.    return(ang);5 G) k$ e; o1 f1 K

  84. , Y5 C4 G* S3 J  z
  85. }
    , ~3 I8 J6 |7 P/ V9 Y
  86. 4 F% j* u5 O0 v( F+ Z
  87. //#=============================================================
    & `& V: O: ?1 F$ D6 w+ W
  88. / o) ?7 x% h& @9 n7 b
  89. double ARCTAN2 (double y, double x )
      d% g! p, n% H+ I+ v$ z3 f

  90. - {' q4 X0 ]/ z
  91. //#=============================================================
    , c. T0 K, H; m' v. }# y. Z; h
  92. 8 ~$ l! L1 A8 ]9 `/ k$ R
  93. {
    & r4 t6 M( X/ C& P! \

  94. + \  V# [( e4 K1 n4 ?
  95.    double ang;, b6 P1 A- q+ G, e* A

  96. ; u% v1 g# L( Q# E8 C
  97.    if (EQ_is_zero(y)) {
    $ M5 u9 A6 M* T$ f' c
  98. 7 G2 n0 v8 s/ ~0 p5 g5 s1 d7 `% O6 J
  99.       if (x < 0.0) { return (PI); }
    ! Z" Z9 A* D# d
  100. " [- b( h0 d3 t2 Y
  101.       return (0.0);) X/ w9 h" A: L+ A

  102. ' K5 w# F# X. O# P) k
  103.    }
    ( k, t) m+ O9 Q) ^$ [

  104. : }& J  N& T4 R8 c
  105.    if (EQ_is_zero(x)) {4 [# E* m. l4 A! L' s
  106. $ R4 j7 g* |) V; t5 L+ I7 G' a
  107.       if (y < 0.0) { return(PI*1.5); }
    3 k2 z+ X' F7 F' }8 R! G* Y
  108. 1 K" ~# H, S2 W6 A# d% X: ^- }
  109.       return(PI*.5);
    8 b7 d9 i/ g+ I& N; [2 q% C, a

  110.   I; r. d* b7 E3 T& l$ F4 T
  111.    }
    7 g+ e( u+ r7 [, q
  112. + X, z( y: K+ V1 F2 I- |  b/ J
  113.    ang=atan(y/x);& |# ]. T  |; [5 y  a: {! z" H

  114. 9 [$ n6 Y1 Z8 x& g/ G1 ^/ j. \
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    $ |' `4 n) y0 d
  116. ; u  V2 J2 r) A* Q
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    " _0 B5 p( u* [" ]( U# P* u

  118. : n9 y" _5 w# f) n7 p
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }; [* Q2 m& |: R( U: c
  120. 7 s: L: Y9 F6 l$ K
  121.    return(ang);
    * a7 n, I9 b9 ?; U- z. }

  122. # f& X* t- e" ^# {
  123. }- B: s( n' q& @1 C

  124. ( m3 B, G+ E% h( F% F
  125. //#=============================================================# u( p, C# Q0 T4 S$ s! S( v; t

  126. " N$ D7 x+ X1 I  {+ B- o
  127. double CheckConst ( double angle, double constvar  )
    1 W6 F7 n4 f" _* f+ F: t
  128. * _7 m4 z# K( i
  129. //#=============================================================
    / F4 G$ O3 r& Z$ q( E
  130. * L& ]. `/ x: O' N
  131. {) o& C5 H- ^0 o) w; j

  132. % N5 R9 B8 z  z$ a. I
  133.    while (angle < -constvar) { angle+=constvar ; }! z# B5 X* Y! q! o' h

  134. $ l" `& A: r1 }- K6 a5 U
  135.    while (angle >= constvar) { angle-=constvar ; }
    8 b, R" b: R4 Q1 O# @  R/ [6 b

  136. # \: Y0 b6 ?: t! g1 z, x  T
  137.    return (angle) ;& V/ R! H  L) M8 R) r7 \
  138. , m3 h" `! [( S! D; b# n8 A
  139. }; _% e. o& P* B" r

  140. 0 Q# z1 Z' b3 j3 N; q
  141. //#=============================================================
      r2 y! e! I6 J4 `& K
  142. 7 R. r; B2 {( w0 s# F0 _' z+ e" X
  143. double Check360 ( double angle )
    / {0 `" Y. p& N( `
  144. 1 e. T2 m6 B! Y1 [8 O
  145. //#=============================================================" q6 \, ~) }& N. Q6 A9 l

  146. 5 V  I4 _5 k% F6 Z& S) A3 ^
  147. {
    , ~$ m. [8 q8 }8 F1 _* Z

  148. 3 n/ @/ v! `2 P, X% B$ o; A
  149.    while (angle < -360.) { angle+=360. ; }
    / P( D. j9 d' c  e# _$ |

  150. 9 W& o, Y9 E+ F* L) Z2 J1 J
  151.    while (angle >= 360.) { angle-=360. ; }
    $ ]. Q4 i9 s! R* p$ P" o

  152. . E/ m$ z7 s- n# f
  153.    return (angle) ;/ i, e9 A1 @1 {1 r

  154. ) K, _( `8 s4 C7 Q5 W  N
  155. }0 G. E' K' M4 c1 t$ ?& `; t" h
  156. ' B6 ~3 ^/ [( {3 I: z/ w
  157. //#=============================================================
    . n3 T6 S% y3 @7 y' s& W( V* }# p3 T
  158. + _  y+ S! R  Q$ Q( h8 ^) {9 s
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )1 E4 i; w" X! y

  160. . K4 N: E' [) q% y& U4 D
  161. //#=============================================================
    2 a/ U+ t; }& v8 e

  162. : V' F- Y; A7 u4 |6 e& V
  163. {! b# l/ a* H2 B$ w% _4 z: ?" q7 }- }

  164. ! I6 O/ B: J* f8 P
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    3 x! l1 L& t. |& V8 ?6 E/ k/ @
  166. 7 v6 j* Z8 V5 o
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ( E3 a5 [5 {6 e, }, `, f$ l1 v

  168. 4 N- I+ f2 d6 A& G0 C$ X1 L: {
  169.    return (angle) ;
    - p9 L& ]0 o( P2 M2 _  M) I

  170. ' ~  l9 l5 \; I
  171. }
复制代码

* \+ a4 L% t9 o+ e# _9 f以下为摇篮5轴计算过程代码
8 S3 f: l) b# j: u; }
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);' m7 u* T$ b5 G# S

  2. 1 l0 Q# z9 c# J9 {) m
  3.          j=0.; B1=0.; B0=0.;; |2 ^6 I8 q3 n

  4. ! M9 d6 s5 t: q9 W
  5.           if (EQ_is_ge(i,0.)) {1 p' T; W) f) g, J# @

  6. 3 q2 v1 D% V4 T! V( T
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }8 u. ?+ f7 w4 Q# @* C  d
  8. 5 I9 |# I& W% N& b. b
  9.           }
    5 Z, K& o2 z. i) [
  10. 6 t7 l, D' H! E
  11.           if (EQ_is_lt(i,0.)) {8 q' z+ i: N" Y; B3 G- Q2 c  \
  12. 8 {. F* p! u, Y0 Y5 u  M. \
  13.              if (EQ_is_lt(k,0.)) {: t1 Z. z  ]7 S3 F
  14. . ^6 s# w( b% [( b
  15.                 B0=atan(i/k); B1=B0+PI ;
    6 w! k/ w) L' O

  16.   ]: C. n: s- L% n; t1 P1 f
  17.              } else {
      @5 a9 D" |4 Z8 D# T

  18. & k3 ?, I0 c) N
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    5 a* i5 m( u$ G9 X2 }* f

  20. 7 n4 r( V- S/ _+ \/ R' H/ x
  21.               B1=2.*PI+B0 ;8 a0 _$ ^, p6 d6 ]9 s6 P$ E7 {3 e

  22. 3 E" g+ }2 Q' u' H" _
  23.              }/ D6 L- H* b; z& U% k
  24. 7 j8 f% {4 I" q  G  P9 a
  25.           }$ _7 A( T  H' R7 x
  26. 5 c1 f0 Z4 F" `) l+ R" _
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
      T" r' J$ V7 E% ~  S" d* b

  28. 3 A6 z! N3 a$ c  S3 v- r7 J8 k
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    - G% N' C' q2 |. W, G) S3 M  O* d
  30. + b! p4 a) \2 P0 a# t
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;# B- D5 M4 b, O* K' G. m
  32. 8 O- C% c8 ?% m0 I5 w
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
4 K( I* H) u+ r5 O8 N% _
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。4 o5 C, s, I5 S1 p! l7 U8 H' p
: M: @2 i! W' ?& p: j
640.png
2 P$ H2 B! l1 V" O; I! J测试结果:! W0 f* [, f( t
6420.png
3 e* u4 c* ^1 y* V" ?6 p* ]' n# p+ K( h
反向测试结果 6410.png
0 K& j1 b% f4 h! M- g

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 02:28 , Processed in 0.233840 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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