找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4522|回复: 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);6 c! E9 o6 d* {
  2. int  EQ_is_ge (double s, double t);5 ]" u0 t2 s2 N3 C0 W
  3. int  EQ_is_gt (double s, double t);1 w6 b/ O6 `, j8 O0 k: t' n
  4. int  EQ_is_le (double s, double t);
    0 }+ l0 h$ N8 n& j
  5. int  EQ_is_lt (double s, double t);8 s* B7 C! w6 Q
  6. int  EQ_is_zero (double s);" Q$ N( b! E5 o: \9 g5 p% P5 Q
  7. //=============================================================* S+ E7 K$ M  W, W* X& A; v
  8. double ARCTAN1 (double y, double x );1 \6 Q1 R/ n5 [2 x5 \# S0 D
  9. //#=============================================================9 i( h! Z9 |" Y. u& o
  10. double ARCTAN2 (double y, double x );; v/ n& y5 h% D2 E& U) L) }. Z+ v
  11. //#=============================================================
    : t- D" Y! B0 Z! u6 S3 |/ a0 P1 F
  12. double CheckConst ( double angle, double constvar  );
    4 I$ ~8 Q& w0 D$ M
  13. //#=============================================================
    % ^) @- p2 x! I9 J5 t$ r. @
  14. double Check360 ( double angle );# T1 M3 O4 ^# w9 d1 ~
  15. //#=============================================================& |  T7 C1 T4 t/ I) H3 J: E& h7 E
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );; n' K  z; {% G" n. T; L
  17. //#=============================================================
复制代码
  N0 V9 [7 B' ~% p, h
以下为部分源代码,用于判断,计算角度等
- X. W0 w) b8 |2 C! S- g
  1. int  EQ_is_equal (double s, double t)
    , I, B# [) l9 k

  2. / r6 K$ \5 @+ Z/ Z) T( G
  3. {
    ) {3 F, [4 I& R+ Q: p# p; w
  4. 2 i) X8 B8 O( ~
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }' l* J. R$ p" B" X, @

  6. 4 o; a$ m7 w$ n8 @! E; d/ m8 A# K
  7. }
    * y! f/ L+ I& c/ r+ _5 ?

  8. ; F8 p' H2 v  G) ]+ k
  9. /***********************************************************************/% d1 {# {: |+ |# `
  10. ' T" {( N& Y) i: q; |  `' i
  11. int  EQ_is_ge (double s, double t)
    - M" a9 }; Y+ p3 N
  12. 2 a' [! ^9 a" D% {6 Z5 E4 M- r
  13. {1 n9 L. y9 s+ S5 M2 i

  14. 6 q, e+ W' u$ y5 p; X! y0 p: x
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }/ B& h0 e, h: f. @# U

  16. ; b+ z# X1 S- v2 ^5 J& I1 W
  17. }
    % q. w% w! u! A% q, n# C
  18. 7 c1 y, R3 y" V# S6 U  c$ E
  19. /***********************************************************************/
    ( R. b1 Q# B$ t/ _

  20. ; N; j* d" p3 D9 J: ?! Q3 b
  21. int  EQ_is_gt (double s, double t)
    1 b3 l$ d; W+ r# V* S
  22. 5 S; U8 |6 F' R: a  T1 X- r
  23. {
    2 U/ r) n4 M+ `* s5 c+ s' {& L
  24. 5 F3 ]; P0 p3 @+ U
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    7 ^* W: w- g/ c0 [8 `8 u/ @9 i
  26. , x3 X, t. H9 {  L8 F/ w) D+ l
  27. }( `, c; k1 k8 u

  28. ; L" w" @8 K, c+ O  @$ |2 T' W
  29. /***********************************************************************/; j7 I# p* c5 \* a& A. B

  30. 6 W/ F0 M- f; b% r& m# o
  31. int  EQ_is_le (double s, double t)
    1 p1 a; Z' p: P$ R4 _

  32. ) Q$ ^( ^6 k3 A7 R) A5 ^' T
  33. {
    6 S. c) w" U( {" V9 |6 E' a9 {
  34. 0 }$ g( B; c* D
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    5 |# u# P/ w: t1 u* j8 [

  36. - k. _5 i6 L0 g9 ^, l7 O, W
  37. }( O0 Y, u" W5 V
  38. $ e) d7 P) r( j
  39. /***********************************************************************/- C+ _9 p: g, T2 e
  40. ) |1 g6 q0 T+ l) }% Z6 ^2 \$ U
  41. int  EQ_is_lt (double s, double t)  Y' ?7 W; [- C+ z1 m  {5 b

  42. % F! K* T/ q' G2 x& B
  43. {: `& u- B6 v+ U3 S7 n5 J
  44. ; ]2 K+ f3 \3 k  R- N6 f( M  n
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }; c9 e; y( k) C# ^
  46. 6 {! S2 J! n: @) V
  47. }# m9 ~* B1 Z& ~' q( h+ A$ ?

  48. . K  V+ A3 [4 I6 w, w
  49. /***********************************************************************/1 d2 H7 d2 Z1 R3 J; a  I
  50. 6 c% H( S0 U; A6 O! S0 Y
  51. int  EQ_is_zero (double s)
      G( w, k, D! V/ K( M0 a
  52. 3 V' ?$ D$ O& R
  53. {
      y& h) f6 \7 H) o% Q3 n
  54. 0 I0 C$ u9 n* m1 L, ~- B
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }2 @0 U6 y4 ]* S5 N) w* G
  56. 3 i$ E9 j9 @# Z% N7 I: N* _7 z
  57. }
    5 W, W: T' `3 I% o' r- A# Q. w
  58. ( c  p4 T1 V& v1 t
  59. //=============================================================- E$ P# C! x0 Y8 J0 }0 o/ s
  60. 9 P( ^+ R$ f3 a
  61. double ARCTAN1 (double y, double x )
    7 A$ Y* k% Z) h" A; N' s

  62. - r- _. I1 L. j5 ~3 J' f3 k+ J
  63. //#=============================================================$ ^. S* _' |3 A9 B0 \3 e
  64. - L3 y7 ~) |/ O( c+ J5 `2 R- `
  65. {
    8 ]) o2 _1 `( Q! E5 c7 J

  66. . m. p6 _/ F9 d. S/ v& N
  67.    double ang;3 B2 J6 Y' B/ K

  68. 5 v8 D- o" [2 i! u6 O1 C* k8 e
  69.    if (EQ_is_zero(y)) { y=0; }- p9 e! G: @0 A- u/ [
  70. 8 [: C6 P0 Y8 m( v! K
  71.    if (EQ_is_zero(x)) { x=0; }
    8 _3 m. ^$ r/ Z# M' Y4 ~+ ?

  72. * v% x% y) C0 Y+ M1 n. h  |; \
  73.    if (y == 0 && x == 0) { return(0); }' F6 K3 h+ E' j! ^# ]

  74. ) m" ^6 x: Y/ R3 U* _' ]; D+ [$ o
  75.    ang=atan2(y,x);. s. @" V) Q) c! P4 ]

  76. 5 Y0 d$ o! l4 C; e2 s
  77.    if (ang < 0 ) {
    # q* G  K$ ^6 T2 a5 P

  78. & x1 }" d. Z. ^3 S0 T
  79.       return(ang + PI*2);
    ( J, w' `: B& ^& |

  80. " X) |$ G$ {% f* z: H
  81.    }: D2 ~7 W( V1 \- P0 A

  82. # j% N( n0 x# f) ?0 H5 N
  83.    return(ang);$ O) z8 E7 D- S& N. u* _* P

  84. $ y7 t% I# h* t
  85. }% f! v# p! L3 U# q1 n

  86. * U+ I/ d5 ^4 {  \0 D" B) m/ }# \
  87. //#=============================================================" ?0 d" [/ \1 w& B* o0 T2 d
  88. * H! w; ]6 ]9 t/ w5 Q
  89. double ARCTAN2 (double y, double x )! G9 M* q/ A. ?: ~. o
  90. & q) W* T* \: e2 B3 {
  91. //#=============================================================
    3 s8 F- ~2 d: g, T

  92. % n' C: p. w; z
  93. {
    / \2 ?. C! s' o& ]9 T. S, l) U
  94. - t) t; b/ s6 y1 m
  95.    double ang;6 K& f& d% n  k6 Z2 e

  96. / D4 c% z" c2 I" Y: A0 O% p: f
  97.    if (EQ_is_zero(y)) {
    ; x  z! R0 n1 ]! l) t
  98. 7 V% @/ |: S4 A4 C; M
  99.       if (x < 0.0) { return (PI); }
    # s' B; p. w7 ^: a6 O9 Z

  100. * }8 I4 v& [5 w$ T
  101.       return (0.0);) [3 O; F& k  ~

  102. 1 k& h9 n( L) ^* o
  103.    }* _; x. n  M* L- T
  104. * `" K6 ]  c, w* J1 g8 z: J% B
  105.    if (EQ_is_zero(x)) {
    & T! q% L3 T: v4 j
  106. 4 o% K- d) W" d
  107.       if (y < 0.0) { return(PI*1.5); }
    6 {  G9 r  o0 D
  108. # o# G4 h& j( X+ V; a
  109.       return(PI*.5);& A/ U7 ]* G3 u; Y3 ~% L$ B( a( n6 B

  110. & V1 U" T7 i, T5 {
  111.    }
    7 d# L* }$ f" l: v& \/ ~

  112. 4 |0 t7 {  J& Z7 n+ m4 _
  113.    ang=atan(y/x);
    & A1 G. y* _7 A' W" Q* A
  114. # R& k- K! C+ w$ o0 x
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    & b4 j8 @. U% y' N9 o  @
  116. : X1 E/ R  k9 ]8 ?, r' h7 Y( t
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ( t0 A9 C% A2 O! l7 O! U) ^) I/ s

  118. $ R  o$ i- m# c% _( i
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }5 e. L  D" q8 X
  120. ( N2 `6 z! @& p% g& o/ a
  121.    return(ang);
      n7 M# q1 l2 R2 m: K+ U. T

  122. $ F) m  k0 Z' G$ ]
  123. }0 j* G# {4 ~, v! T

  124. 7 a! V" L9 c# Z& X! ?1 s
  125. //#=============================================================  s6 K# g% Y) G3 _
  126. $ B, K4 q- C0 B6 e4 J
  127. double CheckConst ( double angle, double constvar  )- S/ c. q5 i  Z- k

  128. 9 V% e$ f! `$ X8 Q/ w
  129. //#=============================================================' d7 g0 f: P% b0 W  q, b3 f& S! H
  130. * S/ F2 N* ]. L5 [
  131. {
    & n5 m- d6 S4 g+ f8 A
  132. " b- [- z; T5 E
  133.    while (angle < -constvar) { angle+=constvar ; }: F/ s( d: I7 a+ v4 \& i- J
  134. 4 z* K. x  V0 [( a) ?6 s! P. S
  135.    while (angle >= constvar) { angle-=constvar ; }
    / U# a) I& `+ @6 t, X/ K5 U  @
  136. % s0 V$ @) j* c- z" e4 f
  137.    return (angle) ;
    % U/ ~  h2 V1 j+ c1 y& j: L
  138. 9 J. u1 @9 }, U
  139. }
    & H" D& E, z+ Z6 ?

  140. 7 b' q. c2 Q8 D/ u
  141. //#=============================================================; q0 a9 ?9 K3 ^4 t. I/ ^) c
  142. & f: d, \! T' z5 q9 Y
  143. double Check360 ( double angle )
    / Y! ]) n+ l) L: E

  144. / r2 z8 u; j6 \/ ?8 b3 T8 |4 i0 f
  145. //#=============================================================
    1 I+ t. B1 y/ H& V# j0 H: [
  146. 1 J: k) t: K& c4 T6 @! c
  147. {' z: [" L2 e$ S  f1 y

  148. ' m* A+ t7 y9 D0 S
  149.    while (angle < -360.) { angle+=360. ; }
    4 K/ @0 X6 H% e- T: w# d( u
  150. : \5 I  G8 B9 B0 C) m
  151.    while (angle >= 360.) { angle-=360. ; }! _/ l+ a5 z( }4 p  x

  152. ( _' l( g: R' _& N, |' W( v" Y
  153.    return (angle) ;  `; ?4 J  h# ^1 V0 q# J

  154.   F. ^. z; U+ @* B6 _7 |( {
  155. }
    8 _' Z2 _# @$ c5 L8 {, z$ J
  156. / P# i: v( ]. w  J
  157. //#=============================================================
    2 n( t. ]- ~  U
  158. 1 b2 |1 w3 o/ c- e- R. b7 j+ {
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    # n; Y6 ]% q7 s% l

  160. 4 E6 i0 F2 e1 [
  161. //#=============================================================
    6 t" Z" ^4 s" B, A. r" C

  162. & j+ h8 y. ]  X4 c. z
  163. {, x6 W5 s0 Z* z9 {6 o* |
  164. 7 q; z+ p/ |4 o3 r
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }% @+ @4 L" E7 R

  166. ; {/ V( n8 z, U* h9 ?; P% V
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }0 ^, O6 W/ o3 _! X1 u
  168. . n0 H3 t# G: t
  169.    return (angle) ;
    0 W1 \" i) @' Q- g8 F
  170.   b, X% O* g5 l% I4 M
  171. }
复制代码

! B! o/ v( P2 {; X# X) K& i2 P以下为摇篮5轴计算过程代码
5 |, L6 L# ?& c3 P* N+ G/ R& b. M
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);/ @# t9 L; k% p9 E' X5 n
  2. 9 U8 `; ~' y, F/ @
  3.          j=0.; B1=0.; B0=0.;
    . _  g: @# ]3 j( h

  4. - L7 C# q8 \; ]  l4 F: R
  5.           if (EQ_is_ge(i,0.)) {) j# n9 G- }  }. U
  6. & }. A3 g3 {3 L1 H  z  F+ J. x* {
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    4 Z6 m, r" h1 n+ A0 ^4 h
  8. / k; z5 |: s$ W, b$ P2 @
  9.           }3 V1 V2 P0 h+ C& }: Q- }
  10. - h6 q; J( v! b% q
  11.           if (EQ_is_lt(i,0.)) {
    7 |! f9 s( P+ X/ i/ O  C

  12. . U% ]( n# A; U" n) X* J) s$ E
  13.              if (EQ_is_lt(k,0.)) {
    4 x( v5 A* E% N8 J9 l2 h; `- E

  14. + c) R3 ^# i$ M4 D7 ~
  15.                 B0=atan(i/k); B1=B0+PI ;
    4 L# c! V# ]: P+ F
  16. " c, p' p) @! O! H0 u
  17.              } else {
    % [/ A$ @: [; d+ ~% o: ]8 t
  18. & u0 S' a2 g: e! v
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    " `, Y- y0 y, w' N: [8 @
  20. " M' W; u0 A. C0 E
  21.               B1=2.*PI+B0 ;) f( ?/ O8 M) n+ ?4 ]9 x* F. _
  22. : I. c1 F# ~2 H0 D% P4 U2 k
  23.              }' L9 H$ d5 Z4 o' E* Q, m
  24. - B3 ?$ _* Z- o! b* M: H8 o4 U
  25.           }
      b: i$ ]/ I: c$ t& y# x! h  k
  26. # |, D0 ^1 ?0 ^: E, V
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    / H% J. I; y' ]& V8 a7 o

  28. . \7 \5 B& g& Z( B. g
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    7 {3 s+ B, `' H, |  p

  30. ! O8 ]5 J4 p% k- V# r- X/ I& w  l
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;; A4 d- B  ?( v9 U- I; o6 ?# ~
  32. - D* q6 p' Y6 w9 h6 @% R+ ?1 b
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

  `/ {$ ~; u4 ~! a通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
/ y; a5 p4 J& k* D- B  H
8 @  l6 x4 b6 ?. [0 l2 X 640.png ( Z( P* D# C, r# a( l, n/ g
测试结果:
' c- r7 d2 Y" S4 a9 c 6420.png % X$ m  A  J& w0 l: W2 Y& g" Y

2 R- V5 K8 p5 W: f反向测试结果 6410.png
6 K0 `0 P" @4 i

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-8-21 05:31 , Processed in 0.311809 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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