找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7498|回复: 3

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

[复制链接]

433

主题

5758

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);) e5 `% B$ P! U
  2. int  EQ_is_ge (double s, double t);
    " Q& n! s% f* K  x3 y8 d
  3. int  EQ_is_gt (double s, double t);
    - ?4 w. @) n6 F9 S
  4. int  EQ_is_le (double s, double t);( Z  u/ R8 F3 W1 g6 n6 I: @( E0 T
  5. int  EQ_is_lt (double s, double t);3 |9 K1 q7 S2 V
  6. int  EQ_is_zero (double s);+ f( o& I1 q7 _! C% b+ @# u, K
  7. //=============================================================
    2 z- g1 K" `" B  R, M
  8. double ARCTAN1 (double y, double x );" [5 \+ j2 Y7 g6 f  ?/ {
  9. //#=============================================================' J! u1 y. X9 _) f5 U" W
  10. double ARCTAN2 (double y, double x );6 \6 H! p8 Y! Y, M4 _6 ^0 h
  11. //#=============================================================
    4 v8 ~3 g5 t: H4 [/ t
  12. double CheckConst ( double angle, double constvar  );9 q- v: p! H8 w2 |  S* R
  13. //#=============================================================8 F3 x0 Q" i9 ?& Q6 L4 d
  14. double Check360 ( double angle );  y. d1 l# a; ^1 |1 X: Q8 U3 N
  15. //#=============================================================2 ^( [1 H7 N2 r, e8 \
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    0 q% K/ L3 Z! h- D( R% V
  17. //#=============================================================
复制代码

/ m, _* h: Z; ~9 |( L1 n以下为部分源代码,用于判断,计算角度等8 J1 Y6 x/ @5 q' `; X( q0 q
  1. int  EQ_is_equal (double s, double t)' @8 W. p" b" Y" \. L8 P8 g

  2. * @+ X% d  w) Y- |0 N
  3. {; e) M; T, ^1 A1 s% U

  4. 6 H6 |1 F2 ~/ M$ S5 M" W2 S4 q/ r
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    8 X  ^. Y& d( R* g; n( }

  6. 6 @& r3 s( q) g  A. L1 |- I! G
  7. }
    + j1 {; r' }, L+ @1 l& G, c  ^

  8. 1 B# I+ c( ^0 c0 E; Y. v
  9. /***********************************************************************/
      V, @$ u- r, S0 S( \

  10. + Y! C, s( r; v+ s/ @
  11. int  EQ_is_ge (double s, double t)8 t. u; T: b+ J! x

  12. - k1 t1 o$ ?0 p: K, f% e- p
  13. {
    ( c) ~! N$ Q/ |5 K

  14. % X4 ^, `6 C3 e! m
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }' w% f# N7 Q; P1 H0 W% T: c- {

  16. . R; D. x( {  |" ]$ ]0 G+ j4 U
  17. }8 r" a9 H, I% Y# J) t$ I

  18. # K/ n# E4 b* I: L: @' |* B+ K) V* Q
  19. /***********************************************************************/
    5 ~" J* g+ y7 O3 Y8 c- `1 Y3 M

  20. 5 u- H4 ]( O" d+ F7 z- v
  21. int  EQ_is_gt (double s, double t)4 m  V9 j  ^0 L, ?6 Y
  22. 3 J# b( a$ K% }9 P9 o  ]
  23. {
    5 N# K2 E# L, l  k  t7 R: i& |

  24. 1 i6 q, O: f7 f* _' u/ v+ z
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ( g7 u5 U4 n& q9 K

  26.   \/ ]" e% m) m* W/ C
  27. }% ?3 k2 j; J0 \

  28. 8 {. q! g7 k# W8 [# U) x
  29. /***********************************************************************/
    - @$ O; |' D- ]4 n+ I" I* b
  30. 5 Z8 K/ a. ?  z1 a
  31. int  EQ_is_le (double s, double t), b8 i/ \+ f7 c2 _- b2 S1 B, I
  32. 8 y. r& R$ ~& O
  33. {& `# l' h) L3 ?) o3 Y2 {2 E3 |
  34. 6 g  c; q% J( h- ?& c2 k0 M6 x
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }8 H# x& G& u5 w, _5 l: M

  36. 4 W# |$ B( }8 r! A! L% g
  37. }  z/ _, w$ P5 n& l4 l

  38. " U: ?5 f( w* F* f7 q6 |
  39. /***********************************************************************/
    . n5 Y9 V) _, O6 Y! }. K  N$ X
  40. & d7 ?  {0 W1 Y# G" A, U- m
  41. int  EQ_is_lt (double s, double t)( j. Z, w  \4 C# {4 T; `
  42. * W8 Z/ }% Y. W: {5 `; V5 u
  43. {
    3 x6 R- w* l" I2 f- T6 @
  44. , I2 {9 ]4 C! z
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    % I. L7 }0 ^) x; b5 w
  46. ; g$ c) W/ y" h- M! \& u
  47. }
    0 P0 b  d& J' S

  48. 3 q' T9 ?0 O' y. y5 E) H
  49. /***********************************************************************/
    : W( Q# i+ T9 h' m+ w# A7 x9 a7 N
  50. ) ~- p) _+ [% Z% {8 w7 J, y
  51. int  EQ_is_zero (double s)' b/ A; g+ }8 A" v; c+ Q
  52. ) k  W, c! b( z
  53. {
    8 z  l. D2 A0 G6 ]( H  Q
  54. # M7 u. O! V( I- G
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }& N. a& P* j" K. p- j3 ^5 ^

  56. ( E0 ~( t8 e* I6 v; S) }
  57. }2 r* @% h2 I. N9 i( i8 Q

  58. ) v% e) \; B# L! v9 B7 z
  59. //=============================================================! X2 p! E( b9 ?' `' A2 f

  60. 3 z' R; D$ g2 F7 Y# e0 Q" H" h# b
  61. double ARCTAN1 (double y, double x )# g0 {& s$ v8 Z, O4 c9 Y
  62. 6 g$ D+ T/ v3 @/ R& K
  63. //#=============================================================3 I, {& Z$ N+ r6 Q0 x
  64. ; X4 B8 e7 q" `, A0 D5 j& p
  65. {$ F$ P5 ?, ?! O- [
  66. ; c" l( n$ r& j  r! q$ [
  67.    double ang;
    9 H7 ^- s7 j1 G! a5 I
  68. & {9 R9 D) G& H0 D
  69.    if (EQ_is_zero(y)) { y=0; }
    5 {& |7 C4 X0 K" [, @
  70. * u2 j3 t2 k* v4 G" n: W' T1 j
  71.    if (EQ_is_zero(x)) { x=0; }2 H1 z9 s1 Q6 G# a8 P
  72. 4 G( V6 o- x6 t* D# T
  73.    if (y == 0 && x == 0) { return(0); }
    4 ]# l6 j$ g/ n+ i
  74. 8 Q, Q# C' `5 v  R9 y
  75.    ang=atan2(y,x);* Z% q3 R! x& w- u( x) X

  76. & P" W$ G8 ?  [+ g* |# n+ G" B7 \/ g
  77.    if (ang < 0 ) {
    0 X' Y) w: k) j) F/ K) Z; r
  78. $ l8 k! L. K2 {9 e7 O4 s3 b( F5 o
  79.       return(ang + PI*2);5 R% P9 v' @3 e! B; f

  80. 3 p- A2 u  Z! B
  81.    }
    6 a1 I3 f' O0 T$ R  l: l

  82. # S/ p) n' D$ A2 {; X& ~5 w$ N# w  g
  83.    return(ang);. Y$ J8 r& Q- ]5 P7 h; v) d) K0 D! d
  84. 8 y) ]9 g; Y6 H' |' p$ D1 [2 _
  85. }
    1 b* O# P! ?$ {* X; I

  86. ( O" x" v( `8 l: t9 g7 x
  87. //#=============================================================
    9 y+ q+ a( F3 C! u3 P7 e9 |# b
  88. 9 {5 e) }! }, S4 A7 S3 n. C
  89. double ARCTAN2 (double y, double x )6 i5 T9 Y4 q# W: S

  90. . m  \& ?. O& L  E% Q2 B9 b! Q
  91. //#=============================================================
      `* M4 u' q+ H3 i
  92. : O8 I2 Q5 i. M* J
  93. {
    3 a6 |# x. U  {8 F( A
  94. 5 ]7 D) @5 E8 U. o. u" E
  95.    double ang;
    1 a/ B: ?2 `% y: Y$ m
  96. ) |6 c& f; p0 u* E
  97.    if (EQ_is_zero(y)) {
    # R' l* i8 R! ?$ Y& T
  98. ; y, v% Q* N- C7 j
  99.       if (x < 0.0) { return (PI); }% K) @2 j% p0 S9 J/ ~$ Z

  100. - ?$ A9 u; q5 _9 q* R6 Z+ _; n+ Q
  101.       return (0.0);- X! Y. f( l* I" ?% |4 k/ P9 v
  102. 1 z6 D1 D5 h+ \0 [% Z5 L  r  i7 b
  103.    }
    " B. c& M4 \* \( M
  104. 3 g6 e+ d" f! G: I5 A$ z
  105.    if (EQ_is_zero(x)) {9 M; q5 F& ^8 s2 [! T9 |
  106. , |1 v6 n8 @3 Q; n4 D6 v
  107.       if (y < 0.0) { return(PI*1.5); }
    * A- j. k+ S" |4 U! g
  108. 8 k; T  `. ~5 b: T4 u' b0 G
  109.       return(PI*.5);
    7 k; Y: Q2 T: i( T. a0 O3 [
  110. . t! {$ y$ }, y% m9 P  p
  111.    }' l+ @- @% h+ u! d

  112. : {4 r$ e& u" Z1 T5 A* M
  113.    ang=atan(y/x);
      }9 [6 W" p# q$ K7 i
  114. " n( p- ~4 j* t
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }' e- Z7 ^. m4 a3 I: o( M4 |: |
  116. " H5 [- ]0 R( r' L! {
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }8 j. @' q. Z5 H
  118. / A" s$ l3 ?+ ?% j' J
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ; v4 Z; ^: {* a- F
  120. & v# X. R8 ?* _4 T3 r1 e# ^
  121.    return(ang);
    2 M, F% g+ m3 k0 E6 I& n

  122. % r0 s1 N) w+ s% ^* p" a3 q
  123. }
    5 q5 k" n2 Z: n, z: N

  124. 1 T+ E; b! h! n2 C" M# q- D
  125. //#=============================================================
    , |4 \! D( d6 [# w

  126. 2 X! i+ d1 c' Z$ g
  127. double CheckConst ( double angle, double constvar  )
    8 k/ T1 G& C. |! r5 t
  128. 9 a8 u; ^5 h' p) C
  129. //#=============================================================, R* ^+ J% F- [6 o

  130. ( J% M3 H3 ~5 d9 X
  131. {1 E7 `/ ^7 G  O3 Q, m# A) N
  132. 0 }* ~! E" S$ G  }4 F* ]- {
  133.    while (angle < -constvar) { angle+=constvar ; }
    2 O) }9 y/ l' l& k8 F# P+ b$ N" k
  134. ' {- q0 `- M8 p: y. ?/ m( ?
  135.    while (angle >= constvar) { angle-=constvar ; }  u3 V3 L! |; z& F3 I
  136. 8 _- |9 C; Z( s! ?" ^% q
  137.    return (angle) ;
    & x5 {. Z5 @  u2 @/ m5 b
  138. & @) S" U, V0 ?1 f
  139. }# o6 K% h) k" m
  140. 7 b9 [6 L" M3 s. x
  141. //#=============================================================
    1 V! j3 I+ c  d$ _
  142. 6 f. ?. I( A/ q7 ^4 g( Y; S; \) C
  143. double Check360 ( double angle )
    # H, e! O- Y) C: r! E, `
  144. ' u4 w) ^! k- |3 Y
  145. //#=============================================================
    9 h3 t4 n* A4 C2 ]

  146. 2 C! ?6 m! P2 i$ [& v' M
  147. {7 w& h# Y6 ~3 Z3 i/ l1 t

  148. . [; D! G- F2 F$ ^  _
  149.    while (angle < -360.) { angle+=360. ; }* |' D8 N, F7 b
  150. 3 v# @% J( s4 G" X' C) X1 R
  151.    while (angle >= 360.) { angle-=360. ; }
    ( b! Y( m7 d5 K  X% I; w' |

  152. & l1 ?7 }. Y+ r' s3 o  `6 b
  153.    return (angle) ;, X4 [. h2 h; y7 _+ T
  154. ) O) C* }+ s2 h
  155. }
    : J5 M. t* q7 V( S* S* m; l( N

  156. & H* v, z- B3 m/ ~% b
  157. //#=============================================================; m: j/ T8 A1 b, E. J5 ^! X

  158. 9 T& H, I+ D0 {. r. N% q& W1 Y  ~
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )8 x# e- z* r+ v" y3 @+ [1 k4 g
  160. $ u! K4 ]6 H: P  ]0 }
  161. //#=============================================================# s% ]2 a/ {* Y$ j' M3 q0 I, J

  162. ! `' K, m  T* O$ s8 Z4 D! ^# G
  163. {
    , j- f8 z. l0 L
  164. 5 G2 c: H( Z* U9 K& G6 q
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    & I8 }& a/ G8 Y$ M
  166. * p! i( o. [& e7 }' r$ C) G7 _
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    7 L  q+ L% o- p' ~5 M; `( z) D( t

  168. * f# O1 b  p6 c; q7 J- ~
  169.    return (angle) ;
    & }- @9 G! q% I. b

  170. ' E, F! q3 G# j; ?! B% o
  171. }
复制代码
5 A9 m1 a( K) Y1 {( Y1 f5 n9 K
以下为摇篮5轴计算过程代码
& ?) y7 N9 `, x# [
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    6 r/ @2 A9 ~  a2 m6 r
  2. : w) ?4 T% u7 `) d
  3.          j=0.; B1=0.; B0=0.;
    * Q0 D7 n4 A. N# ^1 L, p. N

  4. * A" ?) ?: W6 m* @
  5.           if (EQ_is_ge(i,0.)) {: v6 Y' g6 |1 @* \' g; e
  6. - Y: v' ], C5 Y+ b' j
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    * ?. g: W7 @. D
  8. 8 Y1 J3 l" r* g5 I2 i, n; I
  9.           }  g1 M0 Y$ M, H
  10. : w; R; y& G4 _- n  a3 e
  11.           if (EQ_is_lt(i,0.)) {
    $ Y( U! U) N- X7 i5 h5 l

  12. " A# x* p. n: c% M; h
  13.              if (EQ_is_lt(k,0.)) {
    3 n8 W5 H* Q; L6 ^/ r% g

  14. 0 F" D) r; d9 H; l9 i+ Y6 u, `
  15.                 B0=atan(i/k); B1=B0+PI ;) s. S4 v+ j( S/ v* o

  16. * S) e- j7 v- f
  17.              } else {
    9 |5 |3 a! e* A9 M2 i
  18. , W' H1 }/ L& _  ]
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }, [) B# z) v$ o: j7 t9 `) F# _: w0 ~

  20. 9 y5 O! j: t, N. V5 D
  21.               B1=2.*PI+B0 ;
    5 {% r3 K! ~5 u, Z. Q. J$ w

  22. / l/ [! K# ^4 E6 a
  23.              }* h4 p7 `& E) t+ t# ^% r

  24. $ M$ Q4 d9 Z9 ]  g( p: W
  25.           }* ~# i% @8 n5 r: [' @8 K
  26.   c6 ]/ S2 r4 m& ?
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;0 e2 {/ L; `, x' ]$ h
  28. ! ~& t  V: q# [+ _% X
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    * T6 V% i* s+ M
  30. * n$ {+ T- s% G1 T$ w
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    * X" [. z8 f% l8 E0 \) z

  32. % E8 C3 g) x7 {$ m$ {
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
' c& ^& n! ~+ o1 _! ^
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。/ p+ s3 H% Y8 _0 \' M% H; z

/ D; G+ u" g6 `- t, e 640.png
, T8 z% m+ x% T" i: x# D6 k# d测试结果:
# u1 r4 `% |. h 6420.png
$ H! H8 ^( r5 x" [6 Z6 a2 ]( t
3 q/ F* ]6 {6 h) q6 @" m4 P3 g: ^" g反向测试结果 6410.png
, O6 l5 k0 v* n- j  X* l

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

239

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-5-7 23:00 , Processed in 0.633837 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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