找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8091|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);: u5 J  q4 w% r' j& b" c9 k" R  n- ]5 R
  2. int  EQ_is_ge (double s, double t);$ P! ^5 F/ ?" o. h
  3. int  EQ_is_gt (double s, double t);
    " N3 R6 D% l9 k. f& \
  4. int  EQ_is_le (double s, double t);! c+ }. g: _" R2 e; r& @
  5. int  EQ_is_lt (double s, double t);
    & s7 U$ S- V5 o& @$ _3 q) j8 l2 S
  6. int  EQ_is_zero (double s);4 I3 x( p  Z. d+ x
  7. //=============================================================
    % y1 V( i% f! B; Z+ U5 O
  8. double ARCTAN1 (double y, double x );
    ) I) e0 l* h+ O0 w+ r8 i
  9. //#=============================================================
    * A5 o& m- r- |& ?" ^3 L% e
  10. double ARCTAN2 (double y, double x );# X0 u, w* ]5 e4 a. H
  11. //#=============================================================
    8 K) _4 H, c* [" W. y9 b  M
  12. double CheckConst ( double angle, double constvar  );
    2 p& ~5 F, {  x+ j- t
  13. //#=============================================================
    % H7 ]9 r3 H: y" T! v
  14. double Check360 ( double angle );# |2 N, {) m: x& D6 H' l! a
  15. //#=============================================================8 b0 |3 O( g5 P. ^" l6 ]) ^
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ( V1 p5 F5 o0 U0 U4 }! g
  17. //#=============================================================
复制代码

) x+ Z) a& f# F& L5 r6 |以下为部分源代码,用于判断,计算角度等) `7 z5 Q! b8 G
  1. int  EQ_is_equal (double s, double t)! H4 C: o5 }9 o- M1 w5 ]
  2. - o- T& r# Y+ w2 L8 J* T
  3. {9 r+ t! X# e; }3 f
  4. 9 X& D+ t5 E% f5 m) f6 {' A
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    * s; ]5 h3 A6 @

  6. ( `8 y: c! x& I" U  Z1 D3 p8 C* t
  7. }
    0 @0 p3 a- t6 ]4 d5 B% ^+ H

  8. : C+ `7 u- \/ W8 |  Z5 Q! E
  9. /***********************************************************************/$ U% C4 K4 u0 T& F, k: ~

  10. 6 ~6 J, K$ |. f
  11. int  EQ_is_ge (double s, double t)4 n. t1 U8 b& e1 ]# H
  12. 5 ~8 F/ Z2 o' B% O1 H0 d' t+ f
  13. {
    " b8 B* C2 j1 q& W2 Z2 I
  14. 9 r1 E6 i$ f! p/ L- v
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    $ V! O' ~, C/ E4 V

  16. - r5 A; ?6 P; ]. L9 H6 }
  17. }
    * K1 Y9 _. p# P. w
  18. 8 L2 e, ^7 R/ k; @2 x5 Q7 f
  19. /***********************************************************************/' ]! {5 d( h' K- `5 R" a0 X

  20. 5 i) Q+ d7 E" ]. i  R
  21. int  EQ_is_gt (double s, double t)/ i' X9 g/ W- Z$ M
  22. " x/ M  {5 \" b* r. B, }+ b0 z# y- j
  23. {
    9 ~- @3 y% }9 J  J
  24. 6 S" y6 o, t$ e
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }0 C/ d) S. z/ i. x' |7 G

  26. * K2 n1 C" ~7 O) _* X/ O
  27. }1 K, b' F, i7 A" M

  28. " c  N0 y5 x& ]* ]  H5 R  O& l& f
  29. /***********************************************************************/& e2 T* i% p: i8 n7 X5 v0 b2 j
  30. 6 b, _: `- E0 x8 G9 ^
  31. int  EQ_is_le (double s, double t)5 [. c* \0 ^/ J" o: ]
  32. 7 Y+ ?4 e3 ^. ~& L3 N
  33. {  A5 M/ D2 Q$ y/ a- n% P# m

  34. * s6 {4 ^2 G$ o+ Y8 P
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }7 w* d3 L# A- ]* y% |
  36. * _" T: g9 {' l/ V2 }- ~* ]3 l6 j
  37. }8 h2 I3 |- R/ m" q* w+ @3 W

  38. ' E# C( ~4 _0 c9 @( \8 s
  39. /***********************************************************************/$ a0 h, o" a& L

  40. % T4 L  s( x( h' o2 ^0 m5 K% Z. ]
  41. int  EQ_is_lt (double s, double t)
    / P1 ^/ f: H" `. s- h

  42. + B7 u# d% ]4 v3 \0 H; w2 w
  43. {: f3 b/ M  |7 s4 k1 r; x
  44. . O4 [2 x; [+ @* Y; L
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }# g1 V3 @3 v, y/ ~3 Q1 A$ Z$ x
  46. - R  @  f- G0 P% ?1 F4 ?; I
  47. }
    . N3 N# ]8 }  X* J0 B" Z

  48. 3 T+ _% @4 E% M( O1 s! v: u
  49. /***********************************************************************/8 R, c! ?, R2 X( e7 o* y) O3 b

  50. ) m6 Y. i7 t# f( ?' n% A! g7 x
  51. int  EQ_is_zero (double s)) E6 A8 i7 [) X% X2 i- A) |& P
  52. 9 y( f' U; O: p) `
  53. {) h3 l! J! y, Y

  54. 7 T" F) V) `6 R" I; A
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }/ F( l, P0 q7 W! a' @

  56. ; a$ t7 t  j! p3 E9 _
  57. }! U' r8 p$ _* u  ]4 L
  58. 1 M1 s  J- L. Q# f
  59. //=============================================================
    % W2 ~( X7 m$ B; z, C

  60. 6 B- ^. m- Q1 D# d3 C
  61. double ARCTAN1 (double y, double x )
      k0 D$ |+ d+ E$ a* d) y) u( b
  62. 0 G+ n. M% V  ?! @( s' `
  63. //#=============================================================- u" v  G% O3 ^0 D

  64. # {8 `) M$ r! B; H# u2 b
  65. {
    . v9 |; {8 J' z# |
  66.   {8 r6 o  N/ Z  O3 @/ z
  67.    double ang;' |& w5 L. b" p  s; M" l( R0 d
  68. 3 O( z- a" K; g  {" u5 Q4 b
  69.    if (EQ_is_zero(y)) { y=0; }1 D2 T9 H5 W( d3 l5 m
  70. 4 @" J5 [* v! f% G* U/ N& `
  71.    if (EQ_is_zero(x)) { x=0; }
    ( M/ v( n/ f5 D7 P+ W+ o

  72. ' A$ N4 G0 Q  @/ b. I
  73.    if (y == 0 && x == 0) { return(0); }
    ( G8 Z: h  y/ [) F2 Q! ]
  74. " q/ ]5 ^6 ^% d; h
  75.    ang=atan2(y,x);4 h/ M- u% a0 K! C& s% V

  76. ( {( K4 s% e1 }% \. f7 R. |
  77.    if (ang < 0 ) {* W/ Q; v+ x, `& h. Z

  78. ) L5 k+ _& [# J$ c
  79.       return(ang + PI*2);
    . p/ f- \5 o" J# V# i3 Y
  80. * h1 Z' e1 q0 L8 W3 P8 D" P: ~9 ^
  81.    }
    + b3 D. F, T% H+ y$ N* X

  82. 5 p& Q- ~5 Z9 f! d
  83.    return(ang);5 J& j6 O0 A4 V( ~: n. E
  84. % Y5 w- W; G; w" q/ u! p4 m* k
  85. }8 i/ @/ Z6 x! n! H: ^

  86. / x$ L1 q! O# x! b: M
  87. //#=============================================================
    3 h. x3 R+ x4 v$ l! f0 N

  88. & b- r' i% p/ ^, u* `. V% J( n
  89. double ARCTAN2 (double y, double x ); @: A& \% A0 P2 d( W+ N
  90. $ n, l( t3 P8 B6 S2 c6 x
  91. //#=============================================================
    4 i) Q( I: {9 |1 V4 i( V% n7 y
  92. - [" Q2 l9 k. Z
  93. {0 ]' d8 _& B2 d# s$ ^  b
  94. 8 J3 v) f3 K  t; o) u
  95.    double ang;2 _9 l+ ^0 y7 f, N' `) n$ g
  96. / h( l) B9 ~0 N. {% J
  97.    if (EQ_is_zero(y)) {
    0 ^% N7 h0 J9 ], ~
  98. 0 J# k! r" n* a! a" e+ @( F
  99.       if (x < 0.0) { return (PI); }
    # Y6 F5 V" V0 ~: M$ `- j0 X
  100. + ?! m7 ]6 Q  a3 a: G$ g
  101.       return (0.0);
    6 l% N* W; `; {4 V- h9 i/ e
  102. ' a, R9 o* \3 \5 k9 C# N
  103.    }3 B( O& k$ [7 ?0 n
  104. 1 m1 H' T; _+ R, c9 _. w* m0 {. X
  105.    if (EQ_is_zero(x)) {5 B, y7 U( n7 {0 S

  106. 4 }! ^, R2 F( x' Z$ y' W$ F$ n$ q
  107.       if (y < 0.0) { return(PI*1.5); }
    ; k- l: g; Z- Q7 D; D: ^6 ~/ \6 ?2 P% r
  108. ( H# s$ M2 A' O1 x6 x( P3 W9 h- v
  109.       return(PI*.5);( ~; p2 O& B( z4 E1 V8 w9 L
  110. 7 m# s! _& z5 D5 K
  111.    }/ P/ x# a( q) r1 G

  112. 3 a$ B! P+ l, m1 }* o
  113.    ang=atan(y/x);1 S4 |# m' R/ e; i7 U
  114. 8 Y% p% s* _; p
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    * }' \9 C0 P# M  k* @

  116. 5 M; @' D5 }+ _4 I$ X
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    * h$ J# T% r/ U$ n6 Q1 N
  118. . t( a0 ^! @# {# }5 ^+ X3 n8 }5 d
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }. Z/ t! K  u- F4 d, m# i$ I
  120. " q4 L1 M8 z  j% T2 R# D
  121.    return(ang);
    5 I' Q% v9 D; A. T* z
  122. 7 W; b0 j$ N+ ~' h2 J* u
  123. }! u# M2 z/ u" j8 x' W

  124. ; n! S8 U, [: b, m
  125. //#=============================================================& [3 P" y: ]- Y

  126. 3 k0 H* H# W( Q( x& o
  127. double CheckConst ( double angle, double constvar  ); B, r6 }2 q1 R+ m- s

  128. % l) u' ^! Y& U$ d
  129. //#=============================================================
    , |: `" e! Z$ e/ p7 q
  130. & m8 X3 Y( N$ W- |; _2 I. Z
  131. {8 ?$ p0 y+ K1 n' K% v
  132. ; B; F8 C( M: Y( B0 E
  133.    while (angle < -constvar) { angle+=constvar ; }
    ' V; V6 k& L1 Y" O( Q0 u* w/ t- W
  134. # V/ D& L4 E% W- M  }' P8 [' s+ r4 C/ u
  135.    while (angle >= constvar) { angle-=constvar ; }' O: {9 P( s; `. ]% z- x9 g
  136. 1 j7 j0 T' x6 a# l8 L) l' ~
  137.    return (angle) ;
    " s4 p+ a8 o8 X. u9 J/ [( r" W( v
  138. ( e" G2 f1 G; o2 y! m( b
  139. }: b2 L% u4 S3 l

  140. 1 e. s4 K7 v5 g3 h2 K2 l) j
  141. //#=============================================================( P- e0 V9 a" Y4 A( a% s! y6 L
  142. . \' y% E3 i0 @2 P( z2 E
  143. double Check360 ( double angle )8 ]7 q" U* o( o1 r

  144. ( B+ X- x; O7 K2 F/ @8 E1 K
  145. //#=============================================================
    4 D* V8 n9 m6 B
  146. - u/ W6 G* N2 I+ y- ~
  147. {
    . P0 A4 ~# Z! t1 {9 a
  148. : J, I$ ]/ }) I
  149.    while (angle < -360.) { angle+=360. ; }
    ( j2 R" z. G! a8 h0 t
  150. $ B7 g; ?8 }/ K% P+ D; k" b$ S+ P
  151.    while (angle >= 360.) { angle-=360. ; }
    9 q- |" W! s9 s* [) `

  152. . m6 g2 L+ W: l" a9 P4 a) F
  153.    return (angle) ;
    2 E' K% S1 H' v$ Y- t" P& V; `9 P

  154. ( C3 X& X: r/ P, O) I
  155. }
    : e5 Q0 y! {* [$ J6 F
  156. 3 w4 J8 F) k3 E: m# ^! }/ i8 W
  157. //#=============================================================2 P! W6 G, v: a3 R
  158. % V" x# }& q% f! R* W
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit ). X4 H  w, u7 Y( K% a, @

  160. $ _: K0 W& U! G; s; ^3 i
  161. //#=============================================================
    % a+ K- c3 K3 S+ f2 C# @& q

  162. 7 o9 r7 S; Y6 y, ]1 L( B, {5 j
  163. {- _6 [7 z0 k1 l. A" ?

  164. 6 r( r! e1 ~3 v3 U" Q
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }% g! m* ?+ x& y6 l
  166. ! N5 C/ \8 t# a! i0 R3 V. U
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
      W0 p& B9 w) c( G
  168. 0 e8 s1 p- G5 D1 ^
  169.    return (angle) ;/ m4 b2 P# P, }! e* m* e2 F% ?

  170. 0 Q( L6 q* A# D3 I
  171. }
复制代码
; J/ S& b9 z. q0 |. o
以下为摇篮5轴计算过程代码
/ ?+ A( w- c% U( G8 s5 y' N0 Y
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    6 a& C, X0 n  b9 U
  2. - i% Z( ?  \4 E5 }9 w/ F5 O- P+ n
  3.          j=0.; B1=0.; B0=0.;
    ! p+ b+ ^; y7 @4 L. [- g* E7 G

  4. : B* L) s  r* s2 D" p. Q: ~
  5.           if (EQ_is_ge(i,0.)) {; a% C  Y3 w9 u5 H" k

  6. " J$ g# h" Z4 A
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    + \/ ]/ `8 w; x0 L. H6 V2 J

  8. ' E1 j. _, \6 X3 \+ T
  9.           }8 i  c9 y( ]1 p5 J- c3 v& i' Y

  10. ! Z. c# V( T3 J* b7 F% ^. q5 x
  11.           if (EQ_is_lt(i,0.)) {) @1 w  `& U" _5 P4 g/ q

  12. 3 d3 R# L0 W# D
  13.              if (EQ_is_lt(k,0.)) {
    9 N+ w% a, s- n4 l% `

  14. ' \2 M& r. h! G5 e8 M
  15.                 B0=atan(i/k); B1=B0+PI ;
    1 H# _# h5 U, d- U
  16. 2 N4 S4 @! [% H: i, K
  17.              } else {" x5 O$ I3 N1 ]  J. ]
  18. - G" S; z" d; G- j+ O& i
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ; K) @5 f) O: P; H9 W
  20. + V/ j. l2 `, `* f' l; ]- @
  21.               B1=2.*PI+B0 ;
    ! \7 j4 \3 H8 h/ L  s

  22. 3 E4 D5 a8 H. d
  23.              }
    $ ]( ?, K9 _4 v* I* r3 c: M

  24. + o( P9 e! X- M# i3 T
  25.           }
    $ a3 K$ E5 k% E( Q* `+ ^  I* ~; r, p

  26. & p* N6 o3 x* A% ^
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;( f8 k# Z  U6 \9 ~7 E: o: E
  28. 2 ?$ O7 z4 J# X7 D
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));2 T; w8 \- j* t) w! ]+ h* X' ?
  30. 0 S1 v, b. _7 v7 w8 ^* g, n: u
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ! X9 v6 L8 z& Y- r7 J( X* R

  32. ' `/ x% Q9 c, [+ V+ Q
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

3 F: Y7 M  d7 n" ]& D& T% @7 @通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。$ V" }; k, t$ p' p/ U& [

: n3 \6 U" c$ v$ j2 C 640.png 1 U, S0 ~0 K3 J9 r# ^0 t  b
测试结果:6 N$ A+ n1 o8 v9 U, Q+ }
6420.png
' Y. p. l, r. N- k# E7 j3 t% K2 Z6 N
; a1 ^5 e8 C, i1 h9 o4 O$ m反向测试结果 6410.png ) Y- T" b2 T, O" x. P

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

275

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-25 22:51 , Processed in 0.730053 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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