找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7403|回复: 3

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

[复制链接]

433

主题

5757

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);. M8 [2 x7 V$ u0 K& R1 b
  2. int  EQ_is_ge (double s, double t);# ^* w  ^6 l$ |# I: A7 ]! |$ r4 k
  3. int  EQ_is_gt (double s, double t);7 Q+ I; R# _. A/ v6 O
  4. int  EQ_is_le (double s, double t);
    / ~; O3 F9 P$ s: b, ^9 U
  5. int  EQ_is_lt (double s, double t);
    8 U5 y! E( s! G, a$ G
  6. int  EQ_is_zero (double s);- ~. Y, Q% i  z
  7. //=============================================================
    4 f9 F1 A9 v8 A0 }* l6 ]3 G
  8. double ARCTAN1 (double y, double x );0 T' Z% ^% p: ^  L
  9. //#=============================================================0 v" P2 }9 L$ l4 ?& W; @
  10. double ARCTAN2 (double y, double x );
    + w1 B- d/ x4 z4 D6 m
  11. //#=============================================================
    9 A3 L7 a3 E+ R* t! c$ [+ C
  12. double CheckConst ( double angle, double constvar  );
    2 M$ o* A  q; e0 I- ~
  13. //#=============================================================" t9 l5 d2 o' G. C5 {2 F- D8 R
  14. double Check360 ( double angle );
      w  C8 A1 A- c9 V3 v2 o
  15. //#=============================================================
    ' h* b% T. ~: D. ~6 _5 B
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );! _( E% K; I" c! z( j+ }+ D
  17. //#=============================================================
复制代码

1 Y4 N2 ^1 @% q3 o7 e" c以下为部分源代码,用于判断,计算角度等' J+ j3 M8 b/ K! [5 ^
  1. int  EQ_is_equal (double s, double t), t3 @0 e9 [5 O. a6 e  p0 g6 F
  2. / o% C6 F" b' m& y+ h7 I9 t
  3. {
    0 ~3 i+ i* G6 K6 V: t- W/ C7 K
  4. " F& p' l) Y2 F5 ^& X
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }' z5 \* y( Q/ D* E
  6. 1 W6 k) D: @3 ?$ g: q
  7. }: {2 C8 U6 _" |/ m( }4 K
  8. 2 y! X2 G! A1 S9 f0 h; m
  9. /***********************************************************************/4 L! q% x2 _$ G1 S

  10. + |4 l1 @" c7 k+ Z5 n4 s9 ~% M
  11. int  EQ_is_ge (double s, double t)
    * x2 r( Z* `  I

  12. 1 k! T3 N# V! m2 t$ `2 j9 t0 W9 G
  13. {8 m2 t9 `7 s' D7 m& O
  14. ! k2 J  E' V- z1 j. F; K/ R. }# E
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }! ]" a3 [- K* @/ P2 S0 x9 F8 a
  16. & ]; W. r% p- x' y  D
  17. }' L! @4 E/ ^6 d6 M0 E

  18. * ~1 ^3 m9 k7 ~
  19. /***********************************************************************/8 y! K+ C2 `0 v$ A
  20. $ d# g9 ^8 Q6 w4 W- X$ o2 M
  21. int  EQ_is_gt (double s, double t)" G. q- g$ g! a9 N: a
  22. " O1 J+ r  q& h" T; N; d
  23. {+ Q" r8 {9 Y5 f. v$ q: u, \
  24. 5 [! ~3 A. s* K" H$ b. k9 W4 q8 |
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ' ~" s* ^- S% w$ X, i! M
  26. . k# h7 x# W# I, B/ a! c8 [" H
  27. }
    " |  e. o; g$ r+ f/ I
  28. : A2 k! A' w8 M* x* b& d
  29. /***********************************************************************/
    7 D6 J3 z+ Y. y5 O8 R! ~

  30. 9 C" ~1 Q  g0 ^5 u( d+ u: L; }$ ]
  31. int  EQ_is_le (double s, double t)2 B) ^+ D4 s" M9 \) ?- h
  32. 3 z6 a4 v) L2 F+ n$ j  B( w
  33. {
    & W; _0 e4 x" L, b2 s7 i6 z5 c

  34. ; M7 b) Z1 o. z) p& T
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    $ X4 C' m. u3 r5 p/ u
  36. ) c3 D& {: @& E. l
  37. }
    ( |2 R" t: m& }
  38. + M( F  h! S# M/ j8 V+ I
  39. /***********************************************************************/
      v0 P0 k. l! E: `9 K

  40. 1 C) m; _# R* T( e9 c7 A1 T
  41. int  EQ_is_lt (double s, double t)7 [& P" P- i  L7 y6 t$ d

  42. 4 n, f( E! n( o& g% N* ?- m! ?1 B
  43. {
    ; B2 `/ G! M- ^* V. a/ y$ p
  44. - F) \6 G* o' C0 l$ Q
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }. c, a& j$ s+ f! G- Z: c
  46. 9 C1 C- T& a) v4 O( x  R1 L" F
  47. }6 j7 I+ Q. f/ [) B

  48. ) P- B: W1 u) T0 j* x7 ]+ j
  49. /***********************************************************************/
    1 T& T1 T. @0 b3 f7 [

  50. * g- a  h; `* [5 W' o7 l
  51. int  EQ_is_zero (double s)7 f3 y; P; y5 B8 @
  52. 2 K9 p" A1 d+ A' d6 y
  53. {
    ( H1 k1 a# P% b8 \" l

  54. ( F! D; k7 d( G, W0 \( s; ?* O: K
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }$ j! ~% w0 `" A' G' }* y) K
  56. ) ~) B, [0 c9 x/ p
  57. }6 ?" P3 L- @* G* k9 w& f

  58. ; d7 H# b' I8 ~; p# f) [
  59. //=============================================================5 N, K2 O# }( t, j5 q- S$ x

  60. ; s" h; ^0 g; c: Q
  61. double ARCTAN1 (double y, double x )% y4 X5 R! I6 j, z

  62. + D) f& G1 q: H& G2 B
  63. //#=============================================================! X- R% z6 |4 K, Y. g
  64. 6 ]7 m  ]/ g. ]. {2 b& j/ h. x
  65. {/ z& e, W/ O: _4 F6 V) k3 v
  66. , P; L4 H: f* N# g( v- ~2 Q5 X
  67.    double ang;. h  a, X, n5 v5 _" b
  68. . x5 S* T3 p) q  E
  69.    if (EQ_is_zero(y)) { y=0; }/ {3 R$ f; o2 f- N

  70. " r' L9 V" P1 N% e! M/ r. d* U+ |
  71.    if (EQ_is_zero(x)) { x=0; }
    & }* ^& I6 \) K8 a  U
  72. 9 I1 k  k5 Y) P+ v
  73.    if (y == 0 && x == 0) { return(0); }
    % x' U+ _& X/ r& j1 e- j

  74. ; i* \9 a" g2 s+ @2 x, e
  75.    ang=atan2(y,x);1 F, o* _3 a) @8 c  O
  76. * w- y3 x7 O3 b( k
  77.    if (ang < 0 ) {+ P  v% V0 P1 o+ |9 H

  78. 5 e: B5 a/ [' [6 N+ i; D3 F* X
  79.       return(ang + PI*2);" }$ Y+ f' v/ p2 j/ A. G( k
  80. % i0 P# B( V. \- F6 j/ g$ z
  81.    }
    1 T1 _* o# ?- w7 n+ @

  82. 6 l3 Q, p0 V2 E; N, ]9 i6 c
  83.    return(ang);
    7 ^% r# ]/ O9 _* d2 H6 s2 q

  84. ( O/ q4 |2 I/ L+ [/ o1 w# M3 E, ?; W
  85. }7 y% \7 W: G( @) ?

  86. " [, F1 W0 n; d9 j
  87. //#=============================================================0 y7 j! f  Q9 f" B' P( m1 T$ T
  88. 8 o4 J  x# o  b' u' v
  89. double ARCTAN2 (double y, double x )
    " Y) s1 \" G# [# ^  O' Y

  90. 4 L1 A9 k  H% M6 j. ?
  91. //#=============================================================2 {3 G2 h' b3 Z1 x+ S

  92. , Q. v9 b5 H. d9 G
  93. {
    . z  y; {# @0 Y( [2 X
  94. , Q4 Q! G, z( }- I. W
  95.    double ang;) x. t& }, e: q, c  I( I) K
  96. & ~0 N* o# Q( s! d1 u1 J
  97.    if (EQ_is_zero(y)) {
    % E+ A3 @; M2 l  q/ ?! Z

  98. ; z" D$ N2 B7 `8 R  G' y: o6 {
  99.       if (x < 0.0) { return (PI); }+ g+ X" U8 e. _6 I" H
  100. 6 V" i) Y2 K) y- V5 F, R5 i. c6 T* C
  101.       return (0.0);. v* e5 h4 l1 j: n

  102. 5 ^$ D3 l. }) T
  103.    }$ R7 K- q. H2 I  P
  104. ) k% k# j1 [' N# D. A( d
  105.    if (EQ_is_zero(x)) {4 m) v: s* _; U7 S$ v5 I

  106. ) C5 r0 P: y9 D5 B, T8 v2 A
  107.       if (y < 0.0) { return(PI*1.5); }
    $ r+ a! C: b# q, g' M' C/ U
  108. 1 V, l( Y) l0 \6 D- A1 S& `- q
  109.       return(PI*.5);6 i. F5 @  y4 b

  110. 8 |# ?  v4 f' U  @8 K. E) m$ a0 [3 u
  111.    }& p  d  {" _0 j5 i$ F. _4 ]' W5 X  E; V
  112.   \7 ^  r; W5 K% i
  113.    ang=atan(y/x);
    + e  K$ i3 e: |3 T2 V" x0 y
  114. 4 g% ], ^0 L2 k" _
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }, d, a4 d( S& R% s6 k* E

  116. 8 P  k4 n6 i# s5 n' x
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
      C* f1 r- [3 V! R$ ?6 d0 I" [
  118. ( c/ u7 w/ n) |# [9 h
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }! m$ m- R  k8 k: g" U6 f
  120. * A$ V+ Y/ `# Y# m) ^$ F/ r
  121.    return(ang);
    8 f. ~7 `0 y0 n2 ?; x

  122. # W# v3 ^4 @7 I3 U  {
  123. }
    7 o. W/ d4 B+ Q$ }: m) t' G
  124. 4 k, ~/ S4 \9 S' T; n
  125. //#=============================================================. F, v' v( Q- T$ w

  126. , u' t1 G% m: ]/ t/ y' w8 R! _
  127. double CheckConst ( double angle, double constvar  )
    6 k: A# i. _- C7 V$ Q4 N& A
  128. 7 X6 O  N( M1 T1 i- s5 a! `
  129. //#=============================================================
    & K4 {8 ]8 a; w) j% d
  130. # j" y8 }1 f+ Y4 c* G# H
  131. {
    ; p( D6 Q& s' Z+ }

  132. 1 S5 d! h% ]3 A8 ?/ l9 ]: S8 a/ g
  133.    while (angle < -constvar) { angle+=constvar ; }1 N( g7 Z7 J8 c" _! N
  134. - S, J8 K* b8 m; H9 C+ E/ [2 w
  135.    while (angle >= constvar) { angle-=constvar ; }' {$ o  B; C; Z) ~
  136. " B+ B3 c4 I" D  w0 n
  137.    return (angle) ;
    ) [4 P+ s1 e2 i5 E& r# U
  138. ; r. `/ C1 m; A
  139. }3 E: V$ R. H$ Y- a. H

  140. 4 I% `' c8 i- h) M7 o% w
  141. //#=============================================================$ G' i, F' u/ R% ?- \6 E
  142. ! F# n, O9 O+ H, K$ x4 x3 ]+ e' K4 D% B
  143. double Check360 ( double angle )) q% B+ l2 v; `5 y( f$ S

  144. 0 r6 c5 B! }8 k
  145. //#=============================================================
    . Z, p# U! T0 d# B6 c( y/ e
  146. ) f& t5 X* N* W" u( m5 U
  147. {5 H  o7 k  W1 ^* u7 W# T' X

  148. 9 {0 b) ~/ D1 G* f8 |: ^& l
  149.    while (angle < -360.) { angle+=360. ; }) m' c8 O* S4 d- ]7 T: O, S
  150. - i* }/ ^$ l) Y
  151.    while (angle >= 360.) { angle-=360. ; }
    6 _; Z  W9 r& i5 u  d( P0 `

  152. , [+ y4 f6 e2 y4 ~  @
  153.    return (angle) ;
    ' ^8 p, X0 Y7 o1 ^

  154. 1 N# n& E: Q, c' E; d3 @; V7 a! A5 @
  155. }
    * g& X$ `% v# F- b0 d

  156. 1 R  k- t/ U  v$ f' C/ b# q# o0 q
  157. //#=============================================================& H- v  I6 y* m

  158. ; E" z  j# t0 I3 q  y
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ; Z; T/ Q% s$ _# M6 _8 d+ _
  160. 1 M6 {% Y; Y# I% M3 J0 R* Q
  161. //#=============================================================/ X* a* L' Y1 q4 L

  162. * D, C) ~; s- t0 z& B
  163. {& w& p2 M3 Q$ P. S" H( ~) b

  164. 3 h) N. U) [  M9 |& N% y: C6 c
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }* [6 H  M8 U+ T/ y& o8 r

  166. 4 d" E( t1 x0 r5 s! ]  V2 P
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }% y- o# _+ c* O4 W0 j

  168. ! w/ [3 L9 B8 F: a# n
  169.    return (angle) ;  t) b! C& `1 l2 }0 t7 n% Z
  170. % v; ^. U' a/ I% u; m, }4 _
  171. }
