找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12545|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ) d$ c' J: b) D$ V
  2. int  EQ_is_ge (double s, double t);
    7 G6 w. }5 e: k+ j! R
  3. int  EQ_is_gt (double s, double t);
    $ K- S0 o& O+ B. l. w, e
  4. int  EQ_is_le (double s, double t);
    " b; U- v' }0 w, s$ \2 |2 E
  5. int  EQ_is_lt (double s, double t);
    ) r' E0 }7 e+ c# `$ I, d* o
  6. int  EQ_is_zero (double s);* D* `6 f/ K# m8 A: j. E
  7. //=============================================================" Q) q- i$ p* [/ m* y
  8. double ARCTAN1 (double y, double x );
    " @1 s+ [; D- c/ D# v
  9. //#=============================================================
    - J2 Z7 W& b5 o% n* O! r' w
  10. double ARCTAN2 (double y, double x );9 r' ?" ~4 y& y: M$ q/ R
  11. //#=============================================================
    + R7 F- q  m  l& q8 o- _
  12. double CheckConst ( double angle, double constvar  );% @$ X$ D/ Z9 a" J: Q& }5 z* g
  13. //#=============================================================
    4 q1 ^' L) p# t6 X$ Q
  14. double Check360 ( double angle );! N3 z: A+ b, @0 J3 M4 g7 O
  15. //#=============================================================  s; W. G# u& Q" K" F0 F
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ' v; Y! `( b8 v4 V* n1 X" e
  17. //#=============================================================
复制代码
% I* o# Y) B7 H
以下为部分源代码,用于判断,计算角度等
/ d' B5 B  H& j* z& g3 [( s4 m
  1. int  EQ_is_equal (double s, double t)6 q. t( Z. m4 ?' k/ e" U
  2. ! ~6 F  x, Q2 ~8 A( P3 M; ]
  3. {6 Q3 M8 i. @% I9 _0 J
  4. , S9 R8 [! u: l# _2 T
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    - l4 e9 r# e& h6 D' D
  6. . w' H: K$ @: A/ G
  7. }
    7 N  w5 b. H% _

  8. 4 W7 l9 J- o. U
  9. /***********************************************************************/
    + u% N& G, R) V

  10. 8 E0 X) f+ l8 p
  11. int  EQ_is_ge (double s, double t)1 Q+ D; p" u+ ]$ R
  12. : P4 [9 r6 s8 q# N$ a) G
  13. {1 k! e3 Y  g+ b% y

  14. 0 M# [- [2 o* j( @0 s  Q  x
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    9 k- g1 n/ l+ V- @

  16. ! g0 [' _5 A& t
  17. }& l! ?; U; q5 {! K9 c4 Q# K& ]
  18. 3 w4 K! n$ @' m: b
  19. /***********************************************************************/  _; P- Y% g/ R5 f+ A
  20. 5 o$ ]9 T* _4 L: V! |5 ~" Y" k% X5 N
  21. int  EQ_is_gt (double s, double t)
    8 X6 |6 L' J2 h& b
  22. # o, m% ~! R6 F* o: f& Z
  23. {: y* U/ j5 z; t. K* {) k+ {) @
  24. ' C, f7 @7 ~( G" I- `0 x4 H
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }' I# ^' a- w) G4 x4 Y+ b* S2 C% s+ ~

  26. " `0 k" y/ D5 J8 X' W* J  h4 e
  27. }
    , m9 m9 o  |: n& g6 ^% m7 J

  28.   I# |  z* y0 T- Y% l
  29. /***********************************************************************/
    4 T0 }1 r3 J# z6 ~9 e2 S

  30. 7 p/ N9 C! f# H% m8 J
  31. int  EQ_is_le (double s, double t)
    + w3 n; ~0 y) o6 O  b. r6 O
  32. 2 `, F# r$ W1 i8 j6 M
  33. {
    ( ]- R4 }, `: L& q. F& }3 {5 Y) T

  34. ) n1 `( L. d3 C6 {- W$ S1 e
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }& s6 u* `8 y& J
  36. 9 {' O3 [2 z4 }( }# j2 y) Z0 n: O) J
  37. }
    4 K+ S% V) k' c: _0 T
  38. 4 H+ U$ w! c. @7 a6 G; q6 G* W
  39. /***********************************************************************/
    ; Y# B$ D9 g; g; |8 w# X# _8 q
  40. ; e9 b2 ?' r+ H6 C4 u8 m4 f
  41. int  EQ_is_lt (double s, double t)
    - D, W6 @* z8 ~2 q4 {: [

  42.   H; }; ?" ]6 y( n: y
  43. {/ j* W3 _0 c! c7 z' p0 o. I0 C2 f

  44. 4 T* ~8 f7 b0 E
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    * s) ]7 j, O& _3 m
  46. . I' m1 C: p" F( I& [
  47. }) v, ~$ @: q$ A0 t% J/ w
  48. # W8 q. X4 r1 f* s
  49. /***********************************************************************/8 W: i6 ^% @6 i3 }' \
  50. " W4 `+ |* X3 g5 |' Q% ]$ `& v- ~
  51. int  EQ_is_zero (double s), @. x* Z$ b) W: }' i" v
  52. . d3 L0 o/ l* X
  53. {
    $ V% M/ Z  @" K# `0 `5 h5 f

  54. : \8 B9 \' b- K- ~9 O
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
      M; R1 z3 u$ a3 V# j# i% F1 E6 b
  56. $ N: w; Z/ z$ ~: Z9 O
  57. }
    0 d+ G7 \, S# i6 v, n
  58. . Z5 i7 ]% S5 N
  59. //=============================================================
    3 q" J3 c1 U  X2 L; k

  60. " ?2 T0 {% q% a% r6 E8 ^
  61. double ARCTAN1 (double y, double x )
    7 w/ }! ]$ z; f( u' C' }5 A
  62. 9 a, d& n' T5 ~& t
  63. //#=============================================================. G4 W) A( t  l, \/ G/ G% P

  64. + Z" Y; W. @0 h0 Q& A# ^
  65. {5 ^6 f6 O+ j7 @5 L: B8 n
  66. ; L0 A6 a3 d+ E& E4 h
  67.    double ang;/ B' |* i: N+ X5 {$ o$ \" g3 {' C9 y

  68. * o) q) U& m  w  R# u% S. p
  69.    if (EQ_is_zero(y)) { y=0; }) n+ U. Z. V* O0 W
  70. - C1 Q2 X8 B" `, V" L
  71.    if (EQ_is_zero(x)) { x=0; }6 o& B" ~. g; Q0 }/ c

  72. $ v9 K9 F+ j3 N; V" j% l: P8 E; A
  73.    if (y == 0 && x == 0) { return(0); }$ s6 p2 Y  H' C# v1 w

  74. # K8 A1 W% A1 I' i( q& U- d
  75.    ang=atan2(y,x);
    / H) g9 J8 o" V7 `( I6 L. ]; _
  76. - V; W$ r. D) n4 B; W
  77.    if (ang < 0 ) {
    + u6 ], ^) N  x+ x$ o4 ?2 s2 n) A

  78. 8 R  l3 i, [) T) M. ~
  79.       return(ang + PI*2);
    * w! K7 p5 g1 |: }' ^
  80. * z9 J2 f" F9 P7 C( m; m6 V$ q2 O7 c, A
  81.    }
    9 O2 K6 R: Z( S$ m) n
  82. 5 P+ F, W  b! l/ n" @
  83.    return(ang);* K$ y1 S- \# W

  84. ' T6 K. o& |$ S
  85. }
    6 C, B) u  f2 l) F4 x/ C

  86. , E$ `4 D  A& x
  87. //#=============================================================9 F: q$ b8 _' b2 H
  88. ( R# E( ~5 Y! m  g8 l
  89. double ARCTAN2 (double y, double x )# k) W" Z$ W) g8 {5 @& Y& p

  90. 3 \. U' I& o/ {: [# h
  91. //#=============================================================# \  ~$ ~1 `. ?0 \" Z! S$ a2 y# l

  92. - m- l$ x$ G2 t% o
  93. {
    3 H; x0 J7 u. |
  94. " x5 _& T7 R/ @8 q3 H) n) E0 m
  95.    double ang;' G2 E) u0 o  k( D/ M/ A

  96. * G! e5 B* r" b- n
  97.    if (EQ_is_zero(y)) {
      U& ~2 x) \: L3 i- I" T' V
  98. 2 `3 p7 H$ C( P5 |6 _* A6 e/ y
  99.       if (x < 0.0) { return (PI); }
    " E% Z0 \  T  E. \8 y

  100. 0 Y' F4 W2 E& R. I! {* K- n
  101.       return (0.0);: ]9 _+ }5 G5 C$ O6 ^
  102. , f4 w# H8 L2 o9 G
  103.    }
    0 V6 w9 G" N- @% `* B4 r$ E* \

  104.   _0 v. f4 f8 P$ ^
  105.    if (EQ_is_zero(x)) {
    $ ?, e# R. t; N  R2 C
  106. , F6 d% O; G! p) K6 F; i
  107.       if (y < 0.0) { return(PI*1.5); }
    ) X* g2 t. }9 X- L1 F. D

  108. 3 b, b8 n% i/ t# S6 T
  109.       return(PI*.5);
    7 n& i$ a9 a1 m
  110. ; |# A6 [; R" F9 E0 }; @
  111.    }
    * Q" k* J& l/ u

  112. ' E# }6 R) M" M! l3 g
  113.    ang=atan(y/x);$ h, a* ^  j# e1 [; J

  114. ; W! T8 r- W3 W" W4 K- e) t
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }5 w7 l' X+ o' }) R
  116. 3 b' ~9 _# L0 \* ~
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }' p$ P4 B* K& }; M) K6 L& B# W
  118. % c" h4 O7 i+ e3 B; i7 y
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    8 b& M* o  {% q. f

  120. ; j5 {5 N9 h( V# k  Y# H
  121.    return(ang);
    5 C# t$ u& A, S0 ^

  122. ( z% `% `) G- c
  123. }' J: x: n4 ~+ i! @  P' f  y  j

  124. * s9 x! d- H+ P# v
  125. //#=============================================================
    8 R1 Y8 r: ?* n& X
  126. 5 f2 N2 v, p3 y/ H
  127. double CheckConst ( double angle, double constvar  )
    0 g; X! v8 M. `4 p  l
  128. " g/ m% D6 m& X0 c1 z7 m% R
  129. //#=============================================================
    $ Y  t2 S0 m% f* x

  130. - f$ C1 L; e2 ~$ y% x6 y4 I
  131. {* n3 g/ e/ o% x: L0 }3 |2 m$ S
  132. 8 F3 @$ C* A9 q
  133.    while (angle < -constvar) { angle+=constvar ; }
    4 [8 r& B7 k  I" a% x- _% G

  134. ( {) }! O* n. w8 a- ]# N1 o
  135.    while (angle >= constvar) { angle-=constvar ; }
    2 A( `7 n0 @# T  A/ c

  136. $ j3 w  C) q' A1 u2 \# y
  137.    return (angle) ;+ L- r$ O/ X' Z) }) r( f

  138. , X: J$ e$ U7 L  ?: ?/ @3 z
  139. }/ }# u6 i$ F9 I" p, P

  140. & S+ U: p8 @; w1 N; h! Z0 @, ?/ r7 [
  141. //#=============================================================
    % f) U+ a' o5 ^! \$ ?1 l

  142. % t0 H% R; y( v% \1 F5 ]9 ~- A4 c  q
  143. double Check360 ( double angle )8 I" Z" x0 s% V. f3 E" u
  144. & j6 |( a$ r3 x$ d  N2 x; E% z
  145. //#=============================================================$ k# `* l: r; W( k
  146. - n. ]( p) a- e, h
  147. {
    % C" ~1 X0 T9 m3 I9 |6 r7 ~% M

  148. 9 e( g# C" L+ _  o  A/ W8 O  ~
  149.    while (angle < -360.) { angle+=360. ; }  Y  e0 E# u, h' D9 m8 \8 D

  150. , d5 h8 w  q, O' }
  151.    while (angle >= 360.) { angle-=360. ; }% Z6 S9 i& w/ l

  152. % @& ?- p- e9 w, |1 O
  153.    return (angle) ;
    2 ~; @/ T6 I$ X# F/ f4 K9 |$ D
  154. 9 [/ c) j* S! G3 e1 J1 ?6 {2 a
  155. }
    1 @- O( J+ {8 C6 Q: Z

  156. - q8 u; W8 c9 {' _8 t2 h
  157. //#=============================================================
      P! L( I: R" `  q" q# i
  158. / _1 K: o. }" d/ t, V
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit ). J6 }1 E% d) m& e- Y, }6 o' e" ^

  160. ( U! c5 ]( T& L% F; |4 F
  161. //#=============================================================
    ' d; ]* C; K2 h( x, [
  162. $ u/ m1 t* V2 s5 T  @0 E
  163. {
    % G$ e4 _  V" |' `  B
  164. $ f6 C9 }7 ]7 C0 F- C4 H5 j4 R
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    7 n9 o, M' {! t% l2 h% U

  166. 0 r. b7 l" V5 W1 Z
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ! _. L" b2 `3 A0 ~7 F

  168. , ?6 q* [3 H7 m' P2 {- y/ a& h8 p
  169.    return (angle) ;+ K- K; H) e: i& F2 i7 p4 s" J8 r
  170. # l; s0 I+ c- s: T5 Q7 I
  171. }
复制代码

9 M+ k& G& w2 C5 D' Q. q% g以下为摇篮5轴计算过程代码
7 L8 e, O. d+ S2 ]4 {
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);: {; O; m& q& T  a2 U4 t0 _! x) V

  2. 8 \# g$ h" C% q
  3.          j=0.; B1=0.; B0=0.;
    1 g) M) F! f7 v: Z

  4. ( U! [- B3 l* u6 W  T) x7 \# t& Y" k
  5.           if (EQ_is_ge(i,0.)) {3 R  s+ e6 z' K+ u4 C) U0 ?

  6. 5 U% `4 [2 h" u  B3 y- b
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    ; G" R3 m. T  A- I
  8.   w3 e. ]" t) w
  9.           }+ }$ z( g: t! c* ?
  10.   ?) G: a" x4 P9 ~
  11.           if (EQ_is_lt(i,0.)) {# B' C' F- C. ?% H  l+ [
  12. ) R3 u% B) P3 k# H8 H; _! i5 Y' Y
  13.              if (EQ_is_lt(k,0.)) {9 x- G: S3 Z' L$ F% X6 s# [

  14. : B8 r$ M, Z1 ]9 s& j5 c6 i* m
  15.                 B0=atan(i/k); B1=B0+PI ;+ B' K" q, h9 X$ x, O
  16. & ?4 X+ z/ C% M" U
  17.              } else {% }& w4 q. I; k- G. f

  18. , L; X2 d  ?) f  {
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ; o# e2 h; E/ @
  20. 9 k+ n+ a/ ^4 O
  21.               B1=2.*PI+B0 ;
    / G1 Y8 ?9 Q7 R- s- }7 E- W9 |
  22. 9 B" a/ ^) s8 P" e! S( O
  23.              }/ f2 k' s$ j: O- s

  24. 1 c& R7 l) O% P' c+ U: c0 A
  25.           }; e' ]4 q6 t' j; u8 {1 [

  26. ' i8 A, z/ [2 v
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;9 |$ N; T) B  [9 H9 ]
  28. % G% d$ B: B+ F! z
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    0 J/ m, m8 S9 F: J
  30. 4 Y& z( @5 G9 k0 g
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    5 U( F2 @4 D& J6 D. Y, J3 I8 o

  32. 2 E1 s! ?4 s8 m8 _
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

1 b1 _; a9 l) ^8 e- |# B0 |通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。6 W- s4 J$ ^( _& b, s

# B( }' G1 e- X+ F4 F7 T9 W 640.png : W! S! {/ l: d9 J9 h0 T$ _+ N. \
测试结果:9 W7 [6 ^( j8 p5 }
6420.png * E/ E8 S% l. D' N
% Q% R- ~& y  t: f
反向测试结果 6410.png 4 k; B; O; Z$ y( T7 N

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

355

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-10-13 15:45 , Processed in 0.190812 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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