找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7028|回复: 3

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

[复制链接]

433

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);- t& \& l1 N5 J% p
  2. int  EQ_is_ge (double s, double t);0 n  f; u; w' N9 C$ n( w0 A
  3. int  EQ_is_gt (double s, double t);7 Q: x4 B6 W$ k# m  f+ v
  4. int  EQ_is_le (double s, double t);
    ; j9 g% E6 g* G2 {' [" w  f
  5. int  EQ_is_lt (double s, double t);
    0 N4 c& Y3 p, G/ `1 v
  6. int  EQ_is_zero (double s);; P( p9 N& Q2 G* _, j3 Z. Y
  7. //=============================================================! c( X% x3 ^8 g2 h( g
  8. double ARCTAN1 (double y, double x );5 [) L2 n% A: c# t$ `4 X' J
  9. //#=============================================================9 l" @/ H7 A$ i
  10. double ARCTAN2 (double y, double x );
    : z8 P& H# ^& T1 X7 Q
  11. //#=============================================================- H( g- Y6 e) _: X
  12. double CheckConst ( double angle, double constvar  );" y% }" ?  Z3 }: i% M! {
  13. //#=============================================================
    ) C9 W, p! i% `! x+ |
  14. double Check360 ( double angle );" F  z, S% r, f" G% `0 ~
  15. //#=============================================================
    % ~+ j1 `1 d$ y0 j4 ?: Y5 X  E
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ! o9 B$ |9 W# P9 M
  17. //#=============================================================
复制代码

; W0 O* i& i2 u8 M以下为部分源代码,用于判断,计算角度等
  C# F4 E( d! c, O2 z/ r; a
  1. int  EQ_is_equal (double s, double t)
    1 f" v1 `; n4 U. }! k0 x, g# L0 K

  2. # `3 w0 R/ }2 d, _5 t6 c$ d2 ?
  3. {  S! |* M8 F' l# K

  4. + e3 s* Y# Q4 y" ^4 t' C) t
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }+ X7 c3 H2 C' L% V3 M$ P
  6.   I2 Z3 {; g0 m" Y$ y* |( K* w. G' K
  7. }+ {4 C, x9 E6 \$ i

  8. $ W2 w" X' F  ]- s: {
  9. /***********************************************************************/8 T7 w7 q$ K4 T8 {
  10. " h+ H3 Q+ R# b! C3 a; p
  11. int  EQ_is_ge (double s, double t)
    - i: q% @! j0 o; W' J. Z9 q

  12. 6 Q+ t! b0 e$ U' E
  13. {
    5 K* R: ^6 U% p+ N9 d& Q' A- J& q
  14. 5 Y" Z# O, J$ l' b
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }( [; L* }4 Y8 Q& ^  I! A* P$ U1 ~
  16. ) \6 X0 ?2 d& p% q# s. y5 p
  17. }
    / O; S% N& N1 |& J2 P
  18. / i! o' j* w' w" V# n8 n( e* a' u
  19. /***********************************************************************/
    4 L: X" @4 ^  J) k/ M
  20. ( y) y: R! K+ Z4 y9 O* w1 O" D
  21. int  EQ_is_gt (double s, double t), H/ C5 {! g7 [# E
  22. ) S2 r0 c% j4 E- Y  R  g( t
  23. {* [+ Q  Q, B" S+ y4 [* g/ F# B" N

  24. 2 x4 h' o: g$ R  _4 [
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; H$ y* p: Q0 Y
  26. 3 i! O; }+ g/ ?1 U: t! X
  27. }9 Z$ X+ U/ _" Z+ z1 i

  28. ' y: }. T# _" |9 p0 _: K% {: s
  29. /***********************************************************************/
    & G9 H6 @# D# O, b* ^: f) \; c4 u) `
  30. . h6 ?. o! T1 @# V4 P& R0 z
  31. int  EQ_is_le (double s, double t)
    5 c2 K$ P0 j! u

  32. , W3 m* O* S7 o
  33. {
    4 H3 V& C" q4 b; [# X" ^6 q0 N
  34. / W6 G& g2 J2 t- s7 H3 n* |7 T
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }4 [0 `/ g; G' E  ?

  36. 8 ^, _- \8 J1 d$ `) X: W
  37. }
    9 O5 Q+ s  V9 A# f& z9 k: N! B3 u
  38. ) n5 r0 S8 ?4 K1 C
  39. /***********************************************************************/
    4 Q) l) i; J, y5 v. u
  40. 9 u+ {' x; x1 |
  41. int  EQ_is_lt (double s, double t); S' l, L8 Z) y- X$ ^

  42. " d7 C' D* K) X
  43. {
    3 ^6 P+ ]9 T2 Z) i/ G

  44. % Z4 i8 f6 M, }
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 T3 ^3 C' ^8 j% f/ z
  46. 3 W+ ^/ X# [- G! r- N/ X1 v( w1 p
  47. }
    * |9 I5 w# Z: m" r

  48. 3 [7 ~) N. c) r! \' W
  49. /***********************************************************************/
    " b: |& @+ J/ q1 m6 P

  50. ) W" r1 }8 E( A5 y  @
  51. int  EQ_is_zero (double s)8 R7 N8 o; V# P6 o" s9 {

  52. . d( e& W2 f; @7 Z6 W6 C6 F
  53. {
    , e( M  r/ E8 a( e

  54. / j% d9 @- J2 p( j; c
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) p( n) S! L) J- ?- S8 r  @# p# O

  56. + V! {! k* c3 g9 k: Q5 _) @
  57. }
    . Y3 D& `  l- n; F
  58. / x4 l  n5 N2 u8 E- |
  59. //=============================================================
    0 N: \( i1 F( g/ Y: b
  60. + f* C1 X' h; N1 R6 [5 e
  61. double ARCTAN1 (double y, double x )+ |$ }/ I, @' T; M% m  v8 ]) B: n

  62. ( x% d& Z! I+ k- J2 }
  63. //#=============================================================( a: J$ X* H9 n0 ]& H* X8 o

  64. 1 H6 I7 K( O5 }) @0 ^
  65. {/ T0 \8 X( e5 N& ~  V( z$ P- s) e
  66. " O( @/ _1 U! o: ^
  67.    double ang;7 w9 b3 B2 n5 P. X/ Q
  68. " C' j$ i1 {1 C% A
  69.    if (EQ_is_zero(y)) { y=0; }
    6 D3 x, ~/ t9 h" F
  70. # K% p, E. C9 U9 }9 q
  71.    if (EQ_is_zero(x)) { x=0; }
    ! G1 c  ?$ f- m8 G9 f- r6 _

  72. * U- P, e2 C* e7 r5 g% ^& A
  73.    if (y == 0 && x == 0) { return(0); }
    6 q" A* f* x; c8 k
  74. ; b- J) l7 b" r* S$ `
  75.    ang=atan2(y,x);# y* R) ~  Q' Z2 z% t
  76. & a# T% Q6 |0 y7 p* d
  77.    if (ang < 0 ) {
    ( c# t1 I" |. g- F
  78. * `" Q  d6 l! q
  79.       return(ang + PI*2);# n. {4 O/ Q+ P3 B" T  _- ?

  80. : c) V) ]! v$ A2 V
  81.    }6 A1 V& W0 A) g

  82. . D2 B) r6 X. _& A. k% M
  83.    return(ang);* V1 `% k0 u. o1 ]
  84. 5 v: |! P, H/ k; J
  85. }
    $ _* r3 s) S& _, G  K

  86. 8 S: A- E9 v$ c$ h( V
  87. //#=============================================================4 ]' O/ A. e/ p9 u3 F9 o

  88. ) g3 P" c9 [4 T# v" r" A0 |
  89. double ARCTAN2 (double y, double x )+ E. Y, x! T1 ^+ s; M
  90. ; k3 c/ w' _  L
  91. //#=============================================================
    & U. C0 W+ j0 I
  92. : x8 t0 W, {  y  L# I9 I8 v
  93. {! X' X5 F! ~- a
  94. ) O8 z8 n1 B9 j1 r; H9 b
  95.    double ang;! o+ A' N+ t7 u9 t+ Q8 U
  96. , N& G- p3 K* m
  97.    if (EQ_is_zero(y)) {
    7 V& G+ A+ K& W, o0 c& G$ X
  98. ! _$ ^$ A. O' m; T
  99.       if (x < 0.0) { return (PI); }2 [$ N" ?8 U, h. p2 }
  100. ! v3 a, S4 Z4 f( q3 n
  101.       return (0.0);* v2 {/ ]% S( }3 V3 V

  102. ( J: Z$ X: O: w8 K0 m
  103.    }
    - @; c; x: t) `! j6 H' w7 c2 k
  104. 5 X2 S1 M; x# P
  105.    if (EQ_is_zero(x)) {
    ( q1 s% X- m0 G# v5 `0 R
  106. : L6 d, X, K! }) ?5 _& D
  107.       if (y < 0.0) { return(PI*1.5); }
    ' I3 b# K6 E4 L5 R/ W

  108. & d4 @- Y0 r& b9 \
  109.       return(PI*.5);: C( l; W. Y8 F' Q/ Z' ?9 m
  110. & I, s' {: ~0 a$ b- ]% M
  111.    }
    8 v% p: E3 x  E! }4 e5 J

  112. # c7 T1 B& ]5 }
  113.    ang=atan(y/x);
    ) B' b7 ~, C. n' ~1 G
  114. / ~5 V1 B4 a) W. u2 e' W
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    / B! k3 D( U! ]6 W8 _

  116. 4 T4 R' n0 i! l# t5 }" G) D
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }) e* d6 M, q6 @. Q8 K
  118. & M2 W- ~# z: ^' i/ \3 r- _
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    # \  t1 X, P! ~( ?- l4 u
  120. + v, e( c' G+ G" B
  121.    return(ang);' ~3 ?8 x" U3 `+ x* d8 X
  122. : b- Q+ D2 a$ M& z7 C
  123. }* l7 |4 H! d, z, S5 Q
  124. 2 f; g7 g* _! {# A
  125. //#=============================================================5 r4 N! {2 g& m% X& d
  126. 9 O2 E. {+ ^: ^
  127. double CheckConst ( double angle, double constvar  )5 l4 N) }- X0 N5 X5 G' h8 ~
  128. ( O+ p" |* q. M. [/ Z5 F
  129. //#=============================================================
    , @; D2 R% U1 |4 L

  130. / @! ~* ^, ~* j4 Q1 J2 }
  131. {% I% T$ R* |( x; }; p! W
  132.   y! }  C0 h6 k6 E! G1 I' R
  133.    while (angle < -constvar) { angle+=constvar ; }
    " O7 x% t+ ]' n2 n

  134. ' V  _0 I. h" a
  135.    while (angle >= constvar) { angle-=constvar ; }. l; f- v& m7 Q. Y
  136. " x' D$ @) e* O; i" ~8 ^+ z
  137.    return (angle) ;  K1 g7 e+ Q/ ]; {( y
  138. 8 X7 z' ^, R, H9 i' X
  139. }
    2 [, E6 x/ _7 _1 J) M9 S
  140. 9 M: I1 R+ M5 h) U9 _9 K* s
  141. //#=============================================================$ P  q- t! Q9 ^0 p+ {

  142. 7 q: w7 w7 S- I5 m- ^. N
  143. double Check360 ( double angle )4 y3 b* `+ e' h; k& U" \
  144. ' m& U$ V' D1 f6 i/ F$ r" y& `% ^
  145. //#=============================================================( ~  e, ]. k* J- f  ?
  146. % d! b( J7 n6 _; c! d; i
  147. {# q& T' _  q) _/ {

  148. 3 m8 G* w8 A. }- Q
  149.    while (angle < -360.) { angle+=360. ; }
    $ j9 @5 i) P, P

  150. + ~/ N# N/ I9 V+ y9 X5 ]4 ^
  151.    while (angle >= 360.) { angle-=360. ; }
    / g9 o& h) C5 e8 w9 y( A

  152. ( ]7 ]" {# _3 z% a/ E& ]
  153.    return (angle) ;) V* s* V; Q" j! a$ |
  154. 2 L& G7 W6 {0 V7 {+ u" ~4 n2 ^/ j
  155. }
    ' \- R6 u: A# b& J/ r

  156. , Z% W( B2 W5 l* z' W7 ^  l9 f) e
  157. //#=============================================================9 X  i& Q2 E3 y! N  r

  158. : a  ^, e. A' I6 H) Q" w& H9 |
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )7 M% K1 I- B" }

  160. ) w% m: R; T# d  Y: V1 I6 p' V9 C
  161. //#=============================================================
    6 V1 Q- ^6 A. I
  162. . g$ ]- c: A5 j2 }3 }  z
  163. {
    - T* ~  a/ D/ W! l2 e

  164. 2 o# w  W" a: k! ?9 m' M9 \
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }" x1 |1 T) E; }1 `
  166. + H: H1 K9 }( t
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    + {6 n5 w, D$ h/ `! }" B
  168. 1 a5 d# n6 X. n, X
  169.    return (angle) ;  F/ P, A! w* ~- }' |
  170. & }8 }: z% A. E/ B4 p( ], a% f
  171. }
复制代码
4 b* w" B0 j' J+ I
以下为摇篮5轴计算过程代码- T; G8 C- T- P5 [2 V1 ~( H0 L
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    # z0 L$ r6 K9 T

  2. : J' h" y- _1 Z9 V' i
  3.          j=0.; B1=0.; B0=0.;) }4 Y& U9 @* R+ V

  4. : D- G" ~% K1 n9 h5 z$ m. x) s
  5.           if (EQ_is_ge(i,0.)) {' G# X$ p4 J0 R; S( n; n
  6. + o( @% ^3 p+ g7 e" D
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }, p9 t4 l4 Y& j3 M9 I, w$ x/ B

  8. 1 [5 B3 t2 g. {, `9 \. }# A6 t
  9.           }
    : M0 j3 |# q- f- O8 O( a0 ]! H& @
  10. * @# p* b1 ~: D) g' O$ q% J5 q6 l- b
  11.           if (EQ_is_lt(i,0.)) {
    0 n3 o: A  L- v: Z
  12. 7 `1 B# P" M) H5 N! R
  13.              if (EQ_is_lt(k,0.)) {
    + ^+ Y9 i' P$ e' A. u5 Q  H4 d

  14. ( a( j! K  U: J. ^4 e$ j! N
  15.                 B0=atan(i/k); B1=B0+PI ;
    ! q4 c- K, b3 j; |; T! c
  16. . B6 U! X" ?0 N; S
  17.              } else {; ~  X# C6 Q  ?" _) I
  18. ) E+ x$ T9 y0 J  q, j0 z
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }' W( C/ P9 V) F$ `

  20. % m4 F3 H4 n8 n) c% A
  21.               B1=2.*PI+B0 ;6 o$ o9 T( h/ G) O9 Q* H- v7 m- s
  22. / [; ~3 k$ {# l* [& J
  23.              }9 q: t# F7 O1 f; F4 d" ?5 t
  24. $ V6 K4 d( ?$ ?1 |$ B
  25.           }( y6 J) |, f# P! p6 ^

  26. # r/ t  W  v/ b# x
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    1 n- R5 [7 p# e! w% w
  28. 1 }; q  }' a3 c# r7 K: t6 E: c% }
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));% k# X; j" C( G' z2 A
  30. $ s$ Z$ s7 h' T& s) z* E- l5 H5 ?
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;$ R: k/ Q  ~5 k0 i, D9 v: t4 V/ d

  32. 0 c4 [+ r( b  o
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
7 `# r4 U4 Y, Z5 @9 F8 k
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
7 Y& C. t0 X. k& c& ^
7 R  N  ^# C0 G6 w 640.png * f" R: L* _0 H$ s$ t
测试结果:
0 z! D- \& ^0 q+ l7 K' y4 I9 t8 ?( [ 6420.png
: ?4 B. ~* w2 c/ n. Y, }; W: a" a; ]
反向测试结果 6410.png
( r( f) ?4 z; y7 x- Z

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

210

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-3-21 16:11 , Processed in 0.264077 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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