找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5849|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ; a! m) m, Q- y* O" G1 U
  2. int  EQ_is_ge (double s, double t);
    : F  Q! f) P) a# M& ~
  3. int  EQ_is_gt (double s, double t);
    . S% i/ R7 l- u& L" o& Q; \
  4. int  EQ_is_le (double s, double t);
    ' ?+ E, `) A7 D6 l3 F
  5. int  EQ_is_lt (double s, double t);
    ! u0 @4 \( g0 M& P+ f+ h
  6. int  EQ_is_zero (double s);$ z- W7 T+ t2 t" D
  7. //=============================================================
    4 e( T+ y9 M1 B9 h! h' {, [6 p6 \- x
  8. double ARCTAN1 (double y, double x );; \1 S. P: D1 y& R
  9. //#=============================================================( N6 S: Y" X7 A6 K
  10. double ARCTAN2 (double y, double x );( V% u' @4 N( G9 u# Z
  11. //#=============================================================8 t+ I* h8 V8 U# e1 n0 w3 _
  12. double CheckConst ( double angle, double constvar  );( w& n: @1 `# ^+ g
  13. //#=============================================================4 C6 w0 H& M  b, E& m
  14. double Check360 ( double angle );
    : i6 J: ]' v! P1 k! ^) p
  15. //#=============================================================
    ; K5 p1 t* M/ ^, H- h' f1 f
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    % Y( E( R( u6 Z# W1 d
  17. //#=============================================================
复制代码
2 v( I; \; _2 C- P
以下为部分源代码,用于判断,计算角度等
: E+ I& b2 I# q  I' T2 h. n
  1. int  EQ_is_equal (double s, double t)5 P" i1 C- P! i. J" H4 B( Q
  2. + v- b4 ~8 J9 V4 T, h9 i
  3. {, n1 T  D$ _6 h# W
  4.   a2 p" k; z8 J& @7 K/ S& O
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    $ H. J* X$ w7 S4 h
  6. ! f! F- D) a. `
  7. }2 Z: L/ s. c' r& z4 }; ^% t" |1 N
  8. 0 Z1 j4 X. L  f1 W1 Y
  9. /***********************************************************************/$ B" H$ V% j- Q6 E3 U3 l
  10. 6 l, x- A5 r6 c3 q1 p, c$ ?, c+ T, _
  11. int  EQ_is_ge (double s, double t)% u) @& j" a1 m. [6 D
  12. / |* W; @' B3 z" a# j9 k3 u
  13. {
    ! |1 k) u0 T1 k7 `7 |

  14. ! N! D/ F; _/ z. o) `
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }  B8 O' Q- ?/ u8 p2 A) S% y) h/ n

  16. " G8 _4 C8 |  K) Q. ^
  17. }
    . c- y- w: }% l2 c* R7 [$ K: ~9 b

  18. : X' F% T% D% t# r" d
  19. /***********************************************************************/
    " K* o* P: T1 V' G7 c4 a

  20. 3 K& }: K1 e) W) ~2 y2 E- H
  21. int  EQ_is_gt (double s, double t)+ D! {  p0 H/ h2 M& |: }
  22. , J# ]) b) m0 {8 L
  23. {
    , W2 C: h7 W1 {, A' l) V

  24. , n( F, P& {) Z9 u3 X
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }: a) v% u7 S4 m: K) i# h

  26. - k: ~& N' C4 d& V% v; i6 S8 b  k
  27. }
    : p( }6 b. u. i$ _

  28. : p6 w, J# g5 c; G, @
  29. /***********************************************************************/
      k. {+ ~" w* j9 l; \& E$ R

  30. ! q3 \2 l# v/ [; Y
  31. int  EQ_is_le (double s, double t)
    2 _( [& m2 K% [" k! W
  32. 9 k  p6 J( |; a, t6 i/ n. e/ r
  33. {
    9 {+ n  ]  q- {/ {$ o' R' m8 z
  34. : i2 \( X- f: ^* G  q
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }  N7 ~1 l1 V. b  ^' @4 @5 j: M. s0 M
  36. 8 r' K' d1 N0 J' N
  37. }( p) ?8 ~; K+ |' ]; O  X

  38.   g. N: G0 I3 y. F. P- \/ _
  39. /***********************************************************************/
    * b8 l) f" L3 l4 Q  d8 q

  40. . g2 N$ F2 M1 ]4 _  a7 i
  41. int  EQ_is_lt (double s, double t)
    : ~- r0 z) h9 q
  42. , Q& i6 ~% O; q1 g: |6 F$ o
  43. {, a* E3 o% O+ e
  44. ; D1 n; H' k8 `5 k; e( Y8 T
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    , [/ Z. v8 j+ G* A1 I2 }8 H

  46. 6 m# u9 l) H+ N" o$ |& X0 H
  47. }8 F4 l$ Y2 u) _* V! e# Y! D4 J) B

  48. ! }( Y1 \& u# E5 r
  49. /***********************************************************************/
    ! {6 u  `; I7 w$ O, @) t
  50. 6 t5 D; G$ R% x) o9 P$ c" ]5 ^4 k
  51. int  EQ_is_zero (double s)2 E: r% H# V' {/ j2 q) G

  52.   L6 w+ N, o3 _7 W
  53. {
    2 T1 e3 w8 ^# ^+ {9 s
  54. . l0 `. `1 j" Y; b( `1 \
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }" Q) x2 A6 `8 k. b0 H+ p

  56. ' Y4 r3 y# x. a4 H: j: [5 p
  57. }: v) J) f. |6 @: A% n1 a, k6 l
  58. # I" u# w) E  c, T
  59. //=============================================================
    / T; ^* j2 R5 m9 ?/ H, T

  60. 9 Z# ^- f% m5 K
  61. double ARCTAN1 (double y, double x )
    # G8 T8 s' f# c! z( a9 b

  62. * k3 f# ]) C8 O; c2 D
  63. //#=============================================================, n5 e, w0 V, E, Z7 h3 ~

  64. # B7 U. E' h: d& ^7 s! M& ~; E5 W& \) ?
  65. {
      f& c/ Z5 b  m4 A" V
  66. $ ]# c! r8 ~, X, D+ H5 O" u1 P4 V
  67.    double ang;4 k7 @7 X% C/ D6 Q- Q

  68. 8 A- D$ n7 @" k  x
  69.    if (EQ_is_zero(y)) { y=0; }
    / h) ?* r# \' C" ^

  70. 5 K4 b- Y$ u  J- ]1 T8 S
  71.    if (EQ_is_zero(x)) { x=0; }
    2 i; n* d' a' W8 M. n

  72. $ y# s9 ~7 j2 |( z' d1 X
  73.    if (y == 0 && x == 0) { return(0); }% `& ^; O- Y# |

  74. $ h* V- a" B7 N$ k0 D9 B  j
  75.    ang=atan2(y,x);3 X. B) N/ J" w) M
  76. 6 i* G! Q1 P( q2 U, _7 h
  77.    if (ang < 0 ) {/ m* U, ~8 s1 h" J6 F; L* ~

  78. ! e& L  g9 ~: ?9 B  ?* z
  79.       return(ang + PI*2);# m  `6 p* m# L. F; s1 W) L
  80. ! l0 Z6 ?/ ^9 B, q! r: D
  81.    }
    8 ?- D6 L- }4 P$ m5 u
  82. 9 C* [" w5 q0 o& l" M9 z3 ]% w
  83.    return(ang);
    / J2 O- u0 Q8 }  L( ^: u0 K

  84. 9 L; I( G$ R; d. b1 r, E
  85. }( @" o  t6 _2 s2 i

  86. 4 f. B7 J" n! j. a6 h
  87. //#=============================================================
    * `: A- M8 m, P) v1 C

  88. 6 G3 G& [! L2 b: |7 X" Z1 O8 {
  89. double ARCTAN2 (double y, double x )
    ' a& M( V4 U, d9 D6 J0 [% h

  90. , {! p3 z. h0 U. q
  91. //#=============================================================
    - Z' b3 `3 r% r' y$ x$ \
  92. 9 ^3 u6 s, j! R( n- @
  93. {
    2 V+ q' b4 `$ T/ y: _" p- y+ \

  94. " p4 p" Q% l, D7 V: }7 C
  95.    double ang;9 {: q3 s+ P# E* B8 n# L

  96. # P6 \5 K7 E  K7 M; X- G7 G* H2 N" ?
  97.    if (EQ_is_zero(y)) {
    0 K& ^' ~, V( m* r+ U9 D

  98. 2 m1 A' G- l) C
  99.       if (x < 0.0) { return (PI); }3 k5 e5 ~0 f0 W% Q

  100. 0 ?4 I7 P( s, Q) ~
  101.       return (0.0);, [$ d; p4 E8 v6 F( i0 ^% E

  102. - y; L: I0 _: _% A# C' @# N& B6 U
  103.    }7 w9 j3 x6 \9 @0 S2 R3 d4 [
  104. 4 q( j$ h) H* c$ w, [6 c& h
  105.    if (EQ_is_zero(x)) {" W3 ^9 i% d) w* q6 t: E/ N) i' b
  106. 5 h( H6 O0 N2 f9 }7 f) X; F! m
  107.       if (y < 0.0) { return(PI*1.5); }
    1 @" F. r% O; r( B( f
  108. 8 v% z$ v* L6 q/ ]- I
  109.       return(PI*.5);
    ' j8 k; j7 f) k  A& l  r3 s0 N* g9 Y

  110. # |2 o4 C" l5 F' f2 @- e2 M9 _
  111.    }
    3 K" D7 x5 D, r" f% ]
  112. 3 ~& H; ~) u0 c- i
  113.    ang=atan(y/x);
      N; v$ e4 Y7 Z6 K

  114. ; h1 b% p8 A) U1 m  u; M7 q
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }" {/ m+ @7 D& n8 l8 F0 m

  116. 6 a' X& ^: [7 m! l; e# m- Y
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ) x6 H! A9 q. N0 m

  118. ( N1 I1 ^! v4 ^4 ]' E' `
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }# f3 y% Q; A  r. V  e  e, c
  120. + T4 }( r) h/ U* @) a
  121.    return(ang);
    % L7 a3 Z% E3 `! h6 z' i

  122. 9 j/ c3 x) q) J: a2 l3 O0 }
  123. }
    $ J6 x9 o+ o7 h& x8 F% ~

  124. 1 V- e0 P5 r4 ]( Q5 u
  125. //#=============================================================6 J6 L% n9 t9 B! Q" R4 Z
  126. ! M% {+ r, H/ d, e: r% A
  127. double CheckConst ( double angle, double constvar  )& W) A4 g2 X( e  S' u% m

  128. * e! Z- T6 l4 D  V8 T  {
  129. //#=============================================================
    . R  u5 D9 \+ Q9 t1 H2 N9 @
  130. % o8 }: }% u, |, C0 ?6 ^4 u
  131. {
    4 g" f9 M* n( C9 F
  132. ( K) g) c* v' ?. n
  133.    while (angle < -constvar) { angle+=constvar ; }
    $ d" T5 ^% i# U9 w

  134. 7 k# c2 e6 A5 V2 V! x, \+ i- D0 l
  135.    while (angle >= constvar) { angle-=constvar ; }2 p) ?% |- ~& Y' \0 v$ Q
  136. $ \& G0 T. d, ^& T) f
  137.    return (angle) ;# W# k' }5 I7 s% l; _( S- u
  138. 6 G6 t/ X+ Q, z
  139. }
    6 b4 g6 R; \  C  z

  140. 4 i+ m) s5 X; e! m( B
  141. //#=============================================================* B( N8 b7 d5 J) F
  142. 8 J" Y. B2 T) F6 f) ?
  143. double Check360 ( double angle )
    9 _* X% A. }' Z' m% q" p0 n# q# {, ^

  144. 4 K; b6 g( p% z
  145. //#=============================================================
    6 o4 s% y& J& `1 ]
  146. ' `0 Y" m4 U/ k0 l: C; I/ i
  147. {
    ( Q4 i9 s9 F8 s. v1 T
  148. : _+ {+ y3 b, B
  149.    while (angle < -360.) { angle+=360. ; }( ^2 c  [" c3 b' v* f6 W) R1 T

  150. - t5 c" ?$ O! x! q& s$ ~
  151.    while (angle >= 360.) { angle-=360. ; }
    / b' p, H3 w' T3 L1 Z# D1 l0 z

  152. 3 b8 d0 G0 b( ?) A5 l# u
  153.    return (angle) ;" m. j# ~" m7 J
  154. % y: F# q3 d6 L" f; D' R) L8 I* x
  155. }  E4 H8 G' X4 @& q9 S) p4 G& e

  156. ' j3 x4 g# c% \1 B" `+ c6 B
  157. //#=============================================================1 M" q4 {" ?. i' G1 u5 ^& z

  158. " y8 {# D7 e' }6 X/ v* u
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    / {% k: \" w$ P8 H4 M

  160. 0 c2 H& |' z5 z
  161. //#=============================================================
    0 x) J3 J! {# J
  162. ) K4 c. g: v, M( v6 F
  163. {
    / Z( Y3 }( `( V( w" g/ w

  164. 0 o+ e! z2 r, W( d
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    # y" Q9 f2 p- ?* a: Y0 l5 L
  166. / r$ T6 x% K( s( `* [
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    7 L. o; n1 q4 h" x: D# t

  168. ; M1 S; _9 @$ K
  169.    return (angle) ;: }; f/ A" c8 j: ~3 k7 G% @
  170. 5 v( G6 p! a. s- C9 L
  171. }
复制代码
6 D3 p1 G; _1 y8 k0 E
以下为摇篮5轴计算过程代码1 ~: j  T; f) s  o6 \4 k* T
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    0 i  K" r& ^  a

  2. ; K/ O7 s1 d  E8 E8 ^" R. H: P
  3.          j=0.; B1=0.; B0=0.;
    , m2 _; t- L) s( U; \

  4. ( Y+ f/ Q2 W- v7 h* V- t9 w
  5.           if (EQ_is_ge(i,0.)) {" @/ `& _8 G( d  X) S
  6. ! h: |4 X" ~8 y* ?4 S; O
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    . c% {9 d- r3 l5 V' N
  8. % @; R7 d5 i" y& t8 [" J
  9.           }, [7 T. o. [+ N7 b1 Z

  10. # e+ d8 O1 t/ `9 i+ m. ^9 [/ \1 ]
  11.           if (EQ_is_lt(i,0.)) {
    6 C$ i) Q  _" Z" x, Q6 {
  12. + E0 ^3 P( X! b4 c& h1 ~
  13.              if (EQ_is_lt(k,0.)) {
    , U8 m. F3 S9 V( X. T
  14. + ^: |( h$ b8 `3 [# m6 O9 B" u3 r2 `
  15.                 B0=atan(i/k); B1=B0+PI ;
    9 M# V3 e) ]) G1 [3 ~
  16. 1 y0 N# @0 a, \+ K
  17.              } else {4 b% j; b! T3 g* H* i: L
  18. 9 B7 E+ c; ^6 a3 c- L
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    " C- F# i' ]1 R% Y: B1 l3 d" O' `
  20. : I4 s  p) B+ a" t7 m
  21.               B1=2.*PI+B0 ;( d( r* o1 ?( X
  22.   F0 p* q! l# Q/ R: N0 |* I3 d  }" r
  23.              }
    : D& P: `) K# S' Z
  24. + @$ L! g% O, h6 c7 N+ m
  25.           }
    / w/ y- j1 X5 r! m; I4 a; g
  26. 6 h; j! `* T& L& J1 _
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    9 f# K2 Q% N9 v$ g( e
  28. $ \2 Q; q9 p; P. M) Q; r, N
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));/ g% C& P4 T0 v0 K
  30. 7 i, v5 O  a* j: i& S1 B
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    - `+ I' O9 T  M" d% t, n+ \
  32. 5 W0 G7 q+ w3 p# e
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
7 Z- Z. C# w9 ^  ?5 s3 {/ a! B
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
8 L$ K: |$ a; z4 D; G/ S! L3 H+ K( [/ h9 Z& N5 c
640.png
% S5 x1 H5 _0 c6 R6 h测试结果:& i/ T/ a% {0 D5 E2 D7 a5 R6 @& V- C
6420.png ( I6 F! V1 }5 D% Q, V5 g( y# ?, u4 q

" J, u/ \( a$ T8 E! x' f反向测试结果 6410.png
3 E) d' F/ J5 G. ?$ r

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 19:33 , Processed in 1.150720 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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