找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4198|回复: 1

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

[复制链接]

431

主题

5754

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    / ]5 v& @+ v- K) p5 y5 a
  2. int  EQ_is_ge (double s, double t);
    + u0 H( C# A$ s5 ]  o1 N+ U7 L0 E
  3. int  EQ_is_gt (double s, double t);, T* u, ^4 m+ c) {! v
  4. int  EQ_is_le (double s, double t);0 [/ l: f; b# T7 V- C0 L. k$ Q' G
  5. int  EQ_is_lt (double s, double t);
    7 T9 k& o5 M" K
  6. int  EQ_is_zero (double s);
    * P/ g% }" K6 H% P2 ?; ^
  7. //=============================================================: f( V, `/ `( Z0 Q: z5 `
  8. double ARCTAN1 (double y, double x );
    & [' |" G3 _0 J# {
  9. //#=============================================================: u1 I: V; c3 t2 a+ z8 q. {
  10. double ARCTAN2 (double y, double x );
    $ g0 v, D, ]5 m
  11. //#=============================================================
    ; `- b9 Q( ]- T# b* C
  12. double CheckConst ( double angle, double constvar  );
    3 F+ [! h* \2 U! \' m* N! p* r
  13. //#=============================================================
    , y5 A& W/ R8 R$ c8 m
  14. double Check360 ( double angle );
    ( o7 Z* W4 t  U% ^
  15. //#=============================================================
    " t4 s& @! @5 s2 Z6 G1 t9 x( Y
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );6 y8 ]; `' Z( [0 Y+ _! u9 f; U
  17. //#=============================================================
复制代码
5 k' }) D+ x% A+ ?" }
以下为部分源代码,用于判断,计算角度等
6 r! P& ^: @; v) I  b! ^" z
  1. int  EQ_is_equal (double s, double t)4 A  e) W$ b* u# ~& U3 Q5 {

  2. 1 W; O- H* g/ s6 P# B
  3. {
    / }5 a: d9 J$ i1 j$ ^

  4. ( w& j: H. Y. o& s5 I/ o
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }: E, q7 h# S' y5 H" M
  6. ' W% M* O) y1 w: m' O4 o, J2 W
  7. }
    8 v: c  ~+ s. R3 [7 L

  8. 2 @% s6 p: x: |/ Q% P
  9. /***********************************************************************/; y4 L# Y0 e& k( T1 _& O+ r& @
  10. 9 J9 F; l' w/ m9 G
  11. int  EQ_is_ge (double s, double t)
    " k* o& e$ Y* U( c1 q# c+ x7 r- u
  12. : L* J/ m4 q$ u! t* X
  13. {! m  z' d- a: }# I  V9 N' Q
  14. 4 q. j' L! g- U$ R8 e
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    ; [1 {# b+ e( f- C1 e7 p& k
  16.   G8 Y+ C- G+ x
  17. }
    / g$ R) B) |# b2 K6 y

  18. ( b2 |. q8 f; R4 M
  19. /***********************************************************************/3 u4 }0 A& Z; g8 j) L% d0 C
  20. ; q4 h: V5 I  B) `$ K! `9 b
  21. int  EQ_is_gt (double s, double t)
    0 Q# [- j" ]  H3 T

  22. & E( P- D1 v  e6 f7 O" E
  23. {0 K0 k% o# R" B+ g8 w
  24. 3 T7 p  v7 q* R; x7 {; g
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }1 x2 i5 w: t! d3 x( H' @
  26. ) e& |8 r/ q/ k; _9 }
  27. }
    ( H/ u7 F3 f) @& f' V- T1 z
  28. 6 _: h% I& j4 r  G) j
  29. /***********************************************************************// Z. ~$ }4 |+ D  g

  30. 4 a' j- W) B2 [! R$ B- T2 [
  31. int  EQ_is_le (double s, double t)* l  N" \1 _2 e7 h; S3 X( d- y
  32. 8 k: B; V1 Q* a. _4 T" i7 A
  33. {
    7 M2 |. b+ S# Q/ s. f

  34. 5 [! N+ `7 c+ g% y5 W% H
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }/ }) C5 G3 T( T* ~3 B

  36. 8 s5 p1 U1 e4 C0 W& T+ G& l* S/ r2 Y
  37. }! Z/ U1 }7 w* D! ^  Y
  38. ' E; P9 ?. f! \) |; z8 a- W
  39. /***********************************************************************// b( A. A5 {( o) D2 r
  40. / H  l$ u# ]5 f6 q
  41. int  EQ_is_lt (double s, double t)
    8 q, b/ w, L1 M; y) Z& d

  42. & y3 M& X7 K, k0 [
  43. {/ @. m% D$ N* u1 X
  44. % y. e; w/ C7 n
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }3 G$ @* Q% G% }. t) d
  46. + J; U4 ^3 e2 _& x; f
  47. }9 L- R+ ]; A. c# q; |+ U0 q8 N
  48. 5 @8 E* a3 U' v  ]* t
  49. /***********************************************************************/- H, d  o4 ]5 X; [( k" T
  50. 1 e6 R( L6 h/ v5 q1 B/ g. w
  51. int  EQ_is_zero (double s)
    ; g2 u9 Q( D6 E  D' Y% w2 V1 j

  52. 6 j; _: G; n3 B( R# M
  53. {
    / V* z: a; f* {2 Q4 o- L

  54. ; `/ B, g! R9 I. L/ @: Z
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }* f/ ?2 p( J3 `* j( d" ~
  56. 6 ~1 K( ?4 |& H5 a( E6 O
  57. }, H' E* x" R8 U7 u6 O

  58. 1 M! E% y7 s# d; A' u
  59. //=============================================================
    9 ~% H9 g5 a# j5 ~5 r

  60. 3 V; W; o" R4 R
  61. double ARCTAN1 (double y, double x )2 W  i7 c: l: q
  62. 3 U, _" O- A% C. C' G' i/ a
  63. //#=============================================================
    . a3 U  U3 u- S: k8 i1 F( o

  64. 0 F  B$ n5 B8 c' u5 w1 {* D
  65. {% i, L' g; ?$ w9 N( w

  66. + z3 V/ g5 w6 p& x* y  C
  67.    double ang;2 ?9 N8 @& w; b# |
  68. + _7 T7 Q9 p3 X: g) l$ i) c
  69.    if (EQ_is_zero(y)) { y=0; }1 A  z- P  |+ O
  70. 9 l/ e# A. L! c" L9 ^
  71.    if (EQ_is_zero(x)) { x=0; }& K( J! {" i+ h# `2 U8 i; |
  72. ( Z: Z4 e5 Z+ M7 C2 }/ k. z/ d
  73.    if (y == 0 && x == 0) { return(0); }
    1 M. x+ b8 a/ [7 p, X. R# Q

  74. / K& w3 i  j& t. a' a* ]' k6 |6 n# t
  75.    ang=atan2(y,x);- g+ c6 W- M' ]
  76. $ q2 T5 [# B! H4 w; A- l3 v% C
  77.    if (ang < 0 ) {' {5 a! a6 J3 g( ^

  78. + {# P0 h3 s/ H) h4 F1 k0 Q
  79.       return(ang + PI*2);
      m5 p$ i& f" U/ L2 x; ~3 n

  80. 9 q) g! X5 ^- D# C: e& D
  81.    }
    ( K5 [% V# }) }% o. u7 ]/ u# C1 L0 d

  82. 8 X' f5 b7 [3 p. a- v" X4 @
  83.    return(ang);
    4 |6 C. @' I7 ]0 s
  84. * |* K3 l% B, E  n4 j5 K
  85. }& e) j, t3 Q3 K7 j4 k

  86. 6 K/ E( N/ e! _
  87. //#=============================================================4 d2 f9 l" A$ r! E

  88. % ]6 \! {8 s( h5 ?2 y) Y4 C
  89. double ARCTAN2 (double y, double x )% ]) }: n3 r7 s4 B2 L1 N8 \
  90. ! K* W5 n" z/ D( [7 T  N9 y7 W7 j
  91. //#=============================================================
    5 t& ~- }1 u4 I0 d

  92. / l0 E- j; l" w' o' k) u: }
  93. {
      [6 a. E$ l. E# B

  94. ) |( Z$ r) p0 Y& |- _% \
  95.    double ang;
      {0 j" Q+ t7 C# q4 b6 Q7 s2 O$ a: v

  96. 0 N- Q& j: {  m& A+ t1 l
  97.    if (EQ_is_zero(y)) {
    7 X- L3 ]  W4 @. Z. R

  98. . j& ]5 Y, N5 C
  99.       if (x < 0.0) { return (PI); }
    2 J4 ^7 f8 ^7 w/ \0 s: a* l4 Z+ H

  100. 4 \" `1 H' ^5 p( l% E) {
  101.       return (0.0);
    " s0 v3 t( I7 V+ i0 C$ H

  102. & U& q+ {5 \1 F+ K
  103.    }3 @0 E/ p/ S% J6 a9 G- X5 q4 b8 G
  104. # `5 O1 a3 D; X: H" m: J! y% o9 u
  105.    if (EQ_is_zero(x)) {0 t' [& w2 a( }! J
  106. 4 I+ f; W" L6 m' `: V
  107.       if (y < 0.0) { return(PI*1.5); }- J# a) _# I! a; y* E

  108. ( x/ G; ~2 U8 Z/ E  P; O
  109.       return(PI*.5);& I7 ]- q3 d( l( l( N. I

  110.   ?- h* ^1 v8 Q# k8 R7 E
  111.    }1 Z  n6 F9 J: b/ x- K* {! z
  112. 1 l9 o2 \5 ]0 J; B0 c
  113.    ang=atan(y/x);
    5 P% j0 {2 ?3 Z* l  ~
  114. 7 L7 ^* w6 [: e  Y
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    - A6 M. x- x) a8 K* m* O

  116. 8 m! L+ ~1 Q* D' w, r
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }) O! C! T9 Y. f* g
  118. 4 V+ R, m+ ?3 S
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }8 O' V" D6 A+ X) B. h
  120. ; X2 T' @* L8 s4 |7 [
  121.    return(ang);& Y; x" Z# c, y9 ~1 W

  122. 8 J! O. G9 m% b# {+ W0 j
  123. }+ Q4 ?4 M' K5 o" V5 l+ f
  124. 4 k+ ~* H/ A: F5 T  X: i) Z$ x  s
  125. //#=============================================================
    " v! ]* |! q* Q: O: f8 @9 Q

  126. 9 O) w6 B6 x/ s
  127. double CheckConst ( double angle, double constvar  ), _! {5 V3 K! K2 {& I, x7 n0 T$ Z- G
  128. 7 U% G! T; P$ k& B% i2 o5 S9 T
  129. //#=============================================================+ N& N0 p, O- c
  130. 5 k5 J/ @8 _( b/ A) h, q
  131. {) d: \/ ]$ I" @6 ^+ K: s! [

  132. 8 f) f; `7 P2 ^8 [1 {" D/ \
  133.    while (angle < -constvar) { angle+=constvar ; }
    ( u2 L7 E( C$ E) Y. ]5 ^
  134. 0 [+ M5 ^+ v$ j0 z3 R
  135.    while (angle >= constvar) { angle-=constvar ; }' e4 `$ u# f) f8 R% Z% t

  136. ) E1 h' S8 a$ j6 L# K, F4 c# _
  137.    return (angle) ;: A+ |6 A0 I7 O, c+ j  U; }, E
  138. # [/ ?; ^; v+ b2 P. I2 s
  139. }
    # {  |8 l  p; j

  140. $ c0 [0 w/ s* A% r
  141. //#=============================================================
    ; J! A" C( `5 k$ A2 R
  142. 5 U1 G' ^3 P0 S
  143. double Check360 ( double angle )
    ' z% W  u2 K! t/ K9 v2 U, p( J: T
  144. 7 [$ b5 W0 d: O) M
  145. //#=============================================================7 S7 }# a8 _  y3 I; [& J
  146. ! `% _0 M* t2 p1 D  n' s
  147. {
      G- S& U: _: J. R
  148. 5 d+ F0 [  T. n8 C  ^" ]
  149.    while (angle < -360.) { angle+=360. ; }9 Y7 `5 R% V  S+ S

  150. ! U0 ^9 }" z" w* Q! _$ ~' }
  151.    while (angle >= 360.) { angle-=360. ; }) ]+ e. s8 J0 h' g' Y) G
  152. ' W6 O* Y2 i9 [/ C6 F2 l
  153.    return (angle) ;
      C; t. T6 P4 g% G7 U# c
  154. % s& i: g+ v& e9 n
  155. }
    0 M" w/ B$ l8 A1 A5 p% M

  156. $ w: Z! f- y% c! D
  157. //#=============================================================6 ?8 r( N& w* w: o3 `: j
  158. ! W- f/ k% z; ^
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )4 R& P, P3 s5 z+ S# a

  160. 0 b: B) Z' l, ^) k, E4 G
  161. //#=============================================================2 I8 M4 g$ O1 U$ h
  162. 5 r) [9 ]0 t6 ]
  163. {
    $ t7 b. Y4 q- V5 w4 ~

  164. " U4 G, O, U* o) k$ G
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
      e4 D  |, j: K# z& i: b

  166. 3 w- _. u5 d. H9 d5 V+ ]
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }9 W- w" R. C+ X( I
  168. $ h6 O* V3 g" `1 a: l
  169.    return (angle) ;
    % y7 g5 a5 y* Y# t

  170. ) ^4 J+ T1 W* X8 D6 G- ~9 L
  171. }
