找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5851|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    4 P- ~. B( R) a' N
  2. int  EQ_is_ge (double s, double t);( Q' O" n3 Q% y. d3 `
  3. int  EQ_is_gt (double s, double t);& L  }6 Q$ ?5 D, h( P
  4. int  EQ_is_le (double s, double t);3 i; i4 I( l4 b% A
  5. int  EQ_is_lt (double s, double t);+ c$ i7 X+ e' n, H$ O8 R+ h
  6. int  EQ_is_zero (double s);
    8 w" O: P* J! r5 {! R% L
  7. //=============================================================/ q# ~  l$ U; p# M) S! s3 X# h9 f
  8. double ARCTAN1 (double y, double x );
    0 B- F. u. ^- O! E- ^9 f) l& H
  9. //#=============================================================, U/ @3 k/ `3 E/ W3 V8 d' E
  10. double ARCTAN2 (double y, double x );
    + O7 F8 e2 v8 N5 }3 e) B) z5 u& D3 J
  11. //#=============================================================
    * j" S5 ^" C* ~# _1 {3 U
  12. double CheckConst ( double angle, double constvar  );
    9 |! {; w% [( k, S, V7 W
  13. //#=============================================================
    8 {: q& \. E- C) m9 u/ ~# I
  14. double Check360 ( double angle );& P: W; ~3 k4 Y
  15. //#=============================================================" s; g, _9 J! D) B! e* f5 B
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );3 f/ F5 ^4 |  l' p
  17. //#=============================================================
复制代码

% D& a3 I" |* x1 F3 L" I以下为部分源代码,用于判断,计算角度等* @! R# m$ \/ O
  1. int  EQ_is_equal (double s, double t)
    8 [: t# G: K$ }5 d7 [& v
  2.   a1 o& A4 A' j9 a+ o0 ]3 X
  3. {
    ' A9 {. N+ E8 y$ r( _) H4 ^, x- F

  4. ( g) q" d' O' ?0 R& u: ?6 |
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) o; }  y) t* \6 X" S( c0 p

  6. ! I* g- B1 X( @" F1 N" Z: `7 i
  7. }! _- ~3 s/ ^% Q4 O+ l2 z! E* z* @
  8. ) P- R& N8 p8 d5 `  j. N
  9. /***********************************************************************/
    6 w. M& }# q+ g+ m" I

  10. & s5 n, O. q7 b0 k; B
  11. int  EQ_is_ge (double s, double t)# m& u) K3 i; j/ p- X) E. p6 r
  12. ' g: x% a0 y, H+ D5 h
  13. {) u, Q, b7 _7 E6 p0 M) t+ y
  14. 7 g) w& m& [( ~! Q
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    ; l; D* ]+ Z3 K, Z* x( \: T6 A- P

  16. * \+ Y. r" C6 A/ O$ Q7 B
  17. }! G4 x( ?" Q! `  \1 {8 ~/ Q

  18. * d" y: j# B) l+ ]6 e+ o$ z
  19. /***********************************************************************/! \6 ?0 N+ J4 {  B; |
  20. 0 P$ `* \5 D% ^
  21. int  EQ_is_gt (double s, double t)
    # d8 k0 ?* c9 n" C& ?- }# K

  22. 4 s0 l& C/ n7 n* q) P) X* @8 A1 e
  23. {1 b3 C( B% ~" I7 X9 M
  24. " ]2 Z4 P4 \# E: [" _2 j/ _
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    4 n, F7 d# K: b) z$ |( G
  26. " L# z) u* `9 ]+ w! T
  27. }
    ' v! W, J! I) }
  28. , c8 o  B+ r; b$ K4 Q
  29. /***********************************************************************/
    , [, N0 J* `/ X

  30. 4 b5 p, A3 y3 Q2 Z; G7 m. r+ [
  31. int  EQ_is_le (double s, double t)8 Z/ D1 w* g6 [+ ?
  32. + E' ^7 |6 ~0 g/ j1 ?
  33. {
    : \0 C. B# L9 b' T. m

  34. " _2 |8 {5 E, d' x& s( M
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ( V; o/ u1 O! o: a
  36. ! U3 D" }. k7 T" u- Z1 f
  37. }6 W- ~3 f! U/ T9 K) U- j

  38. 2 k2 h+ }; {( i7 m
  39. /***********************************************************************/' ]5 O- l: i8 F5 q8 E- t2 v
  40. 5 t: _! @$ `4 V! v; g
  41. int  EQ_is_lt (double s, double t)
    ) @! i4 M* o  k  ~7 V8 {+ U5 N
  42. ' k: z1 i. K  z! n# ]( m7 _- C
  43. {1 l" S- q0 y" l8 L) J( F, ^

  44. : l% t6 _9 u. x0 J$ M. Z% d, t
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    # [7 }6 H$ A3 h6 r. E' _- g: ?

  46. 4 p0 b/ m' b& ^1 L# A3 Y) C9 m$ O4 v! O
  47. }
    ) W0 u/ b# o3 w' y( [+ l7 F  l* Y
  48. ; L- V6 R, i% H" Z/ L' g2 ]; x
  49. /***********************************************************************/
    - @, s4 U1 t% F& ?3 d8 D! o

  50. $ z' p  b# M8 f6 R4 }  z
  51. int  EQ_is_zero (double s)
    8 i% D8 m" ]% O  N' ~
  52. ( E; h$ d( Q1 T  k2 T' k
  53. {1 x/ l3 _( b& Y% e
  54. 5 G! ?: G- k2 `6 Y. r
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }  j7 b% I+ u9 ]" ?" s5 P6 [8 @/ g

  56. 6 f  }1 }3 _9 t. M
  57. }
    9 H' C6 Z! L5 v' n1 Y

  58. 5 l  n7 P, ~2 l& ]
  59. //=============================================================
    / Q' x- U9 P2 F
  60. " D- u$ k$ ]6 {  p& `
  61. double ARCTAN1 (double y, double x )& d; D4 H8 r! w  V+ p( G6 S

  62. 4 d; }' A; O3 f9 ]' ^  e1 c- d
  63. //#=============================================================/ }/ S3 \$ T! X# D3 f. y9 U
  64. 4 K" a: N2 c$ v. d# l
  65. {
    6 o) F0 |1 x# J8 n' Q& ^" J

  66. 7 @6 _, _3 Q* \7 a  V0 l0 m
  67.    double ang;" B! i# q$ g& T% @- t  M7 f! {% S

  68.   @$ N( O% F+ L4 w
  69.    if (EQ_is_zero(y)) { y=0; }) V5 |2 u+ Q8 P) h' \! z; z% f0 v% C9 s
  70. 0 a+ g' \" T: C, m% p
  71.    if (EQ_is_zero(x)) { x=0; }6 I4 W3 Q" H% J2 w
  72. 2 ?7 M% ~  k! w6 F; C! Q! T. g
  73.    if (y == 0 && x == 0) { return(0); }1 }, M, W, z' ~/ t6 N

  74. ' P- @8 b8 |9 D; C! o9 b+ [6 |
  75.    ang=atan2(y,x);8 i# l3 [( c4 J& q

  76. 2 A" `8 e/ x5 z
  77.    if (ang < 0 ) {8 m. a* r. N. i% d
  78. 2 C+ y! y3 C' s  g
  79.       return(ang + PI*2);
    2 ^4 g6 }. s1 d) m6 o6 F' |
  80. ; N+ ^0 o; [% e, G1 k
  81.    }: J- s# b6 }7 p9 _$ t8 s
  82. ( g; \. u, S" E$ |7 f, L
  83.    return(ang);  c) y+ [  [: G! d. V: z: ^
  84.   L8 j) _* L" T1 i6 @
  85. }, E3 @: d" U5 U, g& E: [0 x) }
  86. " A  \8 `: s9 ^# t
  87. //#=============================================================8 J* \, ^  X+ w* [( T. C& R: ]4 C
  88.   d- G, g7 t" k( n/ B
  89. double ARCTAN2 (double y, double x )
    + F: ]6 y% ~* b, i

  90. 9 I3 x  z  q0 F0 {5 V( ]
  91. //#=============================================================
    % J( Q7 ?) C/ b3 {  I4 Q1 q3 @
  92. , N' g' u6 Q, _" G
  93. {
      B0 v: m( o+ e* z! e

  94. ' P% M5 E& E, F- w/ ~
  95.    double ang;
    ' _7 J* O5 L: r" P* G2 ^/ l. C* W1 ?
  96. : L; w6 \5 {6 X. {9 c
  97.    if (EQ_is_zero(y)) {% d' ^% A* i# g2 O, q$ D$ A

  98. % B) M# x$ W/ z5 v, ]' F
  99.       if (x < 0.0) { return (PI); }
    0 {3 e( f; U- T" O3 y
  100. ) p6 G5 c) S! s% _* A5 y- T& W' w0 e
  101.       return (0.0);
    5 N2 O8 c+ X+ r8 l8 _3 C
  102. ; _' s3 k# w' _5 R6 V! {/ \
  103.    }
    / _8 X9 O0 o0 V
  104. 1 Y! y+ e, g% g
  105.    if (EQ_is_zero(x)) {- u, v7 ^' q' N  T# a
  106. 0 {1 H4 s7 C9 z+ [, D: M
  107.       if (y < 0.0) { return(PI*1.5); }
    7 V; P. c2 n% F! b/ l; `

  108. 2 m# C! T' U  C+ y# F4 c5 B7 J
  109.       return(PI*.5);/ R* T$ C1 C/ j

  110. 5 ~1 q7 W" B1 \9 `
  111.    }
    5 g" q: _- m8 }  V, C

  112. 7 R) t: H% _6 o; }& v% c5 W
  113.    ang=atan(y/x);; o5 ?6 I# }$ {& n( v
  114. & ]. C; C2 x3 F1 S
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ! K: k9 i  |$ \5 |
  116. ; l# z' p; y1 ?5 y' N' n" l
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }# x. _6 \5 o" K$ b% w# q8 B( N
  118. ) @* G" ]0 A7 [5 l: o$ M
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    % p& _, I8 Z3 p4 t/ E* H, c
  120. , i9 S1 ?5 A5 _5 {- c1 N
  121.    return(ang);
    * V: a. y. y: r2 |; r
  122. ' r+ t' j* h" B3 }
  123. }
    7 r% h# a+ T8 N8 T, v* A2 _( p

  124. 3 ?8 ~  X5 t2 x& o2 ~
  125. //#=============================================================  p1 c  F4 V+ O
  126. 5 ~$ A- l/ E! |+ ~
  127. double CheckConst ( double angle, double constvar  )6 M. L7 D$ ~* c9 G0 F  v) A8 Y0 A
  128. * A6 q5 z- q* @3 S& g( A
  129. //#=============================================================; g- u8 e, K) x- N; Z% c" E0 O! \4 U
  130. 9 R, [! ~6 N1 M' M  d- _4 t
  131. {! J6 o6 u9 a# N, H2 d# m% x

  132. 7 ]' y; w' b- c
  133.    while (angle < -constvar) { angle+=constvar ; }4 M# g2 r' {0 i/ S
  134. 4 A0 b. X4 l# O9 a2 c- ~
  135.    while (angle >= constvar) { angle-=constvar ; }
    6 f" I, i. x2 D$ `2 P6 k+ S# `

  136. ' R# {, ^9 p% B  }: S
  137.    return (angle) ;7 M8 d1 s' U4 b3 R, @! L
  138. 4 n; p+ t+ |, U
  139. }
    # q/ g/ o  }6 }, R: q9 |
  140. # l8 r5 }! z# N5 `5 s
  141. //#=============================================================! g7 W0 @5 W* \' ~& S

  142. 8 G" i) Q% u: x& G. Y3 L8 x. H
  143. double Check360 ( double angle ): l0 I  |/ G; [% h: }# f
  144. 6 _8 U3 d- g& ~# I
  145. //#=============================================================6 |4 |* F/ M* ^: H" U3 L
  146.   j# X( a5 i/ H% o, R  C/ Q- K
  147. {, _+ G6 d- l! \! e
  148. : ~7 b# ?0 ^9 `0 U' U
  149.    while (angle < -360.) { angle+=360. ; }
    , }# P! J) l9 c, d

  150. # W& k, Z5 B& \# k6 n6 V- \! K
  151.    while (angle >= 360.) { angle-=360. ; }
    / V7 h0 C6 |$ d6 M3 C/ l

  152. 9 e6 `9 ?: @4 d9 v8 a1 \1 ~
  153.    return (angle) ;# D! h  W8 c; v% r' c7 G

  154. 9 |) \9 o; W  I# N
  155. }
    ; A+ E- q% {* p: J. z: y& w, S
  156. 8 r  F% {; a! T- c: G6 g6 i
  157. //#=============================================================
    ) i. x! A+ ]4 r& k

  158. ( w. q! R/ N: \8 r4 K
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )6 j  h4 i, ^6 h' ]2 ~
  160.   D* Z! o8 T  {
  161. //#=============================================================
    / o  n! a1 h& p. O$ w, Z' S+ b$ o2 u
  162. ( _9 P. e9 U; h$ O. ~" f
  163. {* c) \) P% `8 u/ l$ T
  164. 8 \: c* U3 O! ?( s1 u
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }, i7 v; S3 S) y

  166. 0 n% ]4 l) J# k0 M: ~; k. D0 p! ]
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }/ I% l2 L& f9 m: Q, E4 C/ n+ u. H

  168. 4 b% t6 X# x" N  O. _' p9 S  d
  169.    return (angle) ;
    " e8 d- e( h# P. ~! V6 z

  170. ' z) n( z: I5 q/ @
  171. }
复制代码
: ~5 U8 G; J7 a. a. J6 B! B
以下为摇篮5轴计算过程代码
. l& @7 ?, ^9 u" V2 T" `+ @
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);/ K$ z8 u, v% H# c3 c
  2. ) N7 ^! I* V; z% ^: q" w
  3.          j=0.; B1=0.; B0=0.;# h& B$ [/ j& L# C. B6 m
  4.   A5 X6 L  W5 ^1 C, z5 q# i
  5.           if (EQ_is_ge(i,0.)) {4 C  h5 e6 ?4 l- l6 {* l

  6. % g9 n, G; `' O7 i% Q# z% i" y
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }9 ]) w6 @3 ^( J
  8. + e0 N8 p- J) [
  9.           }
    8 d1 W4 ~: x0 Y3 j
  10. 7 _) H$ ?& e$ _1 n0 ]
  11.           if (EQ_is_lt(i,0.)) {
    ( p$ h5 C* V0 C, U( H
  12.   W$ l  W( x- G
  13.              if (EQ_is_lt(k,0.)) {) }" N# l& F) _# m+ e

  14. % M( H8 Q( M+ L7 T4 u% P8 b
  15.                 B0=atan(i/k); B1=B0+PI ;; R; k7 @/ p! n

  16. 7 \+ @/ j8 X! q  K
  17.              } else {
    % d9 q& b+ N& v2 T6 |1 x% W) a

  18. * F  }/ r% q. k$ S
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ( ?: p2 L) O2 t6 p5 ^; @! i. r- {

  20. ; D( p4 U4 M8 X
  21.               B1=2.*PI+B0 ;+ W5 D+ t$ s2 X( C
  22. ( x0 x" L# f# ]6 o
  23.              }9 ~5 X% H1 R5 P' F# l- ?  H/ P

  24. ; m: h- K) E+ K, {6 v, c; D
  25.           }, l1 g% |0 `( P$ Z* X9 X! Q  n
  26. 7 y0 `$ ]0 r* @, F9 [- a
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;7 G: Y  \- \% w: j3 E+ k" ^

  28. + h' a) h" a8 x  f& }& _
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));  c  M: a  d& ^6 w; @9 a* {

  30. % q( c/ u5 v3 [& B1 O( b$ t$ M
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    " f4 ^# B9 n% p
  32. 8 K' P, x0 K+ K/ v+ K1 P/ ?% d# b
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

& _: s0 K& b# b# T通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。8 q3 R7 @4 M- v9 S0 y  W/ {/ Q; Y

  K( }, |+ e+ y0 L6 J 640.png
3 T% K; o- D2 o1 I" a% K/ R  K. F* b, c测试结果:
2 ^7 U4 f8 T& T% D6 C7 m 6420.png
) j9 u8 L5 c8 f1 a* a# e& w
' b; X# a/ L3 a5 i反向测试结果 6410.png + F/ f1 C) t, d

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

170

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-13 22:37 , Processed in 2.577298 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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