找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7061|回复: 3

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

[复制链接]

433

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    1 |5 v4 ?) T0 Y! T0 a1 u
  2. int  EQ_is_ge (double s, double t);
    & a3 N0 X3 L2 r5 a$ Y, t  F! X
  3. int  EQ_is_gt (double s, double t);/ M) Z. q4 J! l# _( h
  4. int  EQ_is_le (double s, double t);$ y# D6 b, Y) e% \- V0 J# W
  5. int  EQ_is_lt (double s, double t);# `4 a+ v: P( `# O% V
  6. int  EQ_is_zero (double s);0 x3 G) F2 O- B$ [- T
  7. //=============================================================; y. ?1 _7 g% n2 a* d5 G6 ^) n/ b, N
  8. double ARCTAN1 (double y, double x );" W+ {& T3 l  o% k
  9. //#=============================================================5 h/ ]6 G& z4 z7 h
  10. double ARCTAN2 (double y, double x );- [9 ]7 ?: Z' ?
  11. //#=============================================================
    + O- ^5 @* C, t' u
  12. double CheckConst ( double angle, double constvar  );1 c/ {5 S0 C# P4 u8 M
  13. //#=============================================================/ S7 e# k0 O. F
  14. double Check360 ( double angle );
    2 d; s: D  ]" D; P
  15. //#=============================================================1 r' _4 q# N' _& D8 N
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    / O7 n6 V% k/ i- d2 ?
  17. //#=============================================================
复制代码
- S* C. M% z2 L" q" ^: o
以下为部分源代码,用于判断,计算角度等( N8 e9 _4 {! a! E: {" [9 Y" P
  1. int  EQ_is_equal (double s, double t)9 `- A. ]" v+ Q! q8 `

  2. " @( e. T1 o- T; k
  3. {5 Y3 l6 Y5 M, n/ A
  4. ( ?2 m' V4 f( p  |
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }# J9 \; _# S/ m+ w! v6 s

  6. " Y2 _" y, w: E3 _
  7. }
    & q+ k  n: C& {3 E: K. R

  8. + z( M. @' I. [; H- u
  9. /***********************************************************************/6 _0 s" d) m* f! I! p% s

  10. ; y9 \. V2 \) D6 s6 u9 V+ _
  11. int  EQ_is_ge (double s, double t)
    3 s' x9 S. u4 Y4 d+ W
  12. 5 @5 j  D$ ^# n! ], u) X0 L# a
  13. {
    + l( F* f* x: I0 _8 X
  14. / p( q' T! V2 ?% L& Q
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
      h6 N& P8 v5 {* w' |
  16. $ P8 ]: }* d; K6 X' k
  17. }: t) h: |0 Q' E  m4 u  b3 a% [' O$ `

  18. / @8 F9 H0 C: b3 ^+ ^  ?8 T
  19. /***********************************************************************/
    - c; ]+ L+ R* l. A0 G0 D' F
  20. 5 {$ C) I$ a6 J3 q0 }0 Z' N
  21. int  EQ_is_gt (double s, double t)
    # e& _) K) c3 s) I6 y- g/ P

  22. 5 i9 p8 F( J0 |) M, @6 [
  23. {  C) p% [: e0 s! S
  24. 6 O7 @# B! ~# ~
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; w- T& g) M9 C7 z
  26. , m( Y& q2 S3 d! b4 c. R
  27. }2 C. K" j+ b/ A2 y3 T/ W
  28. 8 p% }" d0 t+ i' d6 U, u
  29. /***********************************************************************/& Z% ]/ L/ x1 n5 `! K# i7 K: {

  30. + b9 K: X& ?* P6 a9 l/ f! ~8 I2 C- `
  31. int  EQ_is_le (double s, double t)8 m& \% b$ l9 b6 Y, G; C, H9 K
  32. 2 x! Q; C! y+ K, l6 v% a7 z: G
  33. {
    ) s/ i- h: H' b% o5 i: P( F
  34. , H( {+ i$ V. X8 B' v
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    # @9 ?3 W. \* h: i

  36. 9 ]. S7 t1 d8 a
  37. }
    " k* Q3 E! B; N' f2 Y* X
  38.   _/ L8 n/ r  Q& ]" n
  39. /***********************************************************************/2 b* u, z6 ~7 |3 m1 t( D

  40. $ C  n; G! V8 ]" I) q0 ~' z/ k+ q$ g
  41. int  EQ_is_lt (double s, double t)
    % h+ ~7 C" k% y# x$ W6 h

  42. " N6 A( n& O" W! {
  43. {( b2 Z* M5 g' b- ~+ C4 U
  44. ( [4 E; g" \7 b
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    % Q0 c" \( R9 k" f6 L
  46. 6 ]* `' ]1 T. S
  47. }
    % _" N( M/ C' f- ], ~4 C- b

  48. : g2 A  G* u1 m! w9 ?, L& V+ Q/ ~
  49. /***********************************************************************/
    * U8 v  }/ S0 j. E7 l5 ~3 {$ A5 L
  50. . m  V3 Q& @" P4 ?% M
  51. int  EQ_is_zero (double s)
    $ k5 g7 N8 x, C$ N, \

  52. 8 w" N" q1 ~* s0 K1 E
  53. {& T' O. Q: H/ ^5 ], `4 t

  54. & C; g% J' o2 N+ `6 s
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) r" q) j# S+ ?; L! a& i

  56. 4 a: ~8 J  ]0 w
  57. }
    7 p4 x4 P4 n; J* ?  i

  58. * }9 [% w1 R! U1 L8 Q
  59. //=============================================================
    5 A! q" O9 I6 e# ]" U
  60. % {( ~4 e* G1 F! \
  61. double ARCTAN1 (double y, double x )5 |* i4 I% a9 \( M1 d9 A4 Q2 O
  62. - k/ W1 h( y+ I& _( d. r
  63. //#=============================================================9 D4 w; u  ]' E7 g# J8 T2 A4 f) \( ?
  64. . ^# t3 D2 H* M' \6 S6 l; O
  65. {
    9 Q$ C' p. K7 R8 }9 F! |5 g
  66. / d/ c$ q+ E  v
  67.    double ang;4 y; D) p1 v" T) z% o0 N

  68. * W9 Y: c: i/ J' _8 r
  69.    if (EQ_is_zero(y)) { y=0; }+ A9 c* g7 u) U" G

  70. , b6 n9 I8 V7 _: k
  71.    if (EQ_is_zero(x)) { x=0; }
    6 K0 U4 c- h: ~  }# q& y+ b

  72. ) [! ?# @2 A. M* I) q
  73.    if (y == 0 && x == 0) { return(0); }
    : X1 o! b: W6 g* E8 Y: C

  74. 2 Y7 k( D: U/ u3 X% e2 i& W$ z
  75.    ang=atan2(y,x);/ r7 n6 o0 G, u6 a4 U
  76. . X& k- A+ Z2 d' o) R
  77.    if (ang < 0 ) {/ E1 Y; ^. w3 k" U& H; T9 H

  78. 5 {  k, T- i4 C; p* S
  79.       return(ang + PI*2);
    $ @6 D  `! g- }. d7 {6 i
  80. : Y  c+ h& q, ?: \$ U7 `
  81.    }% [' \# G5 A8 M7 z" ^: c' x6 g

  82. # p5 X7 }! E& K8 f0 E
  83.    return(ang);' q* R% U+ \2 C& `+ e! U

  84. 8 x- p+ G9 r" {- T  q# @1 Z
  85. }6 @: V; s# ~: ~3 K& G$ u2 B0 ^

  86. 4 I0 j9 s* s- B6 v3 J
  87. //#=============================================================
    9 y' _/ R) p# Z# N" F

  88. 4 n, |6 _' g) A
  89. double ARCTAN2 (double y, double x )
    - m% ^% |, S1 F$ I% ]- m) Q
  90. & u9 W! u; @1 a  i
  91. //#=============================================================" C% k' |  j: i
  92. ! `1 G# P6 e7 |# w
  93. {
    ) \' y* `6 P9 u5 P* ]4 e0 ]
  94. " D0 z3 l2 Y0 S9 F8 e  m( D  ?
  95.    double ang;% ]" Y- s7 `$ {3 Y1 {

  96. & q3 [( p  H5 T$ J; m" Y0 u7 F
  97.    if (EQ_is_zero(y)) {" A: V1 P$ V1 q' q6 R3 l
  98. % n2 c( M/ d6 @4 L  O1 Q
  99.       if (x < 0.0) { return (PI); }" s: O2 {5 b, m! P0 I: Z
  100. ; D( K) b6 Q7 h& Y' p
  101.       return (0.0);; l% U" I2 w9 G9 z; a  @" s9 _

  102. $ l! e7 _( ^' B" X5 n
  103.    }
    # t+ |+ g3 s; ]1 o
  104. & L, U( p# e0 \+ v
  105.    if (EQ_is_zero(x)) {
    : C4 a& K) k. F5 l" z5 [  c, S7 N' |3 u
  106. + }& n( A, o# r7 J& {: ]0 X
  107.       if (y < 0.0) { return(PI*1.5); }' D* ^- A0 b/ |6 b5 K  M
  108. . O8 ~& j" h9 Q. b" w
  109.       return(PI*.5);4 c- b5 N2 O8 b2 y& o" z; m+ y0 v) X! Q

  110. # x$ o9 s3 z. G
  111.    }, K% D# q+ H6 k; I* d! q  b  i

  112. ; I9 t+ T  d- g' \6 R
  113.    ang=atan(y/x);, l- I! L/ D% {0 ~' t* K0 ^# u
  114. 0 p+ Q9 z3 E3 Q, d! k. U! V
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }$ z( e" g, Z* [$ d$ k

  116. . L1 e% L: K* u  A' I2 |
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    + j' L; p" e) p- t1 n

  118. ; n( O. }7 B! n
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    1 b' c9 X, x/ t
  120. 4 q- r: z+ P- Q% G
  121.    return(ang);. r$ H, B7 x5 P

  122. / p# d% K  l; N" J4 N, O6 e
  123. }( w1 [3 P! W. ]
  124. ! P( I: M6 \) @" G2 }% ~
  125. //#=============================================================
    . w$ X" p! r1 ^5 ]" l$ {/ A! M
  126. 6 R- T" j! u* x! p! e& i/ L) Z
  127. double CheckConst ( double angle, double constvar  )
    : L7 H( Z4 m' q% U2 m
  128. % Z# s: y9 M3 Y8 M6 F2 \, [. C8 T6 r
  129. //#=============================================================
    # Y! v* ]. J$ H  \* h5 F+ c$ _

  130. 8 ]0 H" Q# w8 t, b
  131. {
    & Q5 S: e& B" n- p: w! p4 }
  132. ; t  p# m) j4 p: ?+ W
  133.    while (angle < -constvar) { angle+=constvar ; }
    + V- e; }& q; \; `) P% j9 b
  134. ) N# o+ U( i/ c# ?5 R% R! W6 P
  135.    while (angle >= constvar) { angle-=constvar ; }* ?; d5 w! d  l0 [% ]% W. b
  136. - e( j( ?1 q$ D: Z' I& D3 I8 Q! e
  137.    return (angle) ;0 w0 G+ B; \$ w3 m. R+ P

  138. - s: ]$ U- t( z
  139. }2 n6 j  H4 ?. e+ m! U* E; j
  140. / H# v& r' d2 h5 a8 ~4 c% v
  141. //#=============================================================; ?* L0 _5 z) z/ i( b

  142. 4 e2 n5 E/ h9 k+ G1 S+ z+ B/ I
  143. double Check360 ( double angle )
    + U4 R# \5 m. d% s, y0 C- ]- b
  144. ) e0 F! v+ R0 `% j8 m# K: I0 e  @  n
  145. //#=============================================================
    0 s4 k4 w1 O( I/ p- H! @* w
  146. * J3 C/ B5 K6 e/ H- n  Z
  147. {( g7 A+ k$ F4 D' g! m" F

  148. / Q6 L! y/ ^) h% Q7 F$ r& s7 h
  149.    while (angle < -360.) { angle+=360. ; }! Z- n: X' t! v5 x
  150. 9 ]  V9 J& D- M5 k) f
  151.    while (angle >= 360.) { angle-=360. ; }
    9 z/ j0 {0 m5 i. F% L

  152. / l( X8 c/ {, |
  153.    return (angle) ;! z! |& R0 @1 Z. U
  154. 3 {+ i/ t  x# B* I2 [% O0 ^$ K; u
  155. }
    5 J7 z7 {( V7 C  s$ s2 F
  156. ( |3 g, C- X2 ?& k5 I
  157. //#=============================================================
    % T/ g0 R4 }3 \1 A" O3 n3 U& r
  158. ! ^: }. P& C3 J  B
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )  d4 q3 P. |& E# q  U0 O2 D6 S) E

  160. 4 n1 U; w0 V( ^1 I
  161. //#=============================================================
    3 n1 O1 s! _; O: n

  162. : H1 Z4 y; f" m$ W* ]+ z
  163. {
    ( p; d8 h0 x7 z/ f' o* o% L7 y& O5 v
  164. 0 _* [2 k8 v& `" p* \
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    ( z% i% H! x5 M( q
  166. ; x0 U8 x- k# J4 L! E& [
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ) L8 F7 Y/ J9 Y: ]
  168. 9 E& ~7 I. g( @1 p. p
  169.    return (angle) ;
    ( P7 V$ L: S* }

  170. 3 r3 H; L/ n4 g5 c1 Y
  171. }
复制代码

7 W% [) U! {. I8 D" [! p; J以下为摇篮5轴计算过程代码
/ n3 t2 R! M# B2 b' q% R
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    6 e: v1 U! J: l  L& H# W

  2. - v8 W( V9 F1 L! F6 j6 a
  3.          j=0.; B1=0.; B0=0.;
    $ `+ ]6 N* ]0 u

  4.   A, w9 U6 I; D8 G% m, m/ Y; b
  5.           if (EQ_is_ge(i,0.)) {
    * ?, r0 L2 L; h: X( [, R

  6.   a; B9 e4 I7 l% O* I1 I
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }( B) \8 }6 e0 P' J( T
  8. $ \3 J7 \8 [+ \
  9.           }9 Q5 X8 [$ U9 h+ a1 R6 ]7 I3 \- Z
  10. $ l  }$ c& x; d
  11.           if (EQ_is_lt(i,0.)) {' r. i+ k2 g. t: g% x- o8 ^* n

  12. ' W, ?% {& F5 L, \
  13.              if (EQ_is_lt(k,0.)) {
    * @$ h: O$ E: X8 r
  14. / t, x" i) ]3 W+ G& a9 P( \
  15.                 B0=atan(i/k); B1=B0+PI ;- v% P# p4 V: }2 ?, {
  16. 1 |. B1 \# B* k' o! U$ i
  17.              } else {
    2 ^+ A/ M# u2 f

  18. / ^* o3 t5 G& S  v0 }* W
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }7 |$ j# k  I: Y0 k" k# \
  20. " @  J: i+ U% d3 K8 m' y  f' @
  21.               B1=2.*PI+B0 ;; {1 X9 O+ N/ Z
  22. , W4 F" {+ N$ `+ {2 d8 A
  23.              }/ a+ ], Y  e! }+ @( M5 f  U
  24. & `! Z5 ~9 C$ R* z( S; c$ j, D& z# F
  25.           }0 Q1 e: H- A; E9 Q

  26. 1 E4 d9 B+ x" }+ D  C- z
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;: R1 C8 y/ m: R+ K: |  f% r1 q

  28. & |1 i* b2 G2 G- g1 s6 f
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));* J  }  X) m0 f

  30. # \) G9 w% b- F6 J  h$ |# G
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;. f. X& g! H: y" L
  32. " q' e/ X$ I$ o5 ]9 a% e
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

7 n2 {" z4 y# |% W通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。2 V8 i) v$ L# Z/ W

% @  L& |3 ~* r9 F 640.png
; T3 b3 t" z& l' V5 Q8 ?2 O5 T: I  m+ F测试结果:1 W3 |: E# ~0 E1 E
6420.png
  f2 J7 P/ H/ x. G; I( h( z
9 T; j6 R$ C( |反向测试结果 6410.png
* e/ V" C. [0 d5 ^5 e

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

211

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-3-24 00:58 , Processed in 0.238283 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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