找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6541|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    + K* M( q1 y+ x2 b
  2. int  EQ_is_ge (double s, double t);" R  z! |: i) _& @3 a
  3. int  EQ_is_gt (double s, double t);% Y( {8 _$ H" W& Y
  4. int  EQ_is_le (double s, double t);: A" E; I' D( @/ }
  5. int  EQ_is_lt (double s, double t);; l' ]2 w8 `, H5 o3 N
  6. int  EQ_is_zero (double s);
    $ H: m2 ^6 l. T( W+ O+ f: a
  7. //=============================================================
    / Y, s: Y7 ]7 ]# E. z2 M9 P' R  ]
  8. double ARCTAN1 (double y, double x );6 ?1 W; V! }. a& F' K& N/ s) H+ I& l, D
  9. //#=============================================================: h$ r/ p5 r( |$ L+ U# X, K
  10. double ARCTAN2 (double y, double x );( K! m8 T/ I: _0 [8 K
  11. //#=============================================================
    % N9 v! w# T0 v5 X2 e
  12. double CheckConst ( double angle, double constvar  );
    , G( q3 m. I; [
  13. //#=============================================================
    ( w/ i4 Q- ?. i  I1 [# w7 R" u
  14. double Check360 ( double angle );- S! r- L4 Z0 X0 y4 u. r
  15. //#=============================================================
    ) _4 }% m' A3 o. @  L* \$ f/ j+ b
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    " H) l1 a/ S: H1 x
  17. //#=============================================================
复制代码

4 @2 l5 R) u4 H3 L: }以下为部分源代码,用于判断,计算角度等. A5 L7 I. a. u) C
  1. int  EQ_is_equal (double s, double t)
    ! ^" z( b8 Z, ]- |, O! N4 Y. @
  2. * Q  D' {% H6 s8 H- @2 k) o
  3. {
    0 Q8 b4 u0 e5 ]2 G7 ^, a
  4. 1 e0 }) i4 T; @
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ' q3 N: Q% I% Z: z2 @1 s

  6. : j) g& q, _) x- c; }- r# @" x
  7. }9 h* u8 S8 c- m% D( ?

  8. 2 F) W' `; {2 ]7 z
  9. /***********************************************************************/3 a. z6 x( J3 z8 G; `: T: {5 H

  10. 1 w  I$ M6 N' \2 M) k' |8 I- Y
  11. int  EQ_is_ge (double s, double t)
    9 E  |# n$ H, W! V/ u2 H
  12. $ {; X6 k: d6 Z
  13. {) ]7 f9 R& A3 \8 e
  14.   e8 ?" b/ w) B1 N/ s' z0 W* {
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    2 m) `5 b7 d  Q! G

  16. 4 D" l" A5 W  ~/ U' O* i1 r! e
  17. }
    % }* v" t/ Z$ c3 U& p; s$ Z

  18. ! K7 n7 Z+ a" T2 U7 G1 p8 }
  19. /***********************************************************************/: ?9 W$ c  E8 ^- Q
  20. - f" q; E8 h" y2 B9 m
  21. int  EQ_is_gt (double s, double t)
    . S' X: j8 S7 n' Y
  22. # g& K" A& u7 D5 P. W/ d1 q$ G7 Z
  23. {0 z, y; }$ z% l) o$ E  X8 |
  24. / d% [- N' g9 a; [7 u9 M2 g
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; U- i, L% }' X: x5 R) L) _
  26. ) y7 `. T- }9 r3 L+ p/ U+ f$ Y
  27. }% Q4 z6 b* |4 [2 q3 Z* i* L5 {3 n

  28. & K9 m2 }8 d9 `5 R5 B
  29. /***********************************************************************/6 R* A6 V; s7 k- S) s
  30. " E; A' T2 H$ @3 y4 E/ K/ X
  31. int  EQ_is_le (double s, double t)
    0 A: N) F8 b  u% @3 b
  32. ; A+ R. _7 R- e) A$ ^- I
  33. {' g$ v# ~: R: p4 s* G

  34. ' H3 W) i' w; g5 h# e0 n
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    " y" A6 s) _( S; D& l- i
  36. # O2 D" ]% k4 r
  37. }" B& [* g& p+ N1 c/ l- G4 I5 o( [

  38. + g" R+ E9 f; p4 b
  39. /***********************************************************************/
    ) Z$ t3 f" i. T3 t1 x+ x
  40. ; ~) x2 b: r; h1 M+ P0 a$ T
  41. int  EQ_is_lt (double s, double t)
    ( r( v# G7 p& Y, S8 n/ Z8 O

  42. 3 E, T* E! w* i$ B
  43. {; P$ ~' _$ C. k& c' @5 L

  44. ' y$ y, Y( A, n; z' K! `
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    " ~* X+ R! L  G  Q1 a
  46. # z# B- \/ d' `% I; v- ?
  47. }
    $ A* W/ \* i4 X1 h; Y6 f

  48. ! d3 s; m, p$ m. ]( Z4 D% _
  49. /***********************************************************************/5 y/ n. N% x- N" I6 e3 L
  50. - J' |. ]. |* L4 B
  51. int  EQ_is_zero (double s)6 b' R1 T7 L- I, e( m

  52. . x) y: M. X* o- h( ~
  53. {  ?+ Y4 u/ y) S( z: P

  54. 3 ~$ u( e4 c1 {- {( n; B9 H! _/ x/ L
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }* J0 w5 y8 R& r. k9 q

  56. & q7 {% k; Q- H$ F  q: A3 S
  57. }+ o" i8 {' w5 E1 ~

  58. # O; [( \7 @0 Z& h' b# N- d
  59. //=============================================================2 n4 `' x8 ?, s* m# \3 h" {6 x
  60. ) b1 Z1 \# U/ ]  [% J- z
  61. double ARCTAN1 (double y, double x )* }; M' y, W% P# A' a6 m+ N9 {: [# D
  62. ( `3 O, R0 _3 D4 `7 h0 ?
  63. //#=============================================================
    7 b8 H6 F6 \: N/ g* Y) |2 `7 G
  64. * b0 P$ h+ o. l4 d
  65. {
    " [7 H1 T+ k# h4 U# F
  66. . @7 a  h6 Q$ T1 u# t7 b
  67.    double ang;
    5 I. R, x) r+ {- U+ ~
  68. / p3 x$ E8 L; k+ P
  69.    if (EQ_is_zero(y)) { y=0; }
    ' f2 Y# U# \! T. z" E( J+ V; I

  70. % q3 Y% Y, e5 {7 e8 O
  71.    if (EQ_is_zero(x)) { x=0; }3 m6 S0 ~! ~! y2 |; v$ [( Y

  72. ) E. d/ H4 k& {, C
  73.    if (y == 0 && x == 0) { return(0); }/ L: o9 V4 g3 O. R7 o6 L
  74. " f) n' c  R, q( q, k3 e
  75.    ang=atan2(y,x);
    ! z4 H8 N4 w/ g- |; u" d+ R  q  Y& f
  76.   Q7 f9 j7 k) b2 H' b
  77.    if (ang < 0 ) {
    + |7 c) v* c( R- F

  78. 8 t9 a, p; n. h. ?. c# G4 i3 [0 ^
  79.       return(ang + PI*2);$ p  m! T$ F0 M1 T9 Q( }' t* b6 |' b

  80. # I6 d% ^% c7 k0 h$ t7 Q
  81.    }* j6 q, U. U, n. m: J2 p2 z! c0 D
  82. 5 u: }. t* _( R; r
  83.    return(ang);
    $ j5 @  l) U5 G. L/ @
  84. . B$ Y3 S6 W+ r- t
  85. }
    : {4 n9 Z: o7 w

  86. 6 i, }  {" j, ?- U1 g# F' [
  87. //#=============================================================6 E: R% D% z$ `- f; X9 s% T
  88. 8 x1 r  K- L, O3 u* ?; L. E
  89. double ARCTAN2 (double y, double x )
    ! }6 L* Y3 M- d+ I
  90. 9 v  A; Q0 d- t" n3 y2 N
  91. //#=============================================================, k7 Q, {4 r" k* Q$ S

  92. 9 Q0 Z2 S! D$ _! P5 W* h+ `
  93. {
    $ z6 q+ K2 g5 e7 u* @
  94. ' T/ ]. K+ ^( u' ^
  95.    double ang;4 }6 }  ], v% ]4 G* L1 b# `$ i% ^

  96. 7 E- ~/ l2 x, ?3 _. D
  97.    if (EQ_is_zero(y)) {" I! B  n+ Z) p

  98. ; A( i' \. g/ q2 {5 k8 K
  99.       if (x < 0.0) { return (PI); }. Y* {& U  ^% v, @; |
  100. $ T- }2 `1 I3 L9 r0 A5 N
  101.       return (0.0);! C, @& w. Z9 D- ^* Q

  102. & H% O" O4 h7 b; A
  103.    }
    * ^. |2 ]( [) y/ M) }& z

  104. 8 `: P3 K! C" \
  105.    if (EQ_is_zero(x)) {" d) @& i0 P" F. n$ I

  106. ; t- R. q' Z: ~, m6 {
  107.       if (y < 0.0) { return(PI*1.5); }* u0 M$ M$ m& h
  108. 4 g# e% e2 d2 s( D9 i: U
  109.       return(PI*.5);( t7 |! u. [3 n

  110. 6 Q8 H7 A, n* M9 }- i6 O
  111.    }% s; ^% g7 r/ j) E0 F4 o$ b3 X
  112. / i+ @/ q" i. }* R( m# P$ |; y" a
  113.    ang=atan(y/x);& C  g" z/ \  [- {) ?2 |, Y& O0 \* O. j! c

  114. 2 P7 j; d$ {* Z* D6 o8 Y' t9 M7 O
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    * ^8 H, ?' Y+ ]& {/ Q

  116. & r: _4 a& X# \# [8 c
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }, j! n1 z" [% G' x0 v& r

  118. 8 H6 j4 z* H) C/ i# o
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    # D, v0 b9 \6 g8 c
  120. 3 e, m/ w% ?7 J7 C5 X  B, a
  121.    return(ang);( x3 u8 o  ]  x* G$ l7 U, N

  122. 0 c% T) r! a2 l7 h3 v# ~
  123. }1 I# A# i: I5 t

  124.   m* s& \; E6 p+ p5 _
  125. //#=============================================================
    ( }7 Q1 x, G/ Z6 q3 ^# c
  126. ( S/ X% t  r: E0 n8 F( A& D
  127. double CheckConst ( double angle, double constvar  )
    , I& x2 Q+ O- P  ~+ K
  128. ' Q1 E; L5 K- ]0 }* ]6 @" T8 M; E
  129. //#=============================================================
    / ~* P% s8 l. }5 t* m
  130. # k" r% K0 `- f0 n& ]. B7 M
  131. {
    & Y" X3 H0 l: f9 `% x* T( [

  132. & S- L/ \( |' A" ^+ ]: V
  133.    while (angle < -constvar) { angle+=constvar ; }
    - [- @; ~3 u, z5 E

  134. 3 \. y' D# y4 I) R
  135.    while (angle >= constvar) { angle-=constvar ; }+ |: `2 E1 h6 J9 \# h' F) R2 K

  136. + ?9 @1 j9 |( \" |: |/ {; g. `
  137.    return (angle) ;
    8 d7 W8 j% O' A. }, F9 N& h

  138. + J/ k; G! N" K) s. ?
  139. }
    ' S8 }: t: F+ l- Z
  140. ) A+ R, O2 Q4 T9 `& |* O0 _
  141. //#=============================================================
    0 o; j1 P* i2 U, N5 X3 [

  142. 9 W7 n1 b1 S8 K5 H+ \
  143. double Check360 ( double angle )
    . V, ?3 K* B9 w$ N8 \- r

  144. % |9 X6 d8 q* n7 w; M8 R
  145. //#=============================================================& S0 j2 S7 @- I* N7 |
  146. : X. g1 P, H: L' e: y
  147. {! I+ c3 b0 _' u" `6 q% T$ Q
  148. . m5 a: d* N( u1 Z2 {# h( [
  149.    while (angle < -360.) { angle+=360. ; }
    0 x8 c) B4 Z2 M' x/ N

  150. 2 H4 x: G3 G% c  W
  151.    while (angle >= 360.) { angle-=360. ; }9 ^; s* x3 G, L9 |! Q' E
  152. ) \% I- _2 N; k6 O. }
  153.    return (angle) ;7 d# ?; L( D, I% [' `
  154. 1 S  p( U% M5 f) L7 j) m
  155. }
    4 ]: l" R" @4 i* G- F

  156. 1 Y& s* W; K2 x# R
  157. //#=============================================================
    8 R' a- T' k9 |9 K3 [

  158. . ?- T- k- j/ n" O8 [+ T) \  q- S
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- f' l8 }. L2 B. X- ~9 v1 |: D

  160. 0 L4 r1 X2 f# l, ]" Z9 T
  161. //#=============================================================
    8 C1 V( Q" Y6 a8 E
  162. 5 B+ ^0 Z/ e2 x) T
  163. {
    / q, m3 o' I1 |5 K8 J5 y

  164. : w, Q" e/ l) U% Y0 _$ B; S
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    % P' g- e# n6 z% T; Y1 Y
  166. & K: L/ i( D2 b" y8 ]  k) ]+ N6 e
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }% E. V7 y" y2 `! @

  168. ( y/ M* o$ v; i" f, d) r
  169.    return (angle) ;+ k+ L1 C4 R" h1 l

  170. 0 g; K% q" w; [9 v2 c
  171. }
复制代码

+ m/ w$ _* T5 k! Q5 P) A- N以下为摇篮5轴计算过程代码
" o  X2 P7 P! _
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    / i1 ?# [5 R0 \
  2. , f' j' w3 \1 ~7 |8 R
  3.          j=0.; B1=0.; B0=0.;
    / }1 Q  G+ o3 M7 Q4 H

  4. " \# s7 C. D: x7 l8 ^$ i7 G7 |
  5.           if (EQ_is_ge(i,0.)) {5 l7 {5 {  H4 o
  6. 9 ~9 Y. K3 `1 E) F. F  K" F* Q$ f
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }1 |2 M( V8 ~' P" k) k4 T3 d

  8. 9 I4 |/ a5 ?3 p9 q6 X) R
  9.           }
    : t  b* [0 @3 H8 {9 y- o6 w  D
  10. 1 U9 O% p5 S* d9 ?+ R4 [7 [
  11.           if (EQ_is_lt(i,0.)) {5 C; D# [" m. I$ o" Q5 D

  12. ! ?1 W& H. S- {( a9 A
  13.              if (EQ_is_lt(k,0.)) {/ {" b; o  F$ P5 A

  14. 4 `+ B/ M4 G& ?6 |" _& T$ E# T
  15.                 B0=atan(i/k); B1=B0+PI ;: I: Z3 E7 b% ^9 o8 z) D2 g, Q9 k: @

  16. 8 p" R  l: P' z$ r! H+ L. R# ]5 V, u
  17.              } else {7 b/ B; P0 L& o" C+ Z
  18. $ D* t3 x0 d& Z) i( s
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    9 ]/ w* ^  f& ~4 i
  20. 6 ^( V/ L6 s5 ?  o, k! T
  21.               B1=2.*PI+B0 ;
    & ]0 c) F% m3 x! u

  22. 1 ^0 P9 i& F4 l3 P2 H2 [
  23.              }
    8 q/ k$ ^1 J$ k* m

  24. 1 P6 o: @. h7 c, O" C" A1 V  h
  25.           }
    - K7 Z8 o3 P! |% j3 \% u( z
  26. 7 X: D) n8 t% i6 F
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    - [5 A& q9 T' G# E: C: d
  28. 8 p& S/ u  }+ Q8 A" u! Q7 b1 m
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));* }$ N( _3 U7 @* `! \9 H3 R4 H( Y

  30. # Z  k# y0 O  Y4 \, k7 _% g; c
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;, S9 p6 m! @- ]6 g

  32. ' C0 T9 J$ Q5 |# o$ q* ?
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
  H! X1 n( x' k/ U& M
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。. E* x' ~% I5 R$ v$ i' c5 K: T7 U
" E1 ^% D8 H$ J, W. k- D
640.png
! X% w6 o& U( w2 `* `: l5 ]测试结果:8 ]5 F7 \/ @, x; ^3 Q* h: o
6420.png
& y: e2 A) Y' b4 [0 ~) F+ y3 x  x6 @# `
反向测试结果 6410.png , R( b4 Y  H+ k4 i" G

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

190

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-7 00:28 , Processed in 1.164022 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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