复制代码

. p3 V4 v  i. k: r以下为摇篮5轴计算过程代码" g( h. U" p, s  g& y1 }
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    " g8 X1 ^' F7 {- ^5 z, ]( I

  2. # U3 {& w  G& W8 e) l  I
  3.          j=0.; B1=0.; B0=0.;* F! I6 t+ @2 G* R/ h& M

  4. 8 @9 w+ v/ X7 y- T5 v! @" L
  5.           if (EQ_is_ge(i,0.)) {
    - |/ n( `" G9 X0 w5 H( Z
  6.   j; o& {) v1 g! ?6 |" y. O0 E: z  q
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }, a( [& ^+ J7 Z4 t

  8. 5 W( ~) U8 l( w7 Y1 |8 I  e8 ~: O
  9.           }
    6 ^- S$ m; b" |$ k& ^4 I
  10. * ?: e9 y  s0 [- `
  11.           if (EQ_is_lt(i,0.)) {0 x$ C$ z" G6 k; c

  12. & d) T7 [. h( }7 a& q: m
  13.              if (EQ_is_lt(k,0.)) {& \+ W5 R! V; X; d# b" B* C5 [
  14. , g- M$ K& Q. W& R+ ~, V$ b
  15.                 B0=atan(i/k); B1=B0+PI ;
    : f- ?9 _! J+ G+ f9 [) A/ B& [
  16. 6 c4 d  k% n& X/ w) X7 p
  17.              } else {( m- x$ O. Y( P

  18. " I& t+ c8 M7 a& u
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    0 ^5 Z2 j, c/ C6 u8 @

  20. 0 z# R2 U/ l; \5 X
  21.               B1=2.*PI+B0 ;7 A! Q+ k% D3 c$ O7 b

  22. 7 C3 R% d0 `# _& A* m9 u. |1 p
  23.              }
    3 p# e% I, C$ a6 P1 a! r) K

  24. $ q, _# k$ t, u$ j' d$ d6 i
  25.           }. G6 E0 y5 o0 l. U: r
  26. , Y7 c, v2 L- w2 h
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;. h( t* U: u( i

  28. ; B& Y, M0 F/ N4 z0 a
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));  m+ `- m# k2 f) Q& U7 B, f
  30. . v2 u3 t# F' ?# w- }$ E( ?
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;# z7 d& @! l3 ]& b) a3 }7 Y! @
  32. 5 c) V: @  M7 ?; X- p% [
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
( V2 ]' P7 _1 P  B' {' U
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
8 L/ d! l, |% s( S( G4 S- N
8 l! k0 u, i1 z: g 640.png
7 p5 R$ n2 v& z& w4 W8 p; z测试结果:
/ L1 B8 H2 S* q6 J1 g 6420.png 5 X; D! B$ n1 a# k( {

) ?* T2 }4 l/ ~7 M反向测试结果 6410.png " n" I* v9 ~' V* C. m/ s

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-26 09:14 , Processed in 0.203157 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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