找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8059|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    % ]1 a' |/ C: a3 d9 b- i& Y1 l
  2. int  EQ_is_ge (double s, double t);
    - A+ F% E- j, [& j7 e% O9 R5 b
  3. int  EQ_is_gt (double s, double t);
    0 B3 u" w- o8 Z, L0 U: W0 M' I
  4. int  EQ_is_le (double s, double t);
    : T8 z- |4 _& L9 d8 A
  5. int  EQ_is_lt (double s, double t);
    4 D: t% t9 }( F
  6. int  EQ_is_zero (double s);! f* q: ]9 Y! N- X8 c, n& C! Y% r
  7. //=============================================================+ j* L1 Y0 }& L
  8. double ARCTAN1 (double y, double x );
    ) P) J+ m9 P5 g: g7 l0 h
  9. //#=============================================================
    3 K7 }4 r4 b8 |& ~4 Z  }2 E" T6 R" ^
  10. double ARCTAN2 (double y, double x );
    7 H2 i; C) J2 e" c
  11. //#=============================================================, H8 q4 G' J6 ^$ W9 K
  12. double CheckConst ( double angle, double constvar  );
    - U, u) b) H8 o* {: @9 v* s2 O& o
  13. //#=============================================================, |0 p# L+ ~5 T; T
  14. double Check360 ( double angle );
    # @: n5 n" `$ t" h
  15. //#=============================================================
    ( k5 u" I8 i; V) U$ v) k$ m( D
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );( d. x& K) ~- [3 v7 }
  17. //#=============================================================
复制代码

5 P, |( x! a6 }9 r5 a6 u以下为部分源代码,用于判断,计算角度等6 ~. o) ~' {3 i9 {" m  n' l
  1. int  EQ_is_equal (double s, double t)
    5 M  ^# `# `6 c  u" t

  2. 6 t5 X; Z+ N9 W8 X
  3. {
    2 G* x1 y  N; j6 n; u/ ^
  4. - t2 g2 y( X2 b% r- }# ^4 j$ w' E
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    . M5 u' D$ w) c/ I9 T1 ]

  6. . T6 \% u* j  |) k# i
  7. }
    ; ^5 k" I# @* w
  8. ( o% G7 W( z. t9 \$ F8 E
  9. /***********************************************************************/
    $ i: w5 F, z) [8 u- V  \
  10. 2 A- _, o, Q, W" R. n7 L
  11. int  EQ_is_ge (double s, double t)
    4 }+ ], x" {* ]4 b1 K# O2 p5 ^7 {/ S
  12. . \' z+ c% l6 Z3 P' d" t* o
  13. {
    / l" [( t6 g# A& x9 f& y  T& _- O) [
  14. $ [2 z" B/ c6 k" d7 i3 W
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }, l/ V9 j# |8 Q. r

  16. 7 A; B9 C5 d# s; _$ t
  17. }
    " _2 B) X' J2 W5 z: J; C- u) B8 O5 V2 `

  18. % N/ g' t( `# x4 D1 z6 |. i% U1 g
  19. /***********************************************************************/
    9 e, n( _+ N) n6 q6 a
  20. 0 I9 m5 e  V5 U* W0 d8 s2 b0 X' j% N
  21. int  EQ_is_gt (double s, double t)
    ) ^) Y4 Z& @. f% i+ `8 I6 I5 U

  22. $ Z' R& {  V4 ?+ M4 R% s
  23. {
    ) ]: t7 q& q9 U1 k7 H" `  I9 d
  24. 5 ]$ c% z7 T7 h  b4 z* f+ {
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }' k- r, Q& s8 O, c3 l7 K9 Q
  26. 4 ~0 Y: a2 q2 k0 n, n& {# r  H
  27. }' |7 f+ o0 m$ d5 a! r4 q3 `1 w
  28. $ }0 |/ {  i) N3 b0 S; A
  29. /***********************************************************************/
      X/ P* D/ a3 k) q' Q

  30. - J% s( u: s$ t$ O9 ?* F! d$ q
  31. int  EQ_is_le (double s, double t)
    2 z, I8 X8 d' w* |' F0 {7 M
  32. 5 a$ N) |! V; x/ d* ]
  33. {% K: Z7 r8 {- R) _

  34.   S3 M9 S: t- o8 v
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    / i% F& V/ w$ j$ E5 Z) X1 [, L
  36. . C7 r: E* P% F0 u, P! g3 {
  37. }
    & A5 s9 n' P. d, o/ A$ Y  d
  38. 9 k" b2 Q, g4 X# D6 b/ u" w3 l
  39. /***********************************************************************/8 {' a# l, s7 L0 ~

  40. 9 i6 S2 e% }! d* v) ^* `* z7 {% Z
  41. int  EQ_is_lt (double s, double t)
    % i4 N, c7 v( S! q" z& P. }! Z
  42. " y  u2 q9 h- a; v) y( A
  43. {
    0 e5 }0 ^; b5 w
  44. 6 s  r  }! @  Z
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    2 u' I7 Z! R, W- k. {* L. m# k

  46. $ z9 X- V: {4 \  @0 D: R
  47. }2 G" K+ F& r% \  n7 [6 Z, [
  48. $ Y) m& s& r2 I/ }4 ^+ e
  49. /***********************************************************************/
    3 x& q9 E& c* V" `. N) q

  50.   Y: V& D: O. u" s
  51. int  EQ_is_zero (double s): {; N$ ^/ C3 {  [2 ?2 Q5 g$ s

  52. ( F* \9 i" b6 C1 e& I7 T4 f
  53. {
    2 }* w9 _. V- y
  54. ; \5 E2 k3 F) k: k5 Q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }9 o3 V( @1 l) L! y; y! i0 U" O
  56. ; h  G/ F% _4 V# J+ L; ]' r
  57. }
    9 p7 {. j: Q- _3 W9 h  X* v

  58. ; B' u  R; H5 N- v
  59. //=============================================================
    5 m0 ?, ~5 U! X- a; {  Z

  60. 8 \) b' C( D  M, H
  61. double ARCTAN1 (double y, double x )
    , ~2 z2 f" c, Z6 `/ f% Q3 g% x3 b  U
  62. ( s) M6 m1 }+ F& a1 m, h7 j
  63. //#=============================================================0 M' S8 t5 R5 o! a/ S) t
  64. ; j1 G" b' O5 Q/ J
  65. {, S0 ~/ L$ k7 V* T! D

  66. ; s* t  a2 w. {* d
  67.    double ang;4 P3 h, \2 E9 f. r

  68. 8 W$ I+ r( e$ }( y
  69.    if (EQ_is_zero(y)) { y=0; }
    4 B  c* o( R& d8 Z& M$ |

  70. 6 z- ?2 U) _, z6 `
  71.    if (EQ_is_zero(x)) { x=0; }
    # k- k9 u( {( z7 I
  72. & V% [" l% o# J
  73.    if (y == 0 && x == 0) { return(0); }
    6 Q/ y' B# O+ ~( |+ R# n

  74. - k: R6 P) L8 O0 x$ p+ M4 j% T
  75.    ang=atan2(y,x);
    8 p0 l5 l7 G- {% z) n

  76. ! M" F# y  D% w) L( a0 z% U' s8 q
  77.    if (ang < 0 ) {
    7 E0 _* s7 w" [5 N- [4 X1 M5 }

  78. . w. C. N8 ]8 N/ i8 z
  79.       return(ang + PI*2);5 F  X/ I1 c/ |& Z
  80. 0 T* N) Z- v% V: t" U8 g
  81.    }
    ; B8 K: c6 h9 ]+ k% g! t( t/ `) L
  82. 9 t, @0 Q: [2 J% L
  83.    return(ang);; S8 k+ w1 p7 t& T4 b# Y
  84. , U3 q' l% c* r( U0 T% s: ^$ A
  85. }& w. H, U( L) f* W3 e4 a

  86. ; S5 H% u2 ~% ~  l2 m
  87. //#=============================================================/ T4 @1 d0 ~* [' s1 P
  88. 4 e/ W3 N0 ?* X& F
  89. double ARCTAN2 (double y, double x )9 A, v' ~$ L' q2 E1 _
  90. " d; O. a# Q& `1 g6 p
  91. //#=============================================================
    0 u5 K) n( W% p5 r9 a$ [; W! c2 ]

  92. 3 c( z& t$ q, ^
  93. {$ _+ H" G' f1 m3 J+ K8 u6 q. g

  94. ! j& j0 D' d. _$ S: [
  95.    double ang;& v# Y. p. w( V6 M9 f  P

  96. 0 p- R9 O- x* R2 E% \/ B/ J4 Z
  97.    if (EQ_is_zero(y)) {
    , O5 F. M. q1 \7 |9 q
  98. 8 R& f& T& y1 f. p
  99.       if (x < 0.0) { return (PI); }( s6 @0 R7 d# ?7 S% f
  100. ; i4 [0 t! b) J0 r& i- v$ t
  101.       return (0.0);
    ; {5 I6 z" [1 X6 b
  102. 1 E) S6 c: F5 u7 O
  103.    }3 u4 X- @9 N2 }, q: o6 ]
  104.   A) w6 p/ J* U
  105.    if (EQ_is_zero(x)) {7 M, F* I$ C6 x/ X6 F, M  L
  106. 3 ~; {9 r5 Z$ a' @$ G% U9 `1 c
  107.       if (y < 0.0) { return(PI*1.5); }* G  v" U6 J6 f

  108. 0 W( ?' S" v. W% v6 s6 E" O/ j
  109.       return(PI*.5);! T& Y7 i$ b/ H3 l. D2 N
  110. * c* y( w7 x: d% _- b1 C
  111.    }
    1 j* r' r+ G4 S* L# W7 ~0 R, T
  112. 0 @8 Z, ]% b+ |$ h# x+ h$ J# q8 O  p
  113.    ang=atan(y/x);/ V" H4 k# O( X9 e3 M# W$ R9 G6 n
  114. 4 X' D% M/ j1 d. u
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }! U8 o/ N' e; q7 V5 ^
  116. . y: _' s  j' q( t/ i
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }3 f' A7 x# S- E2 J$ _# r9 S9 G

  118. . F0 H: m4 O* |* w5 G- N' t8 _8 x' u
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }* N* i  G+ J+ f8 b) G: C# M

  120. . @+ z7 G3 i7 J$ H5 B
  121.    return(ang);
    * [) t1 G: _5 w4 g" h  `

  122. ! L# n$ g: @, z4 U* Z4 |
  123. }
    * w, y( ~$ O2 B0 q/ a' Y7 t
  124. ) J% w' ~& \2 f& @) S. I9 h7 {: q
  125. //#=============================================================9 E0 k- K- p- S1 r# F) E: O

  126. 5 g7 `, |' Y% Z( C# x2 ]/ F2 \
  127. double CheckConst ( double angle, double constvar  )$ {0 r1 Y. o$ o. v, c6 q$ [

  128. * s2 q, A" x" L+ i9 ]6 f
  129. //#=============================================================: l3 _! @4 x" R! s- A( n

  130. $ y" J$ X8 W1 ]; C# x* j! a5 u
  131. {
    4 h" A4 E( G, G3 M/ v

  132. : z9 P- [- Z) h# o$ G4 E
  133.    while (angle < -constvar) { angle+=constvar ; }: e/ P4 `0 m- b, F; h

  134. 1 M6 ?" r8 y- J5 Y8 z
  135.    while (angle >= constvar) { angle-=constvar ; }
    2 {  M, a9 P+ d& L8 ^; q- s3 a6 M1 f

  136. 4 k: t" g+ D6 ?) t: G* k( Q
  137.    return (angle) ;  w3 ?2 u. h7 L/ d! G
  138. 1 y$ n& m/ X9 U: W. \  N7 [
  139. }
    , n6 ]8 G. H0 T7 c
  140. " `( e) ~! H8 G$ ?- W8 P1 d
  141. //#=============================================================
    ' g, H# d: I, E! t

  142. 1 e, x1 W; n$ R! O3 B. W! k+ ]
  143. double Check360 ( double angle )& @) I# ^7 A: w, T# y5 c, n$ }
  144. 6 o* ?0 j7 U4 Q; J5 y, v
  145. //#=============================================================6 ?) D( k/ G2 B/ X& u; J

  146. * g4 ?" Z0 N6 ^# R- Q
  147. {( e2 z3 C. a2 w& S0 ~

  148. , C8 ]1 I& L1 N9 T* M$ K, {" |7 v2 R
  149.    while (angle < -360.) { angle+=360. ; }- j1 |6 u0 |$ I; t3 ~
  150. & F6 n+ J: k+ Z
  151.    while (angle >= 360.) { angle-=360. ; }: Z" X' N9 H0 N6 S, @: M
  152. 7 [8 S, X: c$ T
  153.    return (angle) ;
    6 o5 t4 [. ]" q6 H# \

  154. , T5 N9 i6 M4 W" `. h: {$ [
  155. }" ?4 u  ?- t9 w( o5 A! F' c% l

  156. . B* D0 b0 U' I6 H
  157. //#=============================================================- f+ g- ?0 j9 I# i  q7 B

  158. 5 z% W3 e3 p. Q; _% |. ^
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )  j" ^, P! _& }9 `2 c

  160. 3 r+ ?2 V  B: u- P: b. F5 J
  161. //#=============================================================
    2 ?4 n  G# A+ t' T4 ]( i
  162. + C9 j& v; @, ?- F
  163. {: B0 q; n+ b' |8 G. |7 g* J) _4 V1 A. _
  164. 6 B2 X  G& r( G' V# m( u" `
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }6 W5 ]! M$ l  ]! l) O
  166. ' \/ O4 e! Z! y
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }. T; c1 B: i. ~! u# b2 n
  168. ' ^4 f, O9 d6 r* f
  169.    return (angle) ;
    - c! v; D6 ]1 ^' D4 c& ?

  170. ! j+ e% V4 ^# p8 U2 S$ _# e
  171. }
复制代码
1 p  g! b# |9 P9 ]
以下为摇篮5轴计算过程代码
. ~# q$ [. T. w; P) W
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);4 Z6 u& ~! @& B3 \& I/ y) f1 `
  2. $ q8 u2 p& x' a2 N3 Y3 a, m
  3.          j=0.; B1=0.; B0=0.;
    * L8 K  Y$ _5 @0 j' K) c2 e* E* w
  4. ) D+ j9 N# n% T
  5.           if (EQ_is_ge(i,0.)) {8 b' v3 {" r& u- v. {

  6. 0 t3 h3 X  x+ k. E! Z
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    - e0 k4 {) p! G

  8. 9 M2 R- q& e- M! t$ l
  9.           }
    7 w0 g# P- O& E; a
  10. 0 U7 n. @4 e- G5 Z& ]; f
  11.           if (EQ_is_lt(i,0.)) {
    * N; E: t8 P  q8 b( ?
  12. 9 I# u5 A' F  k
  13.              if (EQ_is_lt(k,0.)) {
    " c! ]" D4 G6 A$ d/ `

  14. ( F+ G0 x! s) C: j
  15.                 B0=atan(i/k); B1=B0+PI ;
    * y( M0 }$ F$ ]

  16. 5 x& D- d! W- [8 J
  17.              } else {: c' P2 }* V! T: X& F( W
  18. + k2 M  L6 Q7 t! J) i8 W- m; k
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }" {2 e4 g) D4 ^/ X$ n; G
  20. 9 P" i- c# s. c4 R, V
  21.               B1=2.*PI+B0 ;
    , Q# t( y6 p% F8 G

  22. # `+ z4 r# @/ x$ \; q0 z
  23.              }
    ( c6 _  T+ h: k/ S
  24. 6 D) ?/ E/ s- L; b6 j
  25.           }7 s% G0 o# o, [8 i2 m& @

  26.   C0 Z( [! i! _' N5 B* X; P- F
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;2 u+ A- @6 S  G+ Z' ~8 e

  28. ( ]2 s9 b, n$ x0 R
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ' J  b+ V& `2 B6 H, `

  30. / i6 B$ Z/ i0 n8 m. u# C! V
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    * _' b# ^2 L/ q7 z. p% |8 z

  32. $ Z6 J# T. c4 {, Q; r
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

7 l5 g0 D  O  ]) f0 j( ]$ K8 I通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。% b) ~4 v; Y5 s/ Q9 u' T( E

1 Z3 a4 D/ d+ d! J 640.png " n% c( v2 [: J
测试结果:/ s, x( v/ w  A1 u6 J
6420.png
: q8 E4 {/ e3 V7 F" f" W
  M2 C  b' h5 J" L反向测试结果 6410.png
5 Z8 y4 H7 G/ d1 k3 q6 \

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

272

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-23 03:38 , Processed in 0.899688 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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