找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5410|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    1 T  K# N9 z8 {6 ?
  2. int  EQ_is_ge (double s, double t);
    " [/ c: q8 }+ `
  3. int  EQ_is_gt (double s, double t);  l+ I+ y- U* b  m& u
  4. int  EQ_is_le (double s, double t);. J4 H5 V5 b* ?/ q
  5. int  EQ_is_lt (double s, double t);% `5 f! E0 v, f. u
  6. int  EQ_is_zero (double s);
      b% I+ [+ B5 W$ s  `
  7. //=============================================================- j0 m- O) v. u/ [- v8 ^
  8. double ARCTAN1 (double y, double x );. X& a6 u2 Z2 O8 v
  9. //#=============================================================
    - J- [7 z- j: e9 R# {
  10. double ARCTAN2 (double y, double x );
    4 p$ l  x4 x2 Q% j/ I
  11. //#=============================================================2 D$ I1 Y+ Y, {; x4 F8 h6 `3 R& _
  12. double CheckConst ( double angle, double constvar  );
    ) v# B7 A; G- q/ Z
  13. //#=============================================================" K1 j; p/ p8 k( W3 t
  14. double Check360 ( double angle );
    7 y2 V7 W8 I/ \' ~6 \
  15. //#=============================================================: I+ U7 [2 }% H- y; g
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );& B; f. }* z$ b9 q- S; J
  17. //#=============================================================
复制代码
* j/ ^  ^4 }  W' h, a  M& @
以下为部分源代码,用于判断,计算角度等
# _, ]8 U, |( x, n% u( ]3 {  [% ~' u
  1. int  EQ_is_equal (double s, double t)+ ]7 T* U8 }+ h; K3 d0 f

  2. , Q2 ?* w0 v  V& R
  3. {
    $ E' e/ s* g2 G* `
  4. 8 W$ R! K3 b6 y5 S, H9 {, e
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    - s' I- E# J4 x2 [6 c8 X

  6. & H0 p, X$ I! i' K
  7. }
    $ {2 j: q" D8 \4 S" u! s' b

  8. 7 X9 u5 l' h# Q  [" R  B3 L3 g8 |
  9. /***********************************************************************/+ J# d' ~# ]* [1 T1 T  \% g
  10. * Z' n" _/ M5 D5 O7 H
  11. int  EQ_is_ge (double s, double t)
    ! Q$ Q" v% A/ z7 s! |# A

  12. - N7 |7 H6 z5 M9 X& t# o
  13. {
    * s  j6 V/ b& z0 w5 ~

  14. ( B- E5 X1 ]' X' F  S; R6 j. Y7 T4 d
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }% K+ B' s8 F- V2 ?5 Z' x

  16. 9 b5 e; y! T, V8 n2 B) Y
  17. }
    ) c" Y0 W# R7 |' m- l

  18. 9 f0 T1 u0 [9 |- N% L
  19. /***********************************************************************/
    + t1 D- o7 {# o4 w' n, D
  20. + h: L' Q2 J% l  [) }7 ~
  21. int  EQ_is_gt (double s, double t)) c! g5 B9 [  b& b- H
  22. 1 b0 x9 ~( y, L" v
  23. {% g; Z( J* F' `! o6 z! L

  24. 7 u0 S4 [: Z$ B& I* x/ U
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    7 P. }8 g+ Q9 p. X
  26. 8 i5 J+ \1 |$ @3 b$ K' k: l' E* [
  27. }
    # H/ M+ ^6 t( t: T8 O) m
  28. % f3 N( ]) |! Z4 M  V9 a7 S2 _
  29. /***********************************************************************/
    - y, S/ L( d" V1 c) V$ ?; Z

  30. * y7 K8 L. ]; f% G
  31. int  EQ_is_le (double s, double t)
    . ]$ D! H( Q; I9 O" \4 O

  32. 7 n4 l, q" P5 j
  33. {
    3 V- T+ z6 R6 [/ Y; q% A+ D! b
  34. ( _9 F7 D" {5 `* [% ?- }% R6 F
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }( i  k, C: ]- p" o( Q5 [
  36. " w# L- b6 H: K
  37. }2 d: A, q" c2 E+ o* B8 |

  38. ( M3 z$ M$ {0 U; W6 e& m* q) ]$ x
  39. /***********************************************************************/
    $ r7 f2 `$ J* i5 j2 \$ c

  40. 7 d, t! l/ N( w$ C! @% w
  41. int  EQ_is_lt (double s, double t)
    0 {) K. i# e4 r% d0 |* i9 h2 Y( `

  42. # g7 A( M) i7 K3 o% }  U
  43. {
    - [' {( m8 W( C: I, P

  44. 9 t5 p8 s# ^2 K9 E% I
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ) ^9 f8 E. L8 I
  46. " ?! t- B2 u# i0 t& w3 \: n
  47. }
    # e. `5 X6 ~/ ?6 ^% y8 ~6 t

  48. # w0 ~% x0 h* ?7 j' e
  49. /***********************************************************************/
    4 A5 ]* i( ^0 W- C. D
  50. 3 u! n0 T9 T& L" \
  51. int  EQ_is_zero (double s). `8 s0 g9 \! J# z) |, |/ N

  52. ' _; c3 r9 q/ U( \. I- G
  53. {  G0 V' L* u* _$ R, q  i
  54. & M* p9 i  R+ x4 _- O/ m
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    6 [* c9 S3 b& Z  {( T5 K% t
  56. % d" }$ L+ d/ d$ O# X9 Q2 `2 L& w2 I6 l
  57. }
    : W, G2 U9 ?9 K+ A. R  S+ _& B3 B' F

  58. + w4 i4 C+ ]* F9 M
  59. //=============================================================0 v9 H, Z- s+ v9 ]/ `
  60. 2 G# P. c0 T$ d; d
  61. double ARCTAN1 (double y, double x )
    / H( E+ O- J' Y) c' C
  62. 2 {8 N/ u/ z1 t
  63. //#=============================================================9 }. i) g& [* h$ V. v; w
  64. ' s! y! T) _' d2 R1 {: d& ~
  65. {
    * }( `% M9 ~4 ?' X; Z7 d
  66. 2 [6 _- k( z5 m, z# U  T
  67.    double ang;& Y+ w6 R6 _+ ^% [* g
  68. , [8 k, Z' A6 [
  69.    if (EQ_is_zero(y)) { y=0; }" W* P7 B7 K0 S$ I* e" n
  70. 5 D& @9 G0 b1 F2 c" n( B) |
  71.    if (EQ_is_zero(x)) { x=0; }
    + Z# |$ A8 b) v9 R0 u/ x  P

  72. " Y6 f( ^! r/ u2 V' R
  73.    if (y == 0 && x == 0) { return(0); }" P! W* o4 ?+ v4 ~' _

  74. # E9 P  [1 Z1 t, {# u
  75.    ang=atan2(y,x);
    3 W) l; X) M& E& ]3 r1 }' `" j. r

  76. / Y' |- s5 O2 D1 G6 M9 u
  77.    if (ang < 0 ) {" ?2 [3 ?2 `/ T/ u
  78. # L" E4 \! l9 }0 |- W& y4 p
  79.       return(ang + PI*2);# S- ^" A! }) n/ X" {, H; f
  80.   y* n* R0 K) f8 A0 i/ Z
  81.    }
    5 F$ U$ y% }! I1 W
  82. ( l* D8 Z) n! B$ H3 r9 u& a/ z( }" A
  83.    return(ang);( T6 {0 `. |9 w% }
  84. 7 Z3 c: b' c5 x- s+ U7 H7 e; S
  85. }
    + i1 o3 ^7 Q. V. F+ U

  86. 9 s1 q  p9 L& e; S4 C- H
  87. //#=============================================================0 @2 ^# P, y5 k

  88. " w5 K9 n2 b" Y$ Q, I; [+ d& R
  89. double ARCTAN2 (double y, double x )0 m, Z: ?1 v5 C& y
  90. ( T3 |; f0 [% `; J  J) \
  91. //#=============================================================
    3 B- F1 a$ E; A+ W- K

  92. + |9 D* l# N9 a# c3 M
  93. {3 _; a/ v6 e, \# w1 x+ Y8 b
  94. ) X; K( H. r: ~
  95.    double ang;
    9 r7 r8 @! [2 u& o4 y  M3 ]2 D' W+ X
  96. 0 P" o* b. h6 m% x* w
  97.    if (EQ_is_zero(y)) {% I) ^; U$ I* I9 i/ X$ J0 ~
  98. 1 P2 }1 ?$ [2 p. i6 t8 z
  99.       if (x < 0.0) { return (PI); }8 ^' O9 Z. ]6 m2 ?% N

  100. / w# j* m' T2 b( h
  101.       return (0.0);
    ! i7 }4 N2 `2 x" \1 e! G2 \8 A. ^
  102. ' B/ K( N$ ]' Z& ~) j% E+ d
  103.    }  s; Q5 t" y$ {% o. n$ }$ q
  104. ( K  l; t7 p) E# u6 y1 h' T3 q! n
  105.    if (EQ_is_zero(x)) {# A/ O# A4 O3 d. @: n- x; D

  106. % F( k6 E; Q- x) i9 G$ ?! {
  107.       if (y < 0.0) { return(PI*1.5); }' Y( V+ z: W0 q3 d" h, |  }

  108. 7 @/ @- @9 Y7 x
  109.       return(PI*.5);
    + J$ k) N/ l2 F, K9 E7 m( g+ D

  110. / n3 R, Y- i8 S  E) P% s
  111.    }
    % ~0 z" X% }; Q& B; D" k7 t" I2 O  b' m' Y

  112. ( ]2 i% k6 A+ v$ |
  113.    ang=atan(y/x);
      M9 p: s4 O# C* d

  114. 0 ^% y" g1 B* o$ @+ q
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    : u9 c, P9 R" m* X# S* c9 K

  116. ; g0 ?9 K- }8 @' p6 q! m4 j8 ]
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }, y" c6 P# d0 K9 I6 ^% ]  M2 L
  118. ! i% j) Z! H# I9 \, T
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    # i2 r9 O; Z: A9 f8 E
  120. 7 }# g  s, u! N: E$ A$ n+ P" E
  121.    return(ang);6 }" U& J; H. `7 k0 _. R
  122. & j* @5 b3 E1 p6 ~; k5 N
  123. }# X  k5 L/ F  \% n! b, g8 Z

  124. 6 E/ e3 Q0 e# y0 F: \6 ?, q/ `
  125. //#=============================================================* v; `$ e  j. F0 a& o
  126. 5 g& \' @6 ~2 L" @" A- J
  127. double CheckConst ( double angle, double constvar  )
    6 l: R# @6 l/ _  ^( x/ Y* q

  128. 1 n% {1 l6 W4 ?8 I6 [
  129. //#=============================================================
    . I. n; g; }' h/ S3 L$ f

  130. ' h2 E& `( a. l' T4 o* N  w
  131. {" ?6 i/ J; k7 @7 N5 z) g) M6 g! |
  132. 8 b  u1 V- z, K; e7 ]
  133.    while (angle < -constvar) { angle+=constvar ; }, F1 j. m1 i; \& Y/ v5 o! h: o& s& m; X

  134. / a/ w# D, U4 n, j5 E. F( j6 b
  135.    while (angle >= constvar) { angle-=constvar ; }/ B. I; G# ?9 j& D/ J8 c" b9 _  [
  136. 8 W; v+ U) ?0 e- l. ]
  137.    return (angle) ;
    # X4 J2 E) I- g

  138. 0 y' I- S" `7 y2 ?- @
  139. }
    , G  b' K6 n# J! `' N, ~8 C/ c
  140. 5 S+ {) A3 ]9 u* h
  141. //#=============================================================
      b) ~2 R+ |1 U5 I
  142. % @5 d1 }/ ^" g3 I. t
  143. double Check360 ( double angle )
    ; `$ K: j: h2 i/ Z+ C4 v$ G

  144. 3 @: F8 y% O  b* V& M: q
  145. //#=============================================================
    0 g  Q9 E: ~4 L2 n  g/ n6 c

  146. 4 o% m9 ~: A+ G
  147. {
    / B  X9 }3 i7 [7 U
  148. 1 q5 c# \9 s  k! X% V3 m
  149.    while (angle < -360.) { angle+=360. ; }4 F& V% O: C9 p# b# c6 y

  150. / n. a+ O: V! s
  151.    while (angle >= 360.) { angle-=360. ; }
    & H( {% K- l& A3 m' o& N5 D

  152. 0 o# V( T+ Q. o7 @: }4 z; n, h
  153.    return (angle) ;
    8 f$ u* ], t* j. `6 d! \) B
  154. & w9 J1 T8 N7 F- {6 n% }8 N, Y% w
  155. }
    % g: f9 s" F3 y7 P" y  R" w4 g+ X

  156. 0 L0 U5 T. n; O+ z: O6 a
  157. //#=============================================================
    , T% |) L, w/ N: ^  Z/ \

  158. 2 @$ U& j0 m$ _! q+ Z
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    1 k0 c$ N8 _/ ]2 g% f( A( R
  160. ) R1 k" ^- D% ]
  161. //#=============================================================* s  l4 X/ {# z" h" c
  162. 0 p$ A8 k& Z9 W2 A% B4 n0 `
  163. {
    9 F1 d, S5 f4 Z
  164. - J0 G8 O$ p7 [  h6 t# R5 z
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    8 s0 ?" X6 u. L3 p1 _
  166. . [3 |- `: b0 `. K  _7 f1 v% }
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ' h+ g% K7 e% g, u" f- z! R+ z- i
  168. ; F0 l7 |4 P5 r# n; Z. L
  169.    return (angle) ;" |; f, P% O2 ^+ a* v4 H. o* Z
  170. 5 P0 c* T& d: \0 ]% ^; s
  171. }
复制代码

- s& g+ y2 O, c5 e1 L以下为摇篮5轴计算过程代码3 |0 Z  P1 S( _* p0 {4 U
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    3 S5 {6 l' ]7 S* {# E

  2. 5 b$ K7 h! X' \  S( x
  3.          j=0.; B1=0.; B0=0.;
    ' j1 {3 c2 `6 b
  4. . Z# `( V1 D; r* n2 L) w
  5.           if (EQ_is_ge(i,0.)) {
    ! |4 S/ L5 S/ J/ A7 y

  6. . n& S) {2 V" K: H. r
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }' j' f: @6 u8 N  M
  8. , {) [+ ^3 y& a2 ]$ z
  9.           }  [0 r, o( W" e- g5 t3 f

  10. / o  B# D  }% M6 S
  11.           if (EQ_is_lt(i,0.)) {
    , d5 q6 F9 h! N; n0 N

  12. + J: x- ~- B( a+ Z4 U: c' Q. {
  13.              if (EQ_is_lt(k,0.)) {
    0 L# D5 ^" D6 l2 h, \& e

  14. & @% F( {5 W$ W
  15.                 B0=atan(i/k); B1=B0+PI ;
    ) }- L, g1 e, D9 S

  16. : h) R- l0 m( Z. i& a/ P
  17.              } else {2 y4 G5 u' Q- \# I

  18. & c1 ?* S, O: R  V4 M* R' l# r
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }5 n3 W& n3 e9 M

  20. 0 A5 N* C  d; [" M
  21.               B1=2.*PI+B0 ;: P7 }, f- q/ q8 Z  R+ e. P! P
  22. 8 a) L* e& y  l. }& o! Y0 ^
  23.              }* m9 g$ l) c( D& N& r

  24. % W9 l/ }% s, d0 `
  25.           }  v& B1 p4 V( t, j- A& F8 V# x" d
  26. - A8 A: K. ~$ K# \$ {  y9 I% w1 g
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
      R% \5 k. d$ N) Z+ ~. a

  28. . [" K7 M% `) V6 t: Q3 u" H5 m+ {1 Y
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ' M$ D9 [3 M' \7 [4 l! q
  30. # j0 A$ ]" a- u& K9 j0 a
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;  U2 k- _2 l; W' _8 N5 S# a
  32. $ W, F( d$ Q8 {( g# v
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
( x% q  G1 a4 v' V9 n
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
# U+ d* I" N" k6 H
3 x* K( {- m2 ^7 h 640.png
' z3 {" r1 g6 Y0 T" O测试结果:% I+ ^) q1 O3 h+ B' Z. \7 z
6420.png - t; w7 y; B( I8 A5 s& f0 I
: k3 C& b* ^# g* V4 e
反向测试结果 6410.png . ?& V$ F1 ~- x" m) b

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

159

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-11-5 03:20 , Processed in 0.622536 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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