找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6760|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ) G- Y$ _% a/ G1 G
  2. int  EQ_is_ge (double s, double t);& p/ V! D: b4 z1 V3 G- m+ o
  3. int  EQ_is_gt (double s, double t);
    # n0 a+ {! S& |# u4 G8 q
  4. int  EQ_is_le (double s, double t);: e8 @# Z* g6 Y
  5. int  EQ_is_lt (double s, double t);
    2 M" |4 s  @' |. [% b0 c1 m1 y
  6. int  EQ_is_zero (double s);
    : L+ s& U' J  M) }- C
  7. //=============================================================: w4 H5 n7 ^8 N, v, \
  8. double ARCTAN1 (double y, double x );
    , a- L- ~) i$ ?7 z+ O) z4 ?
  9. //#=============================================================6 R+ l+ Y1 {; y2 m
  10. double ARCTAN2 (double y, double x );
    ) K4 Y- o! c2 Q. ~6 U% U
  11. //#=============================================================
    3 t2 i9 ^1 e* q' ]. E3 B
  12. double CheckConst ( double angle, double constvar  );
    3 _) [4 Z2 Y6 [
  13. //#=============================================================
    8 I8 M! y4 Z& Q0 U
  14. double Check360 ( double angle );
    2 c' Q4 M/ N/ V0 C. W  G; G5 p
  15. //#=============================================================" D" b; K- W4 q* V; e& T, S
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );1 A" a0 }/ C5 v3 o! d+ {
  17. //#=============================================================
复制代码

) y- a6 N. b% H* p0 j0 Z) U) x/ L以下为部分源代码,用于判断,计算角度等( ?% B, V# @) M% v7 k  x. a
  1. int  EQ_is_equal (double s, double t)
    ' M: O7 S) t/ e
  2.   i1 C/ y' {+ n: V
  3. {
    . j  A. Z0 m* E5 Y; @
  4. : e0 H# |$ w# L. }: x
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    / X$ Z% {5 |; z5 V- C2 ^: E: q) A1 o
  6. + ?! I# z7 d' _9 l2 r7 |5 o* R
  7. }
    / [/ ~. R* h) `2 M: x

  8. & @& z& p- N1 e$ A& b9 I- J2 z
  9. /***********************************************************************/* h0 a! N! K9 I  s# i9 C

  10. ) N& \/ f+ I0 a* X4 h# `# V
  11. int  EQ_is_ge (double s, double t)
    8 w3 W# q8 c' S0 b* I4 i. y1 w: w
  12. & K8 I, \' c2 x- V- x
  13. {; K) f1 X3 E/ ]1 o( W
  14. : J) i" X% S' x$ G% C5 V
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }9 T4 R+ b) I: m; Y4 r: E
  16. * B; K$ G: b4 c+ @
  17. }
    8 t% Q( u0 a; u% T
  18. 6 k1 @# d. C4 W5 R) ]' ~
  19. /***********************************************************************/0 n5 i1 |- Y  T9 f

  20. & e% U* r2 @. R: _
  21. int  EQ_is_gt (double s, double t)7 Z9 T5 _( F7 J5 P4 o
  22. ' v' \8 W& x0 z5 P! e+ i3 x' @
  23. {' N0 u' ]; R' S$ X
  24. ! X5 W* B6 C# M" U! X8 X% o
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }9 ^, l. ~' {% }& n8 C: S
  26. ) K  P2 d3 S% T% x
  27. }
    8 u0 s7 T% o  C: s; X3 u; A4 }

  28. 5 B$ h, N4 o* L4 G  U2 b" E9 H
  29. /***********************************************************************/' m; u8 v" o% z# Y- ]$ n" q5 a

  30. , J1 O. O, @% u- P1 e7 ^  f
  31. int  EQ_is_le (double s, double t)9 q/ O8 i6 ?$ {9 ?3 T( s

  32. % z& `. u# v1 J
  33. {
    9 k6 o  `/ j, P# i3 P2 u

  34. - Q+ y5 T# c& d) Q, ~
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    2 i' r. l- l# D

  36. - F2 `( F6 O# f) n3 B
  37. }2 L$ D' f% R6 m8 }% e; A

  38. 6 H) q7 j8 o' [$ Z
  39. /***********************************************************************/7 k6 A0 {$ G5 u* g

  40. 2 @1 C8 q7 P) P/ T* k# Z/ Y$ ~  v6 |
  41. int  EQ_is_lt (double s, double t)
    2 n( x* M+ x# l) Z0 O
  42. % Y( O' y" M; t
  43. {
    0 ?, S. f) x4 i  u5 r
  44. / y. v5 a7 N! V  b8 y9 ]6 Z% }
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }, t! M! V! v; @1 I& g1 b8 F

  46. 8 a( f* D7 j  r; S
  47. }
    & t# f$ V( K- F7 G' z8 P

  48. + K' t2 f! L' g! g, s0 H" x
  49. /***********************************************************************/
    + z/ ^8 P$ Z4 N1 S$ j! y0 i4 M) v

  50. 8 b4 @8 ^3 t3 @. j( T$ {# [4 x! p
  51. int  EQ_is_zero (double s)* y/ r% p8 Q' ?4 T  `& h! q
  52. & m' K# V: r0 c* ^) Q8 z
  53. {
    9 }. |5 R+ c( R, b
  54. 4 |$ e& W! \  g1 C! U* Q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    & N) m. `" j* Z

  56. , k5 ?- Q  I9 }) v5 F1 \) r
  57. }4 d& J$ z) ?. i* J6 J

  58. 6 O. V( u+ y; e) C7 n% l  A* j$ M* v
  59. //=============================================================
    / S$ K5 _+ D  e/ E# D1 T3 L

  60. " I9 N1 P. k' [$ O
  61. double ARCTAN1 (double y, double x )
    4 ^# W8 q! K" ~, s( M0 c, f6 b

  62. % `! H; ?& _6 T2 L$ M- v
  63. //#=============================================================
    / Y% Q  Y; }  V/ e  ?  e

  64. 9 M* V: i9 f% _9 `' H9 w
  65. {
    % A  W1 J5 Z) l

  66. 1 f- _0 ~$ T0 r. \. f" E
  67.    double ang;
    ( }  s* b; J; n' s6 R' ^

  68. 1 z/ }" K3 f7 U
  69.    if (EQ_is_zero(y)) { y=0; }6 x" d/ _  R2 l7 h

  70. 6 a. J$ H' \# M( r! Z
  71.    if (EQ_is_zero(x)) { x=0; }8 R+ O2 L& b, f0 I

  72. $ T7 c( p) M/ g
  73.    if (y == 0 && x == 0) { return(0); }
    + x* f+ q; D3 ]: ^/ a5 \1 H& j- A

  74. 0 N7 ^0 D; m1 t( Y8 N* ]
  75.    ang=atan2(y,x);# J2 F+ \' h& ?- J

  76. 9 t( A8 o8 C/ Y/ Q
  77.    if (ang < 0 ) {- F. D. g, V# k9 H+ U: Z

  78. 3 {! P1 ]& A4 V7 e9 O( y4 C, B
  79.       return(ang + PI*2);, k. P! L% {0 U3 F( ]0 S

  80. 5 Z* q! M$ {# {3 M  O3 {/ ~6 [
  81.    }3 ?& g# s1 V; S3 @$ }1 S7 k9 u2 n
  82. / V$ l* ^+ _; B
  83.    return(ang);& v: F' Q! h4 \) y* K, U$ a
  84. : C8 a' `: o& i& a
  85. }6 t" f/ m2 d9 O6 U
  86. ' ^: I9 I+ @; G& E
  87. //#=============================================================
    6 _8 J) ^8 x: `% b6 H1 t, p6 A% S

  88. 3 C( x- j1 ^  U, ?6 D3 p) ~
  89. double ARCTAN2 (double y, double x )
    ; A  {) |1 V- ~9 X' Q

  90. 8 [2 V, R, f  o7 \% u1 V7 C9 F
  91. //#=============================================================+ d2 n4 Y3 m$ p- Y

  92. " Z. ~; X0 f1 z+ @, m
  93. {
    ) u% h6 h$ N# s! q/ U, t% a6 W
  94. : w$ Q2 `, C7 e6 D
  95.    double ang;* s' a+ }5 U) T7 d
  96. ; [& M0 y3 H4 K& F0 H
  97.    if (EQ_is_zero(y)) {# |% \6 `+ t. X, x
  98. # j, B# N4 @# J" p/ K5 D8 n. a
  99.       if (x < 0.0) { return (PI); }
    ) Q5 X% Z. o6 Y% h5 z( w

  100. 7 x& h) }( j; S  u& h
  101.       return (0.0);
    ; K. k% g  K' F/ O- G/ s: }

  102. 5 u: B, m9 ^3 o' q. |# V6 |
  103.    }
    : Z# H' Y+ g% U/ t6 R2 T

  104. % L, \" w5 m1 `2 r5 O* O  N
  105.    if (EQ_is_zero(x)) {
    9 r1 I+ d$ l) E5 z, [

  106. ) e6 x- g; i8 ?0 y
  107.       if (y < 0.0) { return(PI*1.5); }
    ' }" R+ J' }* ?7 o. j$ [

  108. % v+ J, P( H. X; w
  109.       return(PI*.5);
    ; |8 z* i/ ~# ^/ m6 l' ~
  110. : J, I8 ]5 _4 |
  111.    }9 d9 q2 I+ \8 r" V$ f" X) ]
  112. 8 i' W2 I- G6 f  A4 W
  113.    ang=atan(y/x);
    9 M; q2 D3 I+ {# a2 N7 Q

  114. % z3 _4 H' D$ K! m  y+ R
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }2 h" S9 }! @$ r

  116. - R3 R7 s7 @: _; k, I. I
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    8 `9 ^3 D3 y, ?0 {% j

  118. & x5 v1 h1 r4 J* h5 x
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }9 J/ f0 L, X3 Y

  120. ; O/ p; S/ }. z* H% R. ?: p  s6 H1 o
  121.    return(ang);
    # D9 n8 R; ?  r* T
  122. 4 l/ u* S2 \# J; ~6 h
  123. }
    + E6 c) N1 K4 X, }0 P
  124. 6 w% g# c/ Y# ^" t6 L% I
  125. //#=============================================================
    % }* I/ \. c1 i$ U3 U

  126. - P" j# x* J% Q3 C7 {
  127. double CheckConst ( double angle, double constvar  )
    + b& a  ]( o% G7 d
  128. , B' t! z, n0 A2 k
  129. //#=============================================================
    : G0 H7 H* @: ~" ]' I

  130. ) w1 ]7 K6 f  n0 E/ {
  131. {
    ! C7 M9 v9 e3 e: U/ U- V" R- T0 p
  132. 7 J( l7 a4 |! X- r" W8 K
  133.    while (angle < -constvar) { angle+=constvar ; }
    4 v2 f" F( X3 m

  134. 2 F4 B8 o5 @' s* s4 @
  135.    while (angle >= constvar) { angle-=constvar ; }: F2 g# b" `* {  B+ g7 f
  136. 5 Z2 h. `7 x9 E7 u' Y. l7 F+ W
  137.    return (angle) ;7 k: X9 |/ A8 h  M
  138. 5 X9 B% m6 A2 g) q
  139. }& p  }) E& A' g

  140. , I+ B+ q1 G" G7 ]2 Q4 L
  141. //#=============================================================
    , ]) X. z& D! J5 P2 [4 s( ?
  142. ' A8 @' F- g0 y4 n6 C4 {% `8 ]0 F, m% |
  143. double Check360 ( double angle ): f; S( x) \( {) X7 t

  144. ) C/ u" U: b# k& `- m" e
  145. //#=============================================================7 K3 S. X7 Y& F3 @3 f

  146. 7 m9 d; v! \8 S: J( P- b
  147. {# m" f, n/ j% C+ S" `( D
  148. ( |. H4 k% s) q
  149.    while (angle < -360.) { angle+=360. ; }
    7 X7 r1 g7 G1 Q+ `1 K1 z
  150. 7 z& b1 }, b# C0 l
  151.    while (angle >= 360.) { angle-=360. ; }
    9 h) n8 v; X$ }# t

  152. & P4 n, P% Y1 K. A
  153.    return (angle) ;
    + c+ d. b/ B( h* g6 ~. ^$ N
  154. 5 J2 ^! @4 h" h2 h' r/ e0 Z
  155. }
    ! d7 O9 |5 [! b% Z- c

  156. ; Q9 I1 f& G+ f, P6 O! u: ]
  157. //#=============================================================
    5 q  [% o* C9 ^, B

  158. 9 k% U$ Z- M% e: L
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )1 N0 U% j5 Q2 V) e! [
  160. $ t4 F0 P( |9 _/ L& x$ T
  161. //#=============================================================+ c: [& {( D' j1 U# I
  162. / g8 C9 w! _6 F6 ~" [7 F8 e# G- t
  163. {% |1 [+ A5 ?! v5 E+ v( m

  164. ( ?- n. K" G4 g; X1 ?  J
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }$ j: S6 Z7 p8 z* P# L9 {! O
  166. * c+ {- D6 v1 @7 Y, b
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    : C4 H  n/ R" ^" l
  168. 5 Q$ ^# C) J8 H* d! W4 o1 l
  169.    return (angle) ;3 y* f+ _1 }  @+ E3 _4 U. i+ D, ?

  170. ' Z# I" }1 G/ b- I
  171. }
复制代码
1 x0 c8 O/ |* O! m# |* e" q' n
以下为摇篮5轴计算过程代码( q* O" H: Q- |
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    5 r2 v8 U+ i/ r" ]& P1 m) ^. B8 Z
  2. 6 @0 @6 J7 ?5 c% ^+ _% q
  3.          j=0.; B1=0.; B0=0.;- C; |+ s* y. j# \6 ]8 d' K+ q

  4. 3 P8 ~0 s% {% g; j
  5.           if (EQ_is_ge(i,0.)) {
    9 I: |! N/ A) ?% b- E- H
  6. 9 _  T3 `6 |8 J7 N0 K- M
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    . l3 @" H/ p6 U( v2 E" y+ I
  8. 0 N1 k: |8 R) J) e; y% q. B" }* h) i
  9.           }8 d+ e8 u- _; q( q5 R& K7 u2 s
  10. 5 t8 o. x; L6 L( O. |$ m4 V
  11.           if (EQ_is_lt(i,0.)) {( X" |5 V5 c) S/ j6 _

  12. 2 ^- _* I( I! B$ j8 {
  13.              if (EQ_is_lt(k,0.)) {& U& @  \7 f; h" @; J% z8 h/ t$ l

  14. & w  Z* ?2 ~: K+ q  q& I
  15.                 B0=atan(i/k); B1=B0+PI ;6 L6 z$ F: n) a+ b( t. N

  16. 0 |% @3 n' j$ `9 b+ P" M7 Q/ ~
  17.              } else {
    # Q7 X# i1 [2 A  p* {, F! ?: A
  18. & L+ W. h( n6 a0 H8 x" I) Y
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    : }! N: n) I9 U. Y. w5 W0 |

  20. + Q6 _  G1 d+ i2 f8 d/ d1 Q
  21.               B1=2.*PI+B0 ;# l4 X- @* l  l  R2 K4 S

  22. ; s! |! s3 Z% ?/ P
  23.              }
    5 s3 E) c! K4 ~, @4 h0 m5 `
  24. $ ]: w# ^  Q) ?  Z4 e
  25.           }
    3 i8 E+ ^5 n6 m
  26. 6 V( S( s. a' O. }" Z
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ' m1 Y( u4 w# f" b, x: X
  28. ! [  M& Z7 V/ J; g# R
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));( X/ M3 ^. E" d7 K2 M6 l/ O$ ?

  30. ! D8 V2 E' `2 J
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;2 c. P! s: \. X5 U0 N
  32. 5 s8 q5 y. E" X
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

! p* g) W% U& O2 b( g9 r1 i7 m8 b* h通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
# ^1 ~8 X( M) N  ?* W
& ^/ y- V2 U: g# s4 x. f 640.png
! p# h+ T2 c* B8 {, g1 @% @4 J1 o测试结果:3 i6 s! W2 @+ K1 l8 F3 U
6420.png : E4 D( g* J# ~9 C
: e. l& H: n6 f+ D/ W5 M
反向测试结果 6410.png
3 p: W3 }# [, j1 G

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

193

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-26 04:15 , Processed in 0.188554 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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