找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5376|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);' t0 b+ i3 t) D$ x) r- z, a
  2. int  EQ_is_ge (double s, double t);, t0 f4 b" C3 j% R1 d1 q* Z* p6 E
  3. int  EQ_is_gt (double s, double t);
    2 i# m# x4 S( ^$ |+ q7 A: P
  4. int  EQ_is_le (double s, double t);0 W% R8 D# h) K. g4 m  `5 z  f
  5. int  EQ_is_lt (double s, double t);8 d- I/ Y  d4 o
  6. int  EQ_is_zero (double s);
    5 R7 n+ Z3 S5 y$ u3 H5 o. m0 I) |
  7. //=============================================================
    4 {3 W9 a' f% ]8 i
  8. double ARCTAN1 (double y, double x );! I6 p- x8 y& E3 u" B
  9. //#=============================================================
    ' N4 G# N/ d, B- p& r9 S% R8 l% \
  10. double ARCTAN2 (double y, double x );9 V3 b$ K7 ~) m0 f( @
  11. //#=============================================================6 w' r% i5 }! A5 R! l+ Z
  12. double CheckConst ( double angle, double constvar  );
    ) X2 z) Z* @( t' c( k
  13. //#=============================================================! }! B: Y1 y  o1 X5 Q
  14. double Check360 ( double angle );, k( Z# }& x$ {4 ~3 P
  15. //#=============================================================4 B* e7 U" n. ~2 W: o
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ( x! \1 A* w" ^/ [
  17. //#=============================================================
复制代码
" h- d7 ]: Q: B. o
以下为部分源代码,用于判断,计算角度等
" t6 `/ q0 C( D7 N+ N
  1. int  EQ_is_equal (double s, double t)6 z8 [, H, p% ]6 L- F5 P

  2. ! z6 x; m% H  A" f2 m& n9 e
  3. {
    * [2 k! R; g: ]7 F# j& P2 j

  4. ! ~( i1 \; @8 k9 s. h6 q+ z
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
      d, s& Y; [+ R- \
  6. 4 N& S. ]( z5 f& g7 V
  7. }4 ~# J- A8 p: K! m# z

  8. 0 }) X( S: k7 l- h" i! {. M2 @
  9. /***********************************************************************/
    - s# E; ?2 Z, u

  10. 8 X; C& c+ j# K8 y0 X8 g. @
  11. int  EQ_is_ge (double s, double t)
    * A' F7 l* V. F( N$ T
  12. 6 |3 C0 E* H; i0 ~7 q. `
  13. {
      a+ d. ?& {" Z$ O
  14. 9 i- P9 e# n" o$ L' I
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    : V' Y6 D# m$ d. a

  16. ) Y0 ]* C  \4 Q" f
  17. }
    1 t3 u8 n4 j; x8 z4 [: x7 n2 Y

  18. 1 v2 l) N3 A( c0 l" n
  19. /***********************************************************************/
    ( H  p. J0 c3 s" @5 z% Y) g
  20. $ x8 j6 B$ d* H7 k1 D; s
  21. int  EQ_is_gt (double s, double t)+ x  ?+ x5 k: k& i

  22. ) Z& g# f# N/ v* O
  23. {
    , x/ w- F) Y0 L: ~5 w& d! V
  24.   G; q9 L( t9 Z7 `2 j" l
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }7 N$ G; U5 U# P9 c* L! w% M  U

  26. 1 \- s% e1 ]" Z
  27. }3 {8 L) x7 r+ W6 f* Z
  28. . X# J8 x& u- {
  29. /***********************************************************************/, o; O0 J* u, D+ g- W7 H: |* I
  30. # j9 C* Y$ a$ a1 E( u+ O/ ^( G
  31. int  EQ_is_le (double s, double t)
    , W+ s) b6 f6 _, q, H
  32. 1 K* m% X% a' A% W+ m4 |6 f
  33. {
    0 t0 l9 j2 l1 D% V; w3 k" ]! G3 M
  34. $ r3 }- C9 Q8 s2 P% o
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }2 F: ^/ n! p  e

  36. 1 K! R9 _3 j7 j  u: \( x* W
  37. }
    6 A1 Q7 X" x$ M" X9 f# j$ C

  38. % W( b) v/ y2 \& G4 w
  39. /***********************************************************************/
    2 e; H$ d( r* Q) s
  40.   x9 Y/ F& y2 Z! |( L* w0 y
  41. int  EQ_is_lt (double s, double t)
    6 t/ C% x' ?0 N$ ]1 q7 P
  42. , S) [- Q. k( p/ W$ D( C
  43. {" u- X+ i$ R, C: X8 U, l+ @( E: \+ i
  44. & v  w$ Y, o7 K7 O
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }8 b" m/ m- M% r4 x9 L# W( `

  46. 4 u% o1 L1 i; g/ d7 V( q7 c0 ?; y
  47. }
    ( r1 N% I2 Z) m1 {/ B& s3 ?

  48. 7 M& ~" v  K# R9 @' u. B
  49. /***********************************************************************/
    - h2 k* ]# H' X
  50. 6 O+ N5 O( ~. C$ Z! z6 K
  51. int  EQ_is_zero (double s)
    $ k; Y8 a& Q/ I

  52. 5 n7 o+ E2 U6 i, R! C# g$ l
  53. {) x7 \6 O6 t6 \( I& V
  54. $ c4 b& _* t4 D# v
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }3 h2 W3 y% j: D& A+ o5 ^
  56. % W1 e* X  k' f9 |
  57. }% O8 T; ]$ u- h6 f6 |7 K0 t* b

  58. & _# ]5 Q3 P. _
  59. //=============================================================
    : H" b+ S; Q  U; z: M  k' ^

  60. 1 _( T3 |9 U; I& ^
  61. double ARCTAN1 (double y, double x ), ^7 B% |) I, S. G9 S

  62. + d, x7 c( v  |
  63. //#=============================================================
    & n9 h# `6 p; k; j/ }" E: u

  64. 8 K3 Z! c; Y2 U3 S8 Q
  65. {
    1 ]" N( v' I: c0 w

  66. ( @7 t8 |3 `- [7 j
  67.    double ang;
    4 ?( K, j4 Z5 }1 C& m) T

  68. 4 j. E- z0 u# ]
  69.    if (EQ_is_zero(y)) { y=0; }( U: o' S% P5 x5 r& v

  70. 2 v* U- f9 k1 o
  71.    if (EQ_is_zero(x)) { x=0; }
    . r; F: L* Z- F& l: U( z! i* r

  72. ; I7 _1 v3 Z. ]7 q* e
  73.    if (y == 0 && x == 0) { return(0); }
    3 d- S; R7 w6 R+ u9 j& M" a6 i
  74. ( @% ^6 U6 G6 U$ D% N
  75.    ang=atan2(y,x);
    ) D! ]8 z/ g: P* ]# d& r6 M' O- r
  76. . w. J, T( n' L5 e9 q, f
  77.    if (ang < 0 ) {
    ) {( C( b' w# U; i  e
  78. 6 ^" C: ~' Q  M# _4 q- a% D
  79.       return(ang + PI*2);0 E0 X9 |. v$ [2 r0 R
  80. - m$ _5 Y# h. S. n/ u1 Y3 b
  81.    }
    + R1 X7 a' m& K' x9 X$ r

  82. ' j7 O+ n! s7 x. d- S4 W
  83.    return(ang);) k3 f* s4 ?. a* D; d
  84. , y! L0 N, h3 E9 N& F
  85. }
    " m9 y4 k; {4 j3 P
  86. + E# `5 M: F; ^; s
  87. //#=============================================================
    1 N( \" ?) Q4 Z" r$ W$ }

  88. 9 M# B! F& V& J7 w2 K9 Z
  89. double ARCTAN2 (double y, double x ); ~0 \7 m4 ?# E1 ?; r# y' l4 {7 L3 j+ s- A

  90. - B  _) H: ~) r7 K5 T
  91. //#=============================================================
    0 s8 {% U5 x3 V1 q
  92. & j) v% ]3 t+ G
  93. {
    3 |" D9 R2 ]' q; I
  94. ; W0 j, d1 i1 u$ x1 i) w- H; q
  95.    double ang;. `* _" C1 H  W: u# T! R& ~/ @# q# X  d
  96. . W4 Z' ~) k1 e
  97.    if (EQ_is_zero(y)) {
    $ |2 ^; Z7 J- R: o7 [$ n
  98. 0 q* Z( N) ?9 w1 p9 D# b
  99.       if (x < 0.0) { return (PI); }* O7 V2 S9 N* ]$ d

  100. , N) C1 R7 F% v2 y8 N5 O& I5 ]
  101.       return (0.0);5 `" e$ J2 j0 \

  102. 9 u* o3 m0 h* P5 ?, S
  103.    }
    0 `# S& O; B0 F7 f! K( G  |

  104. " r* h! p. q! a! B- Y: ~! z
  105.    if (EQ_is_zero(x)) {4 e% q+ n( `* n* D

  106.   U5 j+ f4 ?% b8 w6 _5 Z
  107.       if (y < 0.0) { return(PI*1.5); }1 Q; V$ S, t8 ]( o: }2 O  o
  108. % {2 b# u/ H6 _! K$ A5 Z! U
  109.       return(PI*.5);7 b/ T! l* C% k; d
  110. & e- g9 o+ Z; _$ t
  111.    }/ z; M1 H% ?& i  L  L: Q0 I9 j

  112. . i6 L- q; z4 S; \! j
  113.    ang=atan(y/x);3 H" f# o# l$ _  v3 C' q

  114. $ V  \4 |* H% l+ K
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }. A" w) ^; N- A0 m  Q9 j7 e' `

  116. " U. E( L: h/ k* I1 Q
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ( ?, E; Q0 L: Q) `" K) n+ x
  118. 1 _9 S( x- L$ `& N1 q8 n$ b
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }3 X" j% n  X- f* y

  120. - [# ^1 _4 d0 H, i) a
  121.    return(ang);
    / @) z2 [$ l) q. k& r" m& p8 W
  122. $ x) u, j' V. S) U
  123. }. S) i7 R, o4 Y' K% T
  124. + o( }7 X( {! k. k* a2 B
  125. //#=============================================================3 c( k: L2 _: ?6 L* q  E
  126. ; j! i. g. ]: M% Q
  127. double CheckConst ( double angle, double constvar  )
    , \. |' v+ r5 f2 B  y

  128. 2 Z" p- ^+ M" C1 T# z- D% ?* \+ B% B
  129. //#=============================================================% P3 Q8 x4 K7 S6 G* t
  130. 5 w, e1 M* D5 Z7 E0 X
  131. {4 p2 K/ i% \' y4 d; ^
  132. - p0 N+ m9 R3 c
  133.    while (angle < -constvar) { angle+=constvar ; }9 k1 P+ o5 X3 ]. [, Y! H$ N5 C7 w) w
  134. 2 V& ~; a0 l+ x# F/ J
  135.    while (angle >= constvar) { angle-=constvar ; }
    " ]0 X8 ]1 _8 ^3 w( a1 ~. M0 b
  136. ; a  C! K. \  R! P! G
  137.    return (angle) ;7 [% I" I! B( a2 W7 }/ Q: Z* w/ [
  138.   f" X- G1 z# D
  139. }
    ! p& T; X9 J7 [' g; u
  140. 5 m: d* J1 U$ r" W
  141. //#=============================================================% q5 H! }* b! {5 J
  142. + h7 I" |0 @6 y# A) p3 l
  143. double Check360 ( double angle )1 B, @3 U0 s1 u0 }( {8 T* \
  144. 4 ^( N" j9 |% `3 d2 J& E( @
  145. //#=============================================================
    , S0 x; ~) {$ n1 G3 Z0 C
  146. % D' F5 ?3 c3 U, T! T8 c
  147. {
    6 z! e" M& `5 f0 Y
  148. . Z* i7 u9 _9 S1 T, V
  149.    while (angle < -360.) { angle+=360. ; }
    : m% L# Q* l! ]& l: t5 K
  150. 2 h) H/ |' R8 ]$ t' t
  151.    while (angle >= 360.) { angle-=360. ; }2 `3 C% j' S" Y+ l
  152. & u+ R, v$ P* g" |- ^# }
  153.    return (angle) ;$ d- b* j$ `/ d6 u: W0 _( l
  154. % W* `$ L% u3 y( ~
  155. }  n9 N/ M' d5 H) o2 t

  156. ( n, v$ }% j# _
  157. //#=============================================================4 R6 e/ U- p. }  n) }
  158. 9 H' Z9 x  ^3 S) ^: ^/ @' g+ ~
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ; _- P. U$ W7 h; {! A! @7 C4 g) @, @

  160. 0 S% |) V1 O- f# ?( A
  161. //#=============================================================. r# x4 [1 o+ j( w
  162. 7 l/ B& i* P/ g, w
  163. {
    - A$ b# \% m, s" S( w0 r# I
  164. 8 Z4 N% N6 G. _% `% i
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    ( r5 ?% _, Q# t- C+ e; Q
  166. ) ~- g  U' M5 K6 M% k- p& e7 h
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    * q# n8 T. |4 f2 Y/ x- v) }
  168. 2 z: L- @# _0 \! G  A
  169.    return (angle) ;
    1 H3 P0 B+ f9 X4 b. ?& m

  170. ! o9 e# [/ w# m
  171. }
复制代码
1 S! E3 S# t& h# ]
以下为摇篮5轴计算过程代码
; u! O# T3 g) _" Y! g5 @4 y0 M
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    4 N9 I& r( y. ?3 ^3 O
  2. ) |" p- x# h; p2 p0 O
  3.          j=0.; B1=0.; B0=0.;8 p( |4 q& S; r/ t" [4 @7 R

  4. " W0 V% R  g* P- G2 Z' P) q$ p
  5.           if (EQ_is_ge(i,0.)) {3 W7 J/ T9 H7 v2 c/ P. \
  6. ( Y6 `0 u: p4 N3 @5 t7 h% h
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    % \+ ?- l& Z. e( N

  8. + V" W& x3 k7 K
  9.           }
    & C0 Q8 `  p* Z

  10.   o3 M0 D5 [0 P  h: u$ T# z
  11.           if (EQ_is_lt(i,0.)) {
    # t5 N) m! p! U7 N$ J3 A' o4 ?7 S* x

  12. ) w  t: S7 F0 ?, ?
  13.              if (EQ_is_lt(k,0.)) {
    & f# \, N( M& N6 G: \

  14. ( Y* `! t9 g; r8 b( b1 ?/ {/ u
  15.                 B0=atan(i/k); B1=B0+PI ;1 X3 X5 v0 L; M* ?) i
  16. 3 O; p% l4 o' Y8 N& g  j$ A
  17.              } else {
    . ]* `7 X% G! M, {$ X# M# {1 r% D

  18. / u; d9 Y' a, g* C" ]) ~( W
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }3 m( a# b4 O) e0 G9 E# m( N

  20. $ j& e7 G' F! L; j' M
  21.               B1=2.*PI+B0 ;
    1 f9 m# U& d' }7 I3 H: M
  22. 4 n3 f) G( v% O% U1 Y9 q
  23.              }
    : U- |' Z5 r) U2 B4 L
  24. 6 T1 F+ [! \+ K4 B) l$ t! D
  25.           }9 z6 l. [, h8 }: h4 u2 N/ e

  26. / R4 ]! h, Y8 `8 u* ~6 K
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;* u, j) w* Z& B3 h/ w- G

  28. 5 W) e$ D2 c7 Y& }
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ( A+ R( j3 x$ ]# ~! s, Y; P- w
  30. ) |# g, Z9 n' t
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;) l/ W2 u- l& _
  32. ( [0 [" G2 ?1 {! j$ N( W1 F# A5 G
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
3 B  h1 s/ h+ U  N8 \: o3 Y# q! n' m. N
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
6 c. B7 X2 k8 i7 J
) i7 r3 J  I% A: j5 h$ @ 640.png
1 D- r( n/ e8 r: @& b0 L测试结果:
. J6 \; g; x9 p 6420.png 6 k, h, Q# ^/ k3 O# _
; a, {) \& N5 y5 v& }, [/ s9 e4 i
反向测试结果 6410.png 0 y# M. Z/ W. l' a3 J

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

158

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-11-1 17:33 , Processed in 0.904677 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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