找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4850|回复: 1

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

[复制链接]

431

主题

5754

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    " y$ Q9 O  ?8 k6 o+ V! `
  2. int  EQ_is_ge (double s, double t);
    ' {1 a9 ]# K* g6 |5 U
  3. int  EQ_is_gt (double s, double t);4 @- ~$ e& `$ u5 \! N1 D
  4. int  EQ_is_le (double s, double t);
    : r' R4 K. a& \3 }$ Z1 J( Q# b
  5. int  EQ_is_lt (double s, double t);! k" _& C2 q) p
  6. int  EQ_is_zero (double s);3 o; P+ `, |; V$ k0 u4 `* }0 H# _' N
  7. //=============================================================' g& V5 |! z- W' Z1 m
  8. double ARCTAN1 (double y, double x );
    : |) Q7 D. z$ A) B" n
  9. //#=============================================================
    2 t7 E2 i4 \- h% h' E% v+ g
  10. double ARCTAN2 (double y, double x );
    5 T. ]. }+ d4 Z2 B+ x! N( E, F/ \, h
  11. //#=============================================================
    : o2 i  p/ k2 F4 @. Z; x  }
  12. double CheckConst ( double angle, double constvar  );
    ; @6 [: @1 {9 ?' j$ w+ a
  13. //#=============================================================
    9 @% \8 Z; V+ _1 F, s6 J* Q( o
  14. double Check360 ( double angle );5 s% z) y: B1 b
  15. //#=============================================================
    " V/ b1 |: F3 S3 J# o% h8 ^5 A( g1 g
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );- u" H4 N3 S4 t
  17. //#=============================================================
复制代码
9 p, r; s9 w, s: K3 K! e
以下为部分源代码,用于判断,计算角度等
% E) X, `( n+ O, j- p2 M
  1. int  EQ_is_equal (double s, double t)* t& {2 l, N2 q4 m
  2. - f- Z% H2 t8 V1 n
  3. {1 s% V0 b" A* n( _- ~
  4. + ^# G% v/ ?: p* M" n8 X
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }1 K) _3 Q! ~2 `: U7 S

  6. " C3 U  F' H& E% ~
  7. }
    : f  ?% K# h9 U% Z! k

  8. & }6 [9 G; Q# ~2 D8 g# R# N4 m0 F, F1 I
  9. /***********************************************************************/; U' M7 t# a0 M+ e0 q; m

  10. 8 T. f1 e7 T* ]8 K
  11. int  EQ_is_ge (double s, double t)
    8 f1 ~& M( c% [# T
  12. ; O6 y/ T! q/ G6 T
  13. {
    % p: v5 O8 A- ^& Q0 L6 h& i0 I

  14. % c7 q& `+ V9 G" m
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }" ^) M3 B0 s% i3 D8 X0 N
  16. / R2 f: m" Q* p0 j
  17. }3 x& V& Z2 G2 ~) Z1 L

  18. ( ~% i, W; ]$ v" X/ j2 O) K
  19. /***********************************************************************/
    - K" g5 y' s6 I/ d8 h6 ?
  20. : V  S6 k- F0 s& U! ~  q
  21. int  EQ_is_gt (double s, double t)
    ) C5 Y6 \( i4 ]; y/ K; k1 E9 Y
  22. % j7 P2 y% F: `
  23. {
    4 C3 i' K0 m  x
  24. + V9 |4 ~0 N' O7 E8 J& I* M
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; V# m- T1 h. G/ j6 I. S$ r- s
  26. * t3 P! j% u) x8 Y! |
  27. }
    . D1 n- j) P) W4 v9 u1 C
  28. 3 d. m' H5 {8 V6 R- r. C
  29. /***********************************************************************/
    ' _% k3 z' W- }  l, g9 P: O* q
  30. 0 @& L8 w, q' q1 n' n4 I
  31. int  EQ_is_le (double s, double t)" K" j  q4 E2 S% b+ e/ K
  32. ! \* b  v9 E. {. [
  33. {
    ! S- ~( Z  L, w

  34. - |/ }8 O; Y+ {9 d8 ^
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    4 g; o9 D- I9 T& C# R/ G

  36. # ]# X; D3 {- c- ~
  37. }2 X$ x% q) t7 ?
  38.   R9 S6 ^' S( @. T6 R  w1 B; P% h
  39. /***********************************************************************/
    5 b- g3 m# b  y! T, r

  40. 0 N5 l+ ~+ s. K5 X- Z$ |
  41. int  EQ_is_lt (double s, double t)& o* S! d# V$ t/ |

  42.   E) ?8 B4 L) A: f0 F
  43. {
      Z1 H. \. q( W' q" I: e2 o) o7 n  H
  44. # E) p9 G4 V5 B8 K* j
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 S+ _% I: s6 P5 \9 T
  46. . {& Y! e2 M, B/ f' b0 `8 K
  47. }
    6 _4 K2 N  b2 u, r# m* d
  48. 5 U$ ]6 ~0 p# N
  49. /***********************************************************************/
    7 {$ S" t, r) D: {  h2 T) ~
  50. $ S8 H* i# D7 I5 v2 [
  51. int  EQ_is_zero (double s)
    , w6 j) z; p2 ^

  52. 7 V( S8 Z! T5 u1 i( o
  53. {" V& Q, c5 e4 l

  54. , v( _- h- V+ a7 Y
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
      D9 D' N% t8 L' D

  56. + q" ?- i" q3 r3 E) L6 Y
  57. }3 i2 J! Q" B# h! V
  58. / q; n6 `" J# ]4 e
  59. //=============================================================* h1 B6 r7 l9 z" h( b5 _( t. ?

  60. # g, I" P2 F: M* Y6 C- D
  61. double ARCTAN1 (double y, double x )
    ' Z! T5 A) a* E: M' @6 `: G- I
  62.   O0 F1 K" D+ r( L$ o, o+ A$ d2 d
  63. //#=============================================================7 g% a! G' K5 I- L" U
  64. ! e* }# S5 Y0 i, Y# W
  65. {6 Q8 `" n* y5 E/ S1 W" v7 k

  66. / \! P2 L  {' C9 Z  z, E' q
  67.    double ang;5 P# X4 X; m' B

  68. 8 u! D& N% I$ |3 s8 _
  69.    if (EQ_is_zero(y)) { y=0; }/ M1 x# T- C" ]( m: M7 E
  70. 7 q0 s. r" P% X
  71.    if (EQ_is_zero(x)) { x=0; }0 b* n+ w9 C# R) f

  72. , G5 v& {" Y% x: w8 }
  73.    if (y == 0 && x == 0) { return(0); }
    ( c3 X4 h8 ^& W# E& i
  74. 6 v" \. l8 X4 r% I$ v, m+ y
  75.    ang=atan2(y,x);9 N% T& u' r, q
  76. 3 u4 M7 V  J( [8 y7 k
  77.    if (ang < 0 ) {
    8 V( n% l% Z2 h4 p- G

  78. ! U2 ]/ m& p) o! I6 ]
  79.       return(ang + PI*2);% T& b" }' s$ [: h4 K

  80. - d0 q  X9 j# X# c: }) q) c
  81.    }( r" h+ P3 c9 q; x! G4 k

  82. , ^' [7 E8 C& B$ u  b$ u4 |& }$ d! A
  83.    return(ang);
    / h1 D" n- X: y" o8 c. k9 z/ Q* Z

  84. : M  h7 n2 F- H
  85. }
    ( {# _% W/ d  O1 W. O

  86. , w0 j4 t7 ~& \% h' n
  87. //#=============================================================6 S/ K! X5 ^! ]% R
  88. 4 \) |( ~/ i6 E
  89. double ARCTAN2 (double y, double x )
    ! ]2 |$ w  f' S# o' ~" u0 T. c

  90. . X" N; C5 c2 x! J4 _) M
  91. //#=============================================================
    9 W: M7 ]% r' B
  92. ; r. K5 b( C2 V/ s+ g7 p
  93. {$ ]- J) q; ^3 T* D: |

  94. 5 X$ X, d4 _0 [; m3 E
  95.    double ang;
    % i$ L: j- Y: k3 |

  96. ; @1 F; F- I/ u6 H! g$ z
  97.    if (EQ_is_zero(y)) {0 G1 A% T# h# R3 z2 q

  98. 5 e% Q( a* h, ]6 b5 W
  99.       if (x < 0.0) { return (PI); }
    9 B, a8 Z9 t0 b5 K6 O- u- u
  100. 3 w2 n0 @0 g& {
  101.       return (0.0);
    $ I2 I! G' [$ R* c. ^, q6 e( h
  102.   K) Y8 c$ K- o4 ~: A. O
  103.    }6 g- f4 p8 n/ H( W3 l; D$ X
  104. # C& j) x: q  v& M: q% }& _# w- `9 W+ b
  105.    if (EQ_is_zero(x)) {4 h4 y5 J6 X) V9 e

  106. 4 Z0 Y! e) A6 B; U' X; }
  107.       if (y < 0.0) { return(PI*1.5); }8 h- m; q4 k9 A' r% e" U

  108. , Y, }1 z% p3 K+ q. O" W9 T
  109.       return(PI*.5);) Z, q( v! |# v. L1 w1 L' M

  110. & Y$ C7 U3 y9 q2 H6 [& e
  111.    }
    - Y2 {9 ?0 R+ b( A: J: h7 c
  112. ) g$ c1 o7 ?8 ?: G4 }; y3 R6 {) h
  113.    ang=atan(y/x);
    ' B- w. y" i* ], O+ ]" _" `
  114. % t- ?! e1 w) Q1 U( g+ L) f
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }2 z$ h5 d) U$ l# D8 p
  116. 1 f8 M% z# t, y4 i
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    . ]  q. p1 K0 ?; }1 W/ x) k4 P6 p! A
  118. 5 N* P0 |6 o0 a9 ^5 N
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    % `: p+ h# D9 n% M. R: S
  120. 9 J0 z- c# n! n9 D+ O
  121.    return(ang);
    3 l2 v; i2 ]8 I- D& c0 W

  122. & i- U3 s1 K6 B0 t& u3 b
  123. }
    . ?: Y9 K6 h* i6 C3 B

  124. $ V% q- ^2 m4 u2 e& v% Z
  125. //#=============================================================
    & L' T; s  v6 o9 x7 V  t) `9 p
  126. 4 }& A# X2 v) y4 ?( _
  127. double CheckConst ( double angle, double constvar  )9 X5 M% k: l+ \! V# ]6 l6 ^

  128. 2 L( T- O9 X) t+ J6 a* U; r$ T2 R: n
  129. //#=============================================================) B9 W1 H# ], o5 c! X% \# o( n' v& }! g
  130. 1 Q3 a$ S; d# j8 [8 L( O
  131. {# k, G: o) \% B" o
  132. ' g: A9 m1 P( X2 Q
  133.    while (angle < -constvar) { angle+=constvar ; }1 l! W  c/ \  s4 p# F
  134. , k2 J' D' A/ V* M( F9 F
  135.    while (angle >= constvar) { angle-=constvar ; }4 g) t3 p3 N5 J3 \
  136. : Q# G$ [/ x" h9 h
  137.    return (angle) ;
      |6 ~+ S* g- G: Z- a+ `% ]

  138. # g. ]# I$ m- s9 J6 |* X, V# {
  139. }2 ~7 P& Q' v/ Z( `* Y! x
  140. * t2 G% \, B& L' U2 D  Z2 f  Q* O
  141. //#=============================================================! T/ }7 R. p) z
  142. . V+ u( G$ f5 ?; v) ]0 R6 {1 \" ~' V0 S
  143. double Check360 ( double angle )
    $ x  N. P. [! f" n) a

  144. - P# d. y9 M2 Z) p$ X' g
  145. //#=============================================================; G0 l' a9 A; d2 Q' U8 E7 U$ c9 `6 O

  146. 3 D2 ~6 B; `$ h3 \- Q5 k1 N
  147. {2 p! C, h' M/ Q% f  t
  148.   _5 k$ s4 b; r7 @
  149.    while (angle < -360.) { angle+=360. ; }
    ( s' y) N1 G7 g8 l! p( x+ e' Y
  150. , _7 i0 ^2 X' n5 m& A# V9 P. z2 B
  151.    while (angle >= 360.) { angle-=360. ; }
    " N( C7 @/ L. ]$ E; e
  152. 7 M& |! Q/ T" n0 t3 O* h
  153.    return (angle) ;' y+ T4 {6 r4 J* M6 Z

  154. 3 E" p3 O* v+ U
  155. }4 E# E' S9 Y0 q7 w

  156. 7 F( t8 C; K- m$ u
  157. //#=============================================================
    0 U- U; r8 w# M; G! ]) I; ]

  158. 2 ]4 b0 \9 S' E0 E
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )3 P) V$ V6 r1 q2 V/ j1 {
  160. 2 n6 Y: q% c( z. ^3 M. i8 `
  161. //#=============================================================
    . [+ p! h; s# H) ?4 U4 p7 o

  162. ; o8 I- h. }) i) A0 X
  163. {
    0 S  d- |  W- y2 J5 Q' ]1 ^. Y$ K0 C) j

  164. ; U2 S' ^( H  a% Z, {3 B2 S' N
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    4 b+ G4 E( P: j7 @* A  |, X
  166. 6 `0 |1 Y9 w- X! h% `4 Q
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }' I$ S' q8 ~& d+ _# X
  168. * d3 `" Z( Q- N) K' c3 X( D2 k
  169.    return (angle) ;
    " M/ M& N7 E! X
  170. 9 Y3 }& N& H# |! J' [8 i9 }' n
  171. }
复制代码

, m' V! L1 H; t. d- G3 ^3 T0 e以下为摇篮5轴计算过程代码! }# g3 g: A: t' ~7 n8 r
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    1 b8 c9 x$ E% X2 D: H7 t
  2. ' D' X1 W2 A* u5 I8 h  _4 Y! o! z
  3.          j=0.; B1=0.; B0=0.;! @! _4 \4 K" ^5 X2 X; F

  4. * m: `  J5 N7 ?1 I: Y9 A/ B: q
  5.           if (EQ_is_ge(i,0.)) {
    $ C" K' h) w' ~. ~- w- J2 W
  6. * }, X  z7 a' @) B6 D; a4 H' E. }
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }* p8 q. F/ x, D# W$ }

  8. - ^1 A( ], g6 v
  9.           }
    / V; }$ V; x% b: m- y6 C% x

  10. 8 y( t5 Z7 M: p
  11.           if (EQ_is_lt(i,0.)) {
    ( c; b6 ?( I& ]! O1 [1 q
  12. # l. J- F1 q4 q$ t
  13.              if (EQ_is_lt(k,0.)) {
    . W; }( N! L* k) Z

  14. 6 G: U. Y5 g+ L# C
  15.                 B0=atan(i/k); B1=B0+PI ;
    ! y$ X  `& g$ J3 E2 ?; {) C

  16. ) g; R1 j% m& S- i3 _) U$ l0 C) m
  17.              } else {  A. M5 r/ }; E' W$ j2 l
  18. 5 r/ ?7 N' l4 x5 p, N" D
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }4 v5 E2 o" {9 F, Y7 Q1 H( v

  20. 7 N9 C' U8 w" i6 d8 J8 A4 i
  21.               B1=2.*PI+B0 ;# U3 p) d2 S) s, R  d" {

  22. 3 ^, [0 E; T3 K) G9 a, i: |
  23.              }
    ' I! L- N$ v$ t, r8 t( i% l9 L

  24. ) `, P3 u2 Z" t: b9 K' s; i, E
  25.           }
      E# o  _  X' ^( ]" a6 b

  26. : A* _3 O4 N) [3 y; C5 V
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    7 W  u0 ?$ A* t- V2 \8 W4 D0 F1 q
  28. " I; Y) S  \: S* Y- ?. f7 j6 z
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ; b2 O4 B  d* ?) Y0 L. F6 `5 \. H

  30. ! O1 v" @, Q9 i3 K, ?9 Y
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ! a. J% _3 }1 ~# r& V& [
  32. 1 v/ m+ W' H! Z3 J  `
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

6 g1 [5 {/ D3 q( h) E- c通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
. D* Z% v" t6 ?# C
& e7 c' y1 g7 Y8 f/ e# _6 R" p 640.png
9 y" k% b4 q$ s6 v测试结果:# W3 d$ P0 H2 Y7 g% K3 {
6420.png
# F- R2 N1 ~5 z! u* W% m/ H- _' U5 g% v- U
反向测试结果 6410.png " s+ G: h% {4 ^" |4 t2 w

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-9-18 03:40 , Processed in 0.495538 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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