找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8042|回复: 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);
      D" |$ I% o+ B5 W# d  I$ T2 @
  2. int  EQ_is_ge (double s, double t);
    ' O6 a! F; t& b) C8 J
  3. int  EQ_is_gt (double s, double t);
      s1 U- J  P( e$ D2 n6 a
  4. int  EQ_is_le (double s, double t);- h  N; t; r2 h# E8 Z( @
  5. int  EQ_is_lt (double s, double t);4 \2 [: O6 \- g3 _/ X5 x; g
  6. int  EQ_is_zero (double s);
    0 f# @# r' B( e5 i
  7. //=============================================================6 T  X2 w, e2 O3 P/ }
  8. double ARCTAN1 (double y, double x );& i$ U% M* N7 S. _
  9. //#=============================================================/ ]' r. F; s( i4 {1 N
  10. double ARCTAN2 (double y, double x );0 R  s9 D* ?; y
  11. //#=============================================================
    1 z) {2 L* }0 }5 y: t
  12. double CheckConst ( double angle, double constvar  );8 U  M5 z2 y$ Y
  13. //#=============================================================
    ( s+ D- O% |8 N- {
  14. double Check360 ( double angle );
    , }/ `9 F4 Q3 R
  15. //#=============================================================
    & {/ l( w2 R0 Z5 N: ]8 I, W
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    $ R5 s/ E; B5 H7 e4 K5 A
  17. //#=============================================================
复制代码
: z( {2 P* E3 Z, G% i8 k
以下为部分源代码,用于判断,计算角度等7 W0 }& k$ ^* [6 W0 M8 B
  1. int  EQ_is_equal (double s, double t)7 t1 L1 o* l3 x  {* o% O# g

  2. 6 Q# I% v. F. p1 v3 R
  3. {
    6 }* x* [/ ~# A5 D+ |! ^
  4. $ o9 g$ I3 ]% q1 G) R, M
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }5 D, p- E9 G8 b, M0 m* v6 E; u. T1 C

  6.   `. d: Y9 L# w. e4 I" T- E* D2 ?
  7. }
    ) L7 @" A8 |- u% j
  8. 8 O1 s7 C+ ?& x9 F) G
  9. /***********************************************************************/6 a( T' u' J; y3 L' H9 p
  10. 1 e+ T3 _+ m% [5 e! h2 \$ S
  11. int  EQ_is_ge (double s, double t)" r6 w# T$ Z6 c: @% a0 u

  12. ! P2 i8 b" g! R, i0 j( E% w  |
  13. {
    ( A' p' ~- X! C, E& v

  14. & V3 C+ M2 Q1 x  h0 X4 a
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }0 O! G* ?4 u' t1 g

  16. / f6 O5 ?1 i+ A# d
  17. }
    . c, |4 ]$ I1 X7 e
  18. " X' _, l* p% j1 K
  19. /***********************************************************************/# y, y* k+ x' l* }3 x* j, o
  20. ' X; b" v" a: e* f- t3 I* o
  21. int  EQ_is_gt (double s, double t)' B5 M, v! V; r# E5 H

  22. # Q/ y% r# Y3 S" J
  23. {
    % y, Y( n; ]  K6 i2 P4 _, N
  24. ) x' M3 ~/ C% g* W, N5 u8 g
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    , e% ?! r2 R, d6 S
  26. ! n& Q; W6 H& g; O5 K' m$ r  d) \
  27. }5 o1 D9 h: r: B( }1 z  \

  28. - o% j' a6 Y! M, Q3 o9 L" ]
  29. /***********************************************************************/
    * N" B0 {5 i: M1 ^

  30. / ^5 m8 {! E8 C3 ^. f# B
  31. int  EQ_is_le (double s, double t)
    ; a2 a- @7 i4 t1 g7 b/ V

  32. , r/ r. N7 f# s: l6 q. ?, y  P
  33. {/ c1 N' Z" a$ E/ L3 [0 B

  34. 2 Z6 h4 `# Q+ Q# Y, b
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }* t/ v  }# r+ D+ f& H

  36. 5 L7 X5 ?0 g" j& l
  37. }. P$ o7 C" K. h8 ~; Z
  38. . S0 e. t* ~0 y: C
  39. /***********************************************************************/& V' A. j2 U6 _1 E  {4 v  o* N* u
  40. # h' L6 K/ c6 o6 u, l' Z( Q
  41. int  EQ_is_lt (double s, double t)
    ) A- n( c8 \0 E  k

  42. 8 @/ @/ [/ b! b* b) a: B# D% N7 D9 P
  43. {
    1 y7 Y/ ^, C! D! |7 q) ~

  44. : l" [# M! a0 P* b: i
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }: _0 e2 h6 G- T5 J) C. x

  46. 4 W! a8 h7 z0 r  e3 B
  47. }
    ) J- |' t! @! p( z9 d& j& Y
  48. , c0 l5 S1 {7 q
  49. /***********************************************************************/
    % n9 j% t5 U- r$ J
  50. 2 D) s0 [2 j9 c$ U  w' h. ^1 Z
  51. int  EQ_is_zero (double s)
      n! ~: d$ L; `& S: P% s
  52. . p; T# {$ u. E* e( `! C: H
  53. {
    4 \: X/ Z2 v) [6 O) C6 M

  54. ! o+ ?# ^7 i, [9 \
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    1 D" [) @6 C0 {$ |" K, ~( H" j
  56. * J+ }" r( A" ?' z7 [! n) G
  57. }
    ) ~& i6 B) S8 L1 u1 Y5 ^! |
  58. ( H& P1 n) C* E& r, [
  59. //=============================================================
    - A: M, M2 l6 V: r- v+ s& C
  60. : Z7 o" _& ]3 u; Y5 t- d
  61. double ARCTAN1 (double y, double x )
    + z; S) q2 x% o6 g2 L6 X
  62. 9 D# K2 G4 y7 I" z! j+ ~0 P
  63. //#=============================================================
    7 H9 _- O7 {+ q; ]$ j+ G! S# M$ X* e

  64. & c: b0 c7 W- e6 g0 g9 V3 Q
  65. {) I2 d! U% @1 q9 d' U/ O

  66. 2 T2 T3 |, U- `8 J6 K3 B8 }2 K
  67.    double ang;6 }5 p9 a1 E) k$ q; H1 e( p' s; l- ~

  68. + K0 r( P; X$ s
  69.    if (EQ_is_zero(y)) { y=0; }3 K7 |+ G% ]- w5 a* h
  70. ; m% \2 W! w# n' o
  71.    if (EQ_is_zero(x)) { x=0; }
    " @  _2 g/ J3 Z$ M" k+ Y* L# H
  72. 9 P' [# h( q1 J) n* ]/ D4 Q! d
  73.    if (y == 0 && x == 0) { return(0); }# f/ T" }4 ~% s0 p
  74. 1 o9 @7 g  U* N( t1 s- c# X
  75.    ang=atan2(y,x);
    - B: @, r- F# k
  76. 2 u" D. [; S. ?! y2 u/ R3 i
  77.    if (ang < 0 ) {, m' P: ]2 e8 J# w* ?

  78. 6 \; x" r2 q- d7 ?' w" Q3 u
  79.       return(ang + PI*2);  J% S" _( v, ^  R- k
  80. % g; c3 o7 `: E
  81.    }
    " w2 @8 k7 _7 n* [

  82. * v0 m  d6 |, z' k3 h, m  n
  83.    return(ang);
    6 H, ]1 N5 {$ D8 l
  84. - Z4 u! G2 L% W5 E( B+ Y
  85. }
    ; F' F4 b. k6 B$ V; E5 b
  86. ! W7 A5 B+ s5 w$ K
  87. //#=============================================================
    ) u% e4 N1 z/ z% {6 `, M" y8 I5 f
  88. 7 d+ ~- J0 P, f, k' X) ?& c
  89. double ARCTAN2 (double y, double x )
    * v: |' w- @  t% t# Q/ A0 q

  90. / S- O0 i' `; i0 {9 w$ V) W( B5 a7 j
  91. //#=============================================================% W8 j' ?# O- g" }! y+ z8 O3 I3 J; y

  92. ( J( w7 u' ]. _4 y$ L  I
  93. {- P0 ~! a( H- L8 }0 }% L4 h7 L

  94. - j; ?. T, l/ S/ o) ^
  95.    double ang;
    6 A8 ^% \  J- A3 h! `

  96. 2 e" \0 Q% L4 O' h5 B. w+ j4 {
  97.    if (EQ_is_zero(y)) {& v, G9 D6 {& P0 ]  M0 V0 b

  98. : P- U# N0 X  C1 \" A1 |
  99.       if (x < 0.0) { return (PI); }
    % n$ g- T2 f; S4 S3 d7 J$ M

  100. " z+ R. n( w: S7 n
  101.       return (0.0);
    - x1 _3 s( Q9 a/ D& h5 S
  102. 9 {( H9 T* y' t+ B' F
  103.    }, V% }0 J1 ^0 }# n# _3 C" t
  104. 0 z! s" L# S+ \# m) z9 z/ t- F2 c7 V
  105.    if (EQ_is_zero(x)) {6 \" ]1 H7 \" C+ u  J
  106. 1 L  Q$ U2 z" R' G1 u/ w
  107.       if (y < 0.0) { return(PI*1.5); }
    3 c( t' H. j5 i: O: s" J5 T1 z' b

  108. 9 R! S: d: }) C4 t, {& u
  109.       return(PI*.5);2 B3 `9 s8 @0 I7 N; c. `% d
  110. & b+ D/ L5 y# o9 k. A+ W
  111.    }
    5 a; n+ v( ~; o- X( }4 J
  112. ) L, c4 `9 {( j: i5 e& w2 e
  113.    ang=atan(y/x);6 _; v8 f( q. m& H% ?7 D

  114. & {0 J7 S! u4 ], q
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }+ ^  e. u2 v1 o- q
  116. $ @  }# N+ T0 [( _+ z3 N8 C0 T' w
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    9 e% l8 E( D; C  H& C9 k4 S

  118. ( t+ f: ?  X4 d4 y2 a
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    , O0 I1 U: [) e( v# r" u- r
  120.   T  p" U1 f- w, `
  121.    return(ang);
    + a0 U* W2 }, E
  122. % ?+ X( i! x4 x0 @$ ~& ?. g/ C1 k8 x
  123. }2 Q. Z  d$ m& ~4 ~4 h& E3 p
  124. ! z8 T- K& K3 y6 }: C
  125. //#=============================================================
    , ?' \/ \6 Q9 w% F/ |' F. R/ [
  126. ' c& Z& U/ s9 W1 F: i6 N  X
  127. double CheckConst ( double angle, double constvar  )
    + M4 N5 W; ?0 d& h$ a- ^3 J5 x$ G+ H

  128. 4 I6 j7 G7 K$ k, C& B3 V
  129. //#=============================================================
    ) M6 F# ?+ B/ Z7 \: t2 {9 i4 w- c
  130. ) E, P" I3 u8 Q, B7 }; H
  131. {
    ! Q( a# X- Q! g" y% B9 b

  132. 5 N, x! H' o, b- u, j
  133.    while (angle < -constvar) { angle+=constvar ; }
    5 s' B' X0 h6 ?+ Y9 \! `5 A9 |

  134. * k- O; {8 v# Y: X
  135.    while (angle >= constvar) { angle-=constvar ; }3 b2 o; V: T, {5 B- E8 R

  136. 7 F: U7 o% J: B; m4 q
  137.    return (angle) ;
    & A4 b, l. g" f, g. O; @6 ^' D
  138. * T1 _  v3 S; o4 c; I* ~7 l# l
  139. }0 L6 i/ O# e% M0 E

  140. 6 ]+ w# P3 m. H" {& s
  141. //#=============================================================  b$ M) C8 R! ], G2 z( [' s
  142. 9 z1 f% h  J" d9 G( ?. Y
  143. double Check360 ( double angle )9 Q2 D9 h% o' m  J
  144. ( E; {8 r3 {! v. m7 t4 V% g% q
  145. //#=============================================================
    / z! }0 Y1 u3 T

  146. + m8 G: I' Q. d% C& |0 S- V! J
  147. {; l, `; d, w& }& l  ~' b% u

  148. % D  Z+ F! \1 a0 `8 c
  149.    while (angle < -360.) { angle+=360. ; }3 I0 P) H' Q) {+ G( Q' i2 A2 Y

  150. * T" l# d3 U5 E6 c$ ~0 f
  151.    while (angle >= 360.) { angle-=360. ; }
      \0 I& d" A% o2 y! S# E  a7 |

  152. , O* |+ C+ @+ J- U7 ]2 x7 v
  153.    return (angle) ;; ?+ I' k6 y$ y' B: l6 \; o# A- K

  154. , K0 J, b) H+ b7 P8 ^
  155. }7 a7 g  X* P) Y, c1 _
  156. + w* c5 x% B" I- {, _# @) c* M
  157. //#=============================================================
    ' j8 e" j& n3 O
  158. ; u. S7 n& h& ?& ~7 Y
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit ). p. ~+ D3 z" _4 f& O  h
  160. 8 e0 m7 z2 ]- N3 a  X
  161. //#=============================================================
    5 j  v0 C2 p; J+ ?% S6 a
  162. $ X3 m- [, G; j* w0 N  q. n
  163. {
    ( l1 ^7 c' f* i2 S4 V

  164. ' e5 Z. z$ s% T) @8 G7 U- C
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }* c& U; x7 [4 E) ?7 l/ w: B

  166. % v/ N3 m5 _% n. y
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    / ~# \4 K) O) I/ R/ i( ^
  168. % ~6 F1 e  D3 r+ e  z
  169.    return (angle) ;
    / B) p$ c# s5 l

  170. " s8 \# a) I3 Z" \. ^
  171. }
复制代码

+ r; l# V3 ~7 x. l6 ~7 ?/ v+ v以下为摇篮5轴计算过程代码) m3 V5 P! ?' B. f* t
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    5 P6 |) ^* ]  s
  2. " {1 Z' x- f; h) [( c
  3.          j=0.; B1=0.; B0=0.;
    " b6 l3 o6 E- M: {  t, x/ A
  4. , h+ }( D2 U* `1 @9 Q8 H5 D# T- Y
  5.           if (EQ_is_ge(i,0.)) {
    / n# }1 D4 j" @* x$ w
  6. 2 `+ p7 r/ F) [3 r- I- L+ N1 P
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }6 H$ k, q$ K4 u+ }0 ?) d
  8. 1 o) f: m! v9 t7 x" q
  9.           }
    : P, r6 ^4 ^3 o3 B0 j6 i

  10. ! s2 S3 C1 {4 I9 L) j; ~) K
  11.           if (EQ_is_lt(i,0.)) {8 b: l6 b7 Y7 z3 B

  12. ; c6 k! e4 e4 h' ^- p
  13.              if (EQ_is_lt(k,0.)) {  F/ |  j7 p6 z& u  z8 d
  14. 8 W/ n0 B: ~; Y
  15.                 B0=atan(i/k); B1=B0+PI ;
    0 {2 u5 n! D( S; Y- G& j8 d- ^

  16. 5 v0 S4 d0 m4 v# r; k) N
  17.              } else {
    & g3 c& p2 ^4 I. s. t" j8 F( y9 i, w
  18. $ L4 v5 v% ?- x, o
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }$ `9 S: |1 T3 v6 t: F$ r

  20. " u3 K2 c9 d( q5 P4 p# m* {# e
  21.               B1=2.*PI+B0 ;4 Y* U/ u  t. {5 G" n" d

  22. " T$ u; |) `6 X4 A
  23.              }
    ; U+ W' E9 B) J. Y$ ^5 Z

  24. ( n) J. o; W7 @2 p4 e8 b4 }/ W) }
  25.           }* s# i9 W8 K+ b% C( U8 G4 n
  26. 4 W6 P  b( C" O- s4 y( b+ M3 F( X. B
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    9 Y* Z! E, x8 V4 l( Y
  28. ' ~; g$ S6 _5 V+ d- r' e
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));# e: S2 c* I8 l# M6 ^" I, [
  30. # J  o( K; c$ t( B8 `8 e
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;5 c2 V. M7 j3 }

  32. ; J5 N7 x! j7 A4 L) }$ K, O
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

7 U+ H+ }% I: x. B  k通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。/ t$ j7 w/ Y; J: f
2 w) J# U) \2 Q+ i/ [
640.png
$ A4 F  z2 ~. a: ^8 A% i6 r$ e, T测试结果:3 O( f5 S) j) {8 e3 h
6420.png + y2 z% ]$ T/ R% U7 a  |4 w
0 i6 a/ r$ a  k/ O+ T7 g9 n
反向测试结果 6410.png 0 N: r6 J& L) L& R6 z

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

271

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-22 02:35 , Processed in 0.562003 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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