复制代码

* w+ Q3 y) H& I! v2 S以下为摇篮5轴计算过程代码
/ w1 L9 {' `' }
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    * Q+ G. W2 P# T( G
  2. 3 b' h8 U) I$ w. v
  3.          j=0.; B1=0.; B0=0.;
    % B  j+ B/ c  E' R2 d

  4. " J8 D! d5 O3 P) F  U
  5.           if (EQ_is_ge(i,0.)) {
    1 ~# K2 B, s* S; a3 @' ^6 M$ K

  6. ; G0 l6 l' J7 f# C
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    ! D' R+ {  q7 I& [
  8. ; k) j4 B& L& w7 `- h" E
  9.           }
    ; T# h" ~* g; q: [

  10. 2 c8 e: f9 D2 U' O' D2 _& p3 n
  11.           if (EQ_is_lt(i,0.)) {( v8 M  n2 s4 g9 S) W+ g0 Q: I" e+ d

  12. , {2 L1 b: [  ]7 {" @
  13.              if (EQ_is_lt(k,0.)) {
    # V0 V. n, ^6 }  o% q0 O0 U
  14. 4 f5 y* R- m& q* X! t. q2 y: B# X9 z
  15.                 B0=atan(i/k); B1=B0+PI ;
    7 ^/ M8 I/ ~: @

  16. " J" o! R1 @7 N, B+ {' _
  17.              } else {
    2 e8 q) `" c! }( ?5 q& {
  18. 7 l! E$ R" Z; s. b8 H
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ) l" e, b5 C: X

  20. # H2 v5 G2 H' g/ d
  21.               B1=2.*PI+B0 ;0 G* A1 _2 Z5 V" J# t  |

  22. 7 |: S3 s2 Y/ {, G: A, G
  23.              }; U. @$ p# p4 S/ B9 @

  24. 5 }3 z7 C2 X" `8 O0 k
  25.           }5 e$ Y" K5 j- v9 e1 m5 ]
  26. 4 H& n+ K6 M  V4 l( ^) H! p7 O
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;& f% p; l) i7 ^" n5 ?0 ?, v
  28. : Y3 _. F& J& u4 r. Q
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    . E; S* U6 r- ]3 A# D6 v
  30. 8 B4 B* G  k3 H7 [  y' D" C
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;; a4 D; A! \  [) T/ s2 K* o

  32.   _0 h/ m  [3 t
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

- B" I2 o! H+ _3 T0 j' U( c通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。7 I  Q8 X- g% ^) K8 ^4 e# n. K

1 i2 B; m7 e  \- Q( f/ i8 | 640.png
3 C6 k& m, R" X; p, O6 B测试结果:# y' u- L9 i; M, ]. O+ P+ N% g
6420.png
) K) D9 _: v% n. e) c# i$ @) S- g" T. [. S* z1 R& }! I
反向测试结果 6410.png
+ P& C5 G- O  k" ?. m8 \( w

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

231

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-4-27 04:46 , Processed in 0.900085 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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