找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 311|回复: 1

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

[复制链接]

430

主题

5751

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    " K4 K6 i) Q  T. q9 L4 H& T5 \
  2. int  EQ_is_ge (double s, double t);
    " D4 _9 U) c- G# U5 }6 v7 J
  3. int  EQ_is_gt (double s, double t);) V, i0 G5 M% M! D9 s, a, k4 [
  4. int  EQ_is_le (double s, double t);
    ' Q; I' N) Z- f' D* y# W- P
  5. int  EQ_is_lt (double s, double t);4 v6 M$ }+ i6 o3 Q& O
  6. int  EQ_is_zero (double s);+ S; O) y: M3 D! [# t: x
  7. //=============================================================
    , n( e6 K9 E  @. O2 L
  8. double ARCTAN1 (double y, double x );+ m" Q9 v/ Q% l7 E5 f
  9. //#=============================================================
    ) z. {  P% `9 s& ~" k
  10. double ARCTAN2 (double y, double x );
    3 r, Z' K1 U. X: l9 Q
  11. //#=============================================================, O) f2 N3 I7 ]# h* d5 _1 q3 r
  12. double CheckConst ( double angle, double constvar  );
    - \6 `$ b4 F% S0 g
  13. //#=============================================================% N/ k; y0 j" P
  14. double Check360 ( double angle );
    # i* s0 W( n# R
  15. //#=============================================================
    ) h' B% b  l9 b- E- K! l2 m
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    : i" Q- q4 \8 M4 O2 `6 q. H
  17. //#=============================================================
复制代码
% h  p% L: U) T5 L
以下为部分源代码,用于判断,计算角度等
# P) f8 i( z* z  m3 @
  1. int  EQ_is_equal (double s, double t)
    . x& G4 q  ?0 K. ]: F9 O3 S
  2. 4 U, m) B0 ^7 m' x
  3. {( \) e3 Y. ?. C! s9 W

  4. * i& [6 b1 o4 ]1 K1 z7 i; p4 F
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }( a7 d  W; D8 l1 y% Z# F0 A5 z, C: s& K  V
  6. - c. z6 J' Q" e$ B4 D
  7. }
    7 G  N- P. Q' `' P* z
  8. 8 Y; T' [. h6 ^
  9. /***********************************************************************/! J- C) c" z# t- G$ n

  10. 0 ~7 C% L( R( r6 R
  11. int  EQ_is_ge (double s, double t)
    : o! i8 i- a; X

  12. 6 w7 H7 _0 D: n7 l) [. |
  13. {
    1 C1 ^" c$ Y$ _' r+ S' t

  14. 5 K2 U6 W) T9 z0 Q( u: B, w
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }' o8 K0 i. \* S; q4 l7 f8 N

  16. 3 ^3 B% e1 o/ ?1 F8 j# v+ P
  17. }7 P. Z3 T) u" Z, }( u% _
  18. ( X  e$ v% ^- u) I! z+ w3 }
  19. /***********************************************************************/
    2 p0 f  l5 f: ^

  20. - O" q/ T& K" f4 k8 s6 D' x
  21. int  EQ_is_gt (double s, double t). U3 _% B6 j* P: z* s/ @  T2 B
  22. ) N' X/ U7 \  q  l& }) D6 k
  23. {3 h: O' Q2 x" D& t7 h- b" r# H0 T

  24. 8 b  _. q, c1 `* I
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    % G: i8 g3 }1 z2 V+ o, ?

  26. ! X' d+ W7 R9 M1 l0 y) {
  27. }
    : W( A. Z7 K5 T7 t
  28. % b) t* q# c8 I
  29. /***********************************************************************/) {( j1 Z  s% d* w: Q& J$ _

  30. 9 {" s* r' J# j' V4 k- ]
  31. int  EQ_is_le (double s, double t)
    2 Z$ l* B/ N" f, W, |2 L" I
  32. 0 ?5 q  I4 z$ c( `5 o6 f
  33. {
    # }0 Q8 a9 B3 n: N7 g
  34. % W( Q+ }  {- B' }, l0 E( @
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    # b& Z8 n2 n' C& V$ c* u2 B- M
  36. $ S& X+ o. A% L/ {, R
  37. }  X6 b3 {2 Y. V; l/ x& k4 s5 x

  38. & ^$ V- x1 n0 k" Z. Q
  39. /***********************************************************************/$ j0 p. e. F/ a# Q, L, q

  40. " |9 d. y+ g( |5 z) g% V7 y% ~: q/ o# `
  41. int  EQ_is_lt (double s, double t)
    8 a& S+ U6 ~3 p

  42. 9 C5 n- v0 N7 T' B
  43. {
    # [( C8 A( ~7 I2 [, N* g; V6 R

  44. ) |5 P0 @$ R6 o: n2 p3 {; `* ?
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 C9 E0 B; t9 T4 }( {. j5 P
  46. ) M8 ^3 K! w. U; o# y. G
  47. }, {* k- Y0 r- c2 N3 }+ y$ Q

  48. $ e2 }' o' E' ]6 J) |; H1 o8 {
  49. /***********************************************************************/+ U0 R9 `6 b( W
  50. , q; o8 }: f( c
  51. int  EQ_is_zero (double s)7 k& @6 W1 @# q0 M# ?
  52. 5 t- \8 e! p. ~1 b1 D
  53. {! E" l1 o1 Y% x  R! b# r% K1 s  n

  54. 0 m) _9 e6 p! Q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 N; w$ j; s, k* Q( |4 _( {9 h( O$ b
  56. 5 V$ w8 u" e0 Q( U5 {2 y
  57. }+ u$ [+ I% K, ^0 x. O* ^/ u* ]- g
  58. $ O% y  Q* p; p3 f! {% O6 v
  59. //=============================================================% X( Y6 g  B! c- C& r

  60.   b& a% ~0 v/ o' b$ Z& I2 q
  61. double ARCTAN1 (double y, double x )5 p, L7 y- `: `" L+ D" q" ~2 H) M) M

  62. ; A8 q5 ]) p$ S+ i/ r5 B- N
  63. //#=============================================================7 s: z+ g* u$ e+ S2 l- j! g

  64. , d& j+ L4 Z" L+ ^, }7 Y0 _) V
  65. {
    9 N1 k8 P2 W1 N+ k3 f

  66. ( R) Y& o1 T( k2 M: o7 B
  67.    double ang;& Y7 U8 i! h# q6 P4 ]

  68. , \: Z8 f4 F6 M1 E/ @# u1 \- R
  69.    if (EQ_is_zero(y)) { y=0; }: l6 K% u1 @4 R  d( w
  70. / a! _0 m/ l* D6 P
  71.    if (EQ_is_zero(x)) { x=0; }
    1 P! ]& [3 x/ l1 J6 l
  72. ' M8 o0 V; L) `6 p+ b/ j' U, ?% \
  73.    if (y == 0 && x == 0) { return(0); }. F7 A' Y; k4 K! i

  74. % c9 F' d/ p4 o; A) k/ x8 G
  75.    ang=atan2(y,x);
    % s% A8 Y2 ^/ O
  76. 3 j0 _. a, V4 [: h/ e8 Z" o, m
  77.    if (ang < 0 ) {
    2 s- t! b! E" j$ e
  78. . A* k$ r( M" z5 D# m
  79.       return(ang + PI*2);
    / l+ b- Y9 q5 C. p) N
  80. 6 q. k4 U1 w3 G4 Y; {
  81.    }
    . s7 v6 `6 e! B8 D# p# z
  82. ( x# k5 v- |; T2 f( t1 _
  83.    return(ang);$ M' h$ Y0 L3 m6 X/ W# p6 l
  84. + I  i( g/ G  ^- D
  85. }
    # w8 X2 O9 i* z
  86. # [, X6 w0 u9 G1 \6 V  N
  87. //#=============================================================
    9 O" w  w0 N* ^9 C3 y' K$ O

  88. # t* T; I* S: P7 j1 K. `& u
  89. double ARCTAN2 (double y, double x )% g! _4 l! |. ?4 U. ~8 y
  90.   i2 O; g! q4 O' A; i
  91. //#=============================================================& l8 D/ o2 N/ `/ E$ T, u4 H& [
  92. / s3 ^5 V/ `3 |" H+ j% _
  93. {
    ' d: {+ A, r0 i3 g4 |! r
  94. , S# l! Z* h" m, h# b6 |5 R. h
  95.    double ang;) e7 M: }  ^/ h- [. A

  96. $ Y' x9 x# {6 u+ q9 j
  97.    if (EQ_is_zero(y)) {+ y& Y. P) d2 M3 H% z

  98. ) Y$ z% w1 [9 @9 E
  99.       if (x < 0.0) { return (PI); }  S  T' K  N: b
  100. 5 i1 v! E& D) ?( e" Q
  101.       return (0.0);
    3 E1 F3 t) U: _+ X& L$ y. @

  102. 9 |: ~& o* K0 \. R4 S# J8 E/ [
  103.    }% J6 S* I- |( s- o2 k
  104. ' O# R% U5 h2 a  t7 {
  105.    if (EQ_is_zero(x)) {
    9 ~' D4 S6 L1 n! {& V! k7 x- E4 [
  106. & H/ d+ \3 h! N1 w7 J0 C" z
  107.       if (y < 0.0) { return(PI*1.5); }5 q( N' Q4 Z+ g) b2 z

  108. 8 e0 t$ Q' V$ S8 n
  109.       return(PI*.5);! V: w& ~8 R2 e0 Q  n
  110. 1 m! h9 h# |5 W0 |) Q2 B$ t# D
  111.    }4 w  o( r$ B' w  \
  112. 8 ^: Z  X; v% L, f4 E
  113.    ang=atan(y/x);
    ( D( Z* Q4 S$ M/ F9 N" h& D. K! b
  114. 1 S; `/ Q/ V$ S3 v# f8 Y1 |
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ( _8 l& R( @1 L
  116. + W. C  s9 |5 f3 r9 @
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }; ]9 A( ?5 Y* R7 y- ?9 J

  118. + f1 L( \3 \3 b, d( `4 q- `. b
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }+ a! \1 E' F; ?; I2 ?. ~

  120. 4 y/ d; n8 F& t' Z; V8 e+ f
  121.    return(ang);# j! C) b1 t0 l' r
  122. # Z6 G2 X. ]( s/ r5 j9 T$ y
  123. }
    $ I' M$ S  Z7 y% ~0 w. g- V1 x
  124. 2 Y( I+ N' X" g8 O% H" y
  125. //#=============================================================! ^* y5 D6 s7 T  S

  126. 9 \: A6 L! ^9 M5 D# a2 |* R
  127. double CheckConst ( double angle, double constvar  ); m' `. t4 j3 Z+ s5 y

  128. ( |# i9 `$ J& g* t4 H
  129. //#=============================================================
    0 j! S( D! z6 r4 _- ?. g

  130. ( A( D* N: I+ Z$ T0 u7 H) S; r
  131. {+ A* _) j, K) K- y4 ~# b
  132. " d3 T* Q5 c" n
  133.    while (angle < -constvar) { angle+=constvar ; }9 k& J. H- a( W* n

  134. ' O. i5 a" r$ X: ]- Y
  135.    while (angle >= constvar) { angle-=constvar ; }- R6 S3 Z6 W! ~& Q$ ]- w
  136. 2 v& x5 z* @6 r; O1 `
  137.    return (angle) ;" @' h# l* o2 V5 n; V
  138. 8 x6 p, n+ g4 A, \4 I
  139. }
    & \7 U9 h" F3 k, r1 g5 G" w( K
  140. 7 X% |' O. @& y% r) n
  141. //#=============================================================
    7 z1 d6 b- r0 @2 S/ d

  142. 2 z- l+ q. `9 O' \0 \- f" w
  143. double Check360 ( double angle )6 ?. ?5 M4 a4 v7 u) Y5 Y% }7 r
  144. 5 i4 I6 s5 ^. H3 F4 G+ ]
  145. //#=============================================================4 L4 u6 ?6 e' M& o7 T

  146. 9 b) G9 r) w6 j. O4 a9 K: R
  147. {
    $ c4 A& y. O# t- R; [+ d2 @

  148. 1 {- L2 q% ]: k9 d5 }
  149.    while (angle < -360.) { angle+=360. ; }! r, r1 _6 ]. v5 ^% m; z' G
  150. " {* G* \. b- B
  151.    while (angle >= 360.) { angle-=360. ; }
    $ [% P2 R  z9 l

  152.   c3 N7 {5 i& }5 p' E/ _5 x& L
  153.    return (angle) ;
    1 A0 s, ^2 v% \9 I& v* {5 C8 z
  154. 5 ]1 j- D, u) S0 E" Y& R- ]  |$ j
  155. }2 S4 {" j" _* z! g1 G: r% V- D: g7 }" p

  156. 8 h  N, H2 l0 j" X$ X
  157. //#=============================================================
    2 U* `; d% Z' n5 F: D) M  L
  158. " G4 n$ X$ ]' F: e8 X; g7 L  o
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    / x% j6 n6 g) m" t
  160. & C( T* v$ x6 v' @. Z% O8 e  k
  161. //#=============================================================8 {+ C, k' k; p

  162. ! O6 z) W. L; M: I" s
  163. {
    ; W" p5 k4 Z8 k% V+ A% B
  164. . F, g9 b! r1 \( |. O' s
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }; Q7 t( |# ]9 J" @) x

  166. 8 ]# e% K, S7 d4 o( J
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }- ~$ e2 T. l7 t, N: N, f8 N
  168. ! ~- k& U# V7 W  ^1 n
  169.    return (angle) ;9 k+ c/ ^9 Z& B9 v& r2 B8 i

  170. 9 k/ D1 c5 G7 e5 N/ k( w6 F- `
  171. }
复制代码

- f# w5 Y9 h! v' B7 w: Z, d! b以下为摇篮5轴计算过程代码  x4 X( p. T/ M2 Z$ k
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    / G5 W+ p* i, ^" g- N+ j9 {

  2. 3 N. z' U; _2 D. ]1 J* q  u2 D3 B( K- X
  3.          j=0.; B1=0.; B0=0.;; n2 b# s& R5 Y' f
  4. * l7 z6 {- W% e* h- ]  f
  5.           if (EQ_is_ge(i,0.)) {
    : \8 z# H$ p1 Z& ^! I

  6. ! ]) K) r9 K, k5 d* {! r" |
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    , p. w4 M1 M3 [( h, Z1 |

  8. % v& m; l4 E( N" G; C! n
  9.           }
    ' N$ D/ p' Y% z! b' G

  10. ' g0 p8 j+ x; |+ V  f( k* I
  11.           if (EQ_is_lt(i,0.)) {
    . @+ v3 F$ i1 {2 F+ U2 i
  12. ! R) w3 n: }$ Z, u
  13.              if (EQ_is_lt(k,0.)) {/ Q2 u/ h7 A. v3 b; g- ?

  14. $ X: k1 f: e; ~: r" S
  15.                 B0=atan(i/k); B1=B0+PI ;# r: N/ h" h1 e

  16. 6 N) j* C: S: j3 Y5 n! F" d
  17.              } else {
    0 B; [- f1 I" W% ^/ N

  18. % y7 F2 A4 j# z# h; U/ E$ U$ p! w
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    " ]8 p0 {7 P' a" P6 h2 p+ h

  20. / z4 X- Z6 \, v  N: _, c
  21.               B1=2.*PI+B0 ;
    2 J) i& G( T: v  p1 U7 a& p

  22. % v2 d$ P. w4 V% x, J
  23.              }
    7 H! j! F& C; v, z$ A. D9 v
  24. 3 H' K( k0 A" D  Z: T. j
  25.           }3 m! r; T0 K5 R0 o. M; H  V
  26. 4 B6 t  g0 _% A3 F8 |
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ! \! m0 I: `( x1 z& {: J3 K
  28. ) ^) X+ k  N) C/ y
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));/ O! v/ G* [' n: n

  30. + S, {$ b8 R: Z# I! v+ w
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ) |; V- F) t5 e: ~: B$ i% [+ ]
  32. ' Q9 V8 j( c1 {2 f) Z) g: X: C
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

6 p# _4 r9 ?+ f6 D) v通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
) m/ Z1 }- V/ Z
2 o! J3 @8 Q2 ~1 B" S4 G 640.png 2 A* }8 C8 G7 i
测试结果:
7 c8 q1 b* g7 b; p% q7 A7 y 6420.png ' u$ }6 Q; A5 J/ F. u3 b" ~) m
; _9 F  C. _8 J+ J  C4 c2 n2 x) x3 C0 [
反向测试结果 6410.png - M; c! H9 q- x# H' l

0

主题

23

回帖

5

积分

新手上路

积分
5
发表于 4 天前 | 显示全部楼层
谢谢分享
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-7 05:16 , Processed in 1.682644 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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