找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6509|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    " ~1 L  n; I6 c( o4 H0 {
  2. int  EQ_is_ge (double s, double t);
    , A. O0 F8 p1 z/ Y9 \0 M
  3. int  EQ_is_gt (double s, double t);. T" M; N0 d% G. Y0 K( w
  4. int  EQ_is_le (double s, double t);
    5 r% e) Y+ R4 b
  5. int  EQ_is_lt (double s, double t);
    ! A" Z' a! \# B
  6. int  EQ_is_zero (double s);
    5 B) ^2 }, d1 A% {7 Z
  7. //=============================================================
    $ ~1 Z. F- r- l$ E5 d
  8. double ARCTAN1 (double y, double x );3 A  R; b9 _# g+ x9 G
  9. //#=============================================================
    9 W# ~' Y5 D+ y$ ~
  10. double ARCTAN2 (double y, double x );  _2 t: J$ {  e, [/ v( R
  11. //#=============================================================
    6 v4 }2 i! y8 A( H0 L8 I6 U* e
  12. double CheckConst ( double angle, double constvar  );; J( L5 \- ~+ i& u& m
  13. //#=============================================================$ I; J' ~) W2 I9 P& {% ]* E
  14. double Check360 ( double angle );7 t( [- L3 v6 Y
  15. //#=============================================================7 W0 a3 ~8 M* G/ n
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    9 b9 E! L6 S) L, t3 e) H. s( e
  17. //#=============================================================
复制代码
& |* ~) h; ~$ r8 F1 @7 ?: s
以下为部分源代码,用于判断,计算角度等
- C' {+ @* ~( @% z; O3 F0 o" B
  1. int  EQ_is_equal (double s, double t)) ?* ]. K/ k4 z: H5 s3 {

  2. / |; Z2 R+ h$ ?( B! a6 O
  3. {3 T; o: Z+ g# G; d5 c0 v
  4. . L8 C+ j3 U3 x- u, e& S
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }, z. f  q# n. L/ p1 m) J

  6. 3 c- c- z* M- {8 N2 i% m
  7. }; ~7 A. z! V( t4 s, u

  8. + u* y' N: _% k
  9. /***********************************************************************/
    8 ~) F$ \# Y# F4 \7 w, }4 }% @
  10. 3 @0 B, u" {. x. e* \  S7 G
  11. int  EQ_is_ge (double s, double t)! c' _4 D/ f8 y- {
  12. % I2 {& f  @1 o( n4 j0 e( o
  13. {
    1 R% {' f1 l1 Y2 G

  14. 5 e5 q( p0 |& o; \& l. R' [
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }  s" U# s; S: n

  16. - [4 |  r. q/ U9 E7 B
  17. }' v5 r5 j8 a4 D# u6 I

  18. $ |8 }, p; u3 A5 U5 z+ t$ `. a
  19. /***********************************************************************/
    ' A6 j( c/ \$ U' I$ i

  20. 9 N, u4 b' Q+ ~2 N/ l8 S! x
  21. int  EQ_is_gt (double s, double t)
    5 V$ H3 A8 h+ R& Q9 s5 u' _5 S" }

  22. ; m& R. E/ i2 F8 F/ _
  23. {& u/ B0 J4 x- h5 n* X
  24. ( S, k) n  x% f: H
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }% g: v$ v( N4 q$ o! w8 I
  26. # [: S1 S2 H  D# O7 F5 ?; h
  27. }) z: ]1 s( L% T1 Q. V7 i3 k
  28. * k+ S$ o' C5 a' \
  29. /***********************************************************************/
    ( g9 [4 H# h) P- A2 o- d1 m; ~

  30. : @; {0 F, f7 P9 a
  31. int  EQ_is_le (double s, double t)
    - Z  X9 g( E2 \. [2 T- k, A" L
  32. $ A+ @) \% F/ _- d! R
  33. {/ G2 }2 E. k0 @& p

  34. 6 A' e* V. ?# ^) a. V& h" G
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    " }& H1 c" Y: u* j$ g* }- ~
  36. * a' Z0 z, a. p- l( p
  37. }
    " S# ?4 v) o1 r7 f% A  v7 d
  38. : Z  T0 ]* [% H/ k. }$ p
  39. /***********************************************************************/, K/ ?4 u' Z/ X" z4 O( p
  40. ' s: b+ a+ u# b/ t
  41. int  EQ_is_lt (double s, double t)
    : a! h9 f7 S; g- b/ x
  42. & C, n; G, J3 Y3 e7 e" j  S" \
  43. {
    ! A8 A% [; g$ g7 t

  44. 0 A( I- C2 V+ c) v& S4 K5 O+ `: n" g
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    1 l! H& b# |3 i( U- s$ r8 ]) v7 T: Z

  46. ' _5 V2 `5 _9 W% g, X" C9 F& ]# P  E
  47. }
    . C6 [% e/ e# o; ^' J% b
  48. 7 E- ~8 \1 Z8 o: E
  49. /***********************************************************************/
    : q; j2 y7 ~, S$ }; ]
  50. , y% d9 d8 D. d; B, K
  51. int  EQ_is_zero (double s)* }9 s- J, ~' i% I, l: X/ t* ~
  52. - ?7 v* ?0 ~" K0 r4 y2 M
  53. {
    7 \) P# @- l: N9 Q

  54. 4 ?- U7 g% }. m0 r& W9 O
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    6 Q6 a0 n# R* |* [% ]' f
  56. ) Z) H1 l) B, Z+ A; |
  57. }' T) u1 T) M0 H4 m) r4 A9 Z

  58. 1 x" p/ x& s, H/ m
  59. //=============================================================
    ! \( l4 F0 O0 I4 ~( e  _$ O

  60. 5 B/ x, b6 {; T* M/ p/ R
  61. double ARCTAN1 (double y, double x )
    3 s1 [2 [* v. r  \% Z+ d* K8 o
  62. 3 e# M* p, S8 g2 n7 i
  63. //#=============================================================
    , n2 g$ l; ^( `: q; P

  64.   I! _7 [8 E" P9 m* O
  65. {
    & b: u& X# M! T. q  g) {

  66. 7 w$ F  |7 Y5 ^# ?* ]0 T! V9 G
  67.    double ang;
    5 O' S7 {6 ~0 D3 n' B
  68. ' q% h: C8 D8 q& j) t6 [
  69.    if (EQ_is_zero(y)) { y=0; }
    9 b7 o' r7 c$ C" Y: |3 z
  70. 9 ^9 U1 ?3 o! s' Q! W2 H
  71.    if (EQ_is_zero(x)) { x=0; }
    / U# ~! G9 T' }7 }; c; R

  72. % z' S- @3 c( j  q( ~
  73.    if (y == 0 && x == 0) { return(0); }
    . [1 H: X+ Q; O0 b. W* `

  74. - w! e2 D4 `& [
  75.    ang=atan2(y,x);
    . ]% ?: t+ c6 C1 W

  76. 3 [1 d' ~0 d+ }7 m6 @+ M! i2 z
  77.    if (ang < 0 ) {
    6 V/ F* M4 z! b3 z& q; G# W
  78. # j7 j+ b& w7 f$ f% H2 b. J
  79.       return(ang + PI*2);
    0 d. a0 W+ ~3 F  Z7 F

  80. : G3 c7 |7 v/ v: T. e- J" f$ }
  81.    }
    " x3 T' S& Q, u3 f& R& x

  82.   m: ?. O, D) m; A0 @: w$ s: P3 Q
  83.    return(ang);
    2 }2 e/ G' t! o
  84. 5 q/ w1 J, S/ ]! V
  85. }
    7 {9 ]0 {3 G; d' H4 x

  86. , L0 X2 A2 f' R$ o8 ^4 c( P
  87. //#=============================================================6 j5 V, p* E, E5 w
  88. % Y! I6 \" Z* R1 X! b0 X" j4 g
  89. double ARCTAN2 (double y, double x )( ]4 @9 z6 y8 N& w1 k# m
  90. 2 C% U4 y1 k$ ?$ ~; a" E
  91. //#=============================================================' {% u( _3 P7 _& t7 V2 W

  92. ! v. @5 m2 Q* k
  93. {' B  g; V! L1 q$ ~0 W
  94. 1 R: `5 N  I& I: n8 ]. C# M, H# k: Z
  95.    double ang;
    , k2 h5 T5 V7 C  R. {
  96. / m1 l; ]" ^$ T5 a
  97.    if (EQ_is_zero(y)) {
    8 {$ j- U' M! p! @7 f- _

  98. " H. ?" ?8 ~. s8 H/ ?
  99.       if (x < 0.0) { return (PI); }
    & @! @9 z% D0 X. D% C$ W, C( Q
  100. , [$ I. r, q7 {9 H) G
  101.       return (0.0);# p) m8 \( P: ~5 r. z

  102. 5 a8 z/ t4 e; ]$ U
  103.    }
    9 v1 {) o8 p  T* R  o: b! ?
  104. . }8 a6 k" v0 |* p4 m
  105.    if (EQ_is_zero(x)) {. U7 X3 U! t0 v% g' B. ?* Y

  106. ' g. k- i* U8 O+ ?/ ?
  107.       if (y < 0.0) { return(PI*1.5); }: ?- z1 B* P6 ?& c

  108. & S( c6 L% L) }+ y; W8 P
  109.       return(PI*.5);
    % D5 l9 M  z! D, ~

  110. 3 A5 T- N" }9 T& K* Q. r. J2 n
  111.    }
    % d6 R, ?9 i; z/ I. F" o

  112. 8 k' s3 w+ q0 c/ @2 o, ]
  113.    ang=atan(y/x);! |2 v- ^8 O% m4 G
  114. 8 H. b- k4 b- B' {' }
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    3 w  R6 c  d0 U, e, E
  116. 6 M# I5 B6 x- C! X) c6 u
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }: i' V2 u0 O' M1 c% l5 ]7 k

  118. 1 u5 B+ T- C/ x5 m8 s8 D, X* s# }, l
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }+ [. Z/ B' Y- E# p
  120. / H6 D) y) U4 N6 A: R
  121.    return(ang);
    1 p" t, `0 X, i# t& D. q

  122. - ~" ]+ j" j1 H1 M
  123. }- o4 G3 f8 T9 D% w
  124. & B7 J; z" J# z3 X' C, A0 }* M, V
  125. //#=============================================================8 K7 v6 A# y4 j( b

  126. * G; D# U7 A* d' Q
  127. double CheckConst ( double angle, double constvar  )! J9 X+ z# V+ y, z7 y

  128. % w9 l) U8 v# |8 s9 S% G
  129. //#=============================================================' N6 ~! j( V: K0 b) [
  130. * _7 @& Q6 v# ?
  131. {: s  Q  ?% h) H4 ]- B2 y
  132. 0 m3 L+ B% y+ H) J; X
  133.    while (angle < -constvar) { angle+=constvar ; }9 K) x3 O" I. ~: ]3 I  z' I; g

  134. ; H% f4 ?6 u0 o& [7 z$ ~4 m" d( d
  135.    while (angle >= constvar) { angle-=constvar ; }! X9 P5 j8 P' x, b# t. c' \( o" b
  136.   x  v; Y6 F4 n* i4 ^, }
  137.    return (angle) ;
    1 t' w9 V8 G  V% K6 M- K
  138. + F* P* q2 y3 }0 M& n+ X6 y  p
  139. }+ i  i9 C: W' l$ x+ S4 T6 O% I% T
  140. ) t! k3 H5 l0 |* I8 M
  141. //#=============================================================$ ~- F* P% {2 V

  142. : }  Z8 {2 M, _; k; @! Q9 N5 k1 Q
  143. double Check360 ( double angle )- s+ m: l7 D; D% H. H

  144. & O7 f8 Y+ E- C  K8 `
  145. //#=============================================================) i, o0 k! [: A/ K: x# r5 ^
  146. 5 w1 T; o: P  B- u, g4 k. ^
  147. {% ^" _; [: y# Q8 s$ e
  148. 7 @  m6 L( x( `& f" ?5 V+ X
  149.    while (angle < -360.) { angle+=360. ; }
    $ p8 o9 ~. Q" J* q2 k
  150. 2 j! [0 P" \  t% I( r
  151.    while (angle >= 360.) { angle-=360. ; }& N* s6 c/ [. C) l' {. r' F; g
  152. 4 s1 L5 P% V! f( F# P& v
  153.    return (angle) ;- R+ H6 V" W8 ]; J  I" Q& A
  154. ' U8 [( {' f' I/ P, l
  155. }- u! D3 ~4 n7 [" ?* @5 l+ A2 V% H

  156. ' f2 c( c& Q. o/ r
  157. //#=============================================================4 t9 c! {/ m; ^

  158. ! j! p  N" T* N) `( |' q
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )4 W$ M  w$ H% ?9 w) |; h
  160. & g1 G6 e+ d2 Z% e) @2 z7 V
  161. //#=============================================================$ N: a* V, Z2 g. v
  162. ' R; C6 f7 c# Z" K
  163. {
    : _0 ^/ _3 _) m! n& \& e8 u

  164. ( f( ~* p& k/ ]. J9 }4 [1 W' T! a
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    " q& Q' j( k' V7 R

  166. # N! G& n/ j1 |/ V4 I0 }9 U: o0 m
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }0 J4 D6 M2 c/ j% A1 G

  168. * W1 B. a9 A9 z' C( Z) b% z$ o& L
  169.    return (angle) ;
    % F8 ]& g" [, q& D# a; |
  170. 5 A* y! ?3 U7 e. r: A" |
  171. }
复制代码

2 k0 {, D& R8 d, [: T% j( V/ G以下为摇篮5轴计算过程代码
" s  R& K; W, C* y! a8 y6 v
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);" b# ^1 `9 @0 V6 k

  2. # M8 l* e; ^. i: s+ b# C, d
  3.          j=0.; B1=0.; B0=0.;
    " [1 K* c) i: e5 R1 j  H3 X% J

  4. 7 e  v& L' \4 `3 P) P  J
  5.           if (EQ_is_ge(i,0.)) {
    4 j7 B; x+ k. I* h2 m+ Q

  6. 8 d/ v* [  w' z) i% O8 @% @: o' _% T
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    9 E9 t$ O6 ?& U9 H
  8. ! z( H3 e% s: J( j
  9.           }# g, }' R' d8 A

  10. + r) `+ ^# a5 N& Z# H) k  y
  11.           if (EQ_is_lt(i,0.)) {% x/ s% o% I# [  s, j' i8 o
  12. 3 ~! i. e& Z+ A( Q* @# Q# [  ?) E
  13.              if (EQ_is_lt(k,0.)) {/ ]# |/ L" |+ v" }3 l
  14. & M( g5 p3 }$ [0 Z% {
  15.                 B0=atan(i/k); B1=B0+PI ;" A  P7 o, v1 B; x( i+ Y' t7 U

  16. ! l3 H5 o$ U: L% O
  17.              } else {$ g( [9 X. F) R  Y4 i
  18. 4 G9 _3 Y1 l/ L- A
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }. n0 P( u9 k8 N  b& G
  20. 0 O$ w. z" V4 v, q( U7 G2 H% ]) k: Z
  21.               B1=2.*PI+B0 ;
    % v  Q* ~0 `; W6 B* ^7 E# h

  22. ' r5 _, u: Z1 F. B1 y2 N
  23.              }
    1 e; e2 s/ V: _8 e

  24. 0 H; t# H1 T' C# y. M+ J3 X
  25.           }, A. L# U4 {4 L# _8 X( u

  26. % s- H7 b" z6 |! h* ^
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;- @8 S8 m' y+ ~& {% W

  28. 5 t2 e8 i( g# P7 i% V  f
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    & R8 i, j* Y. v$ C2 a$ f- n

  30. * V) r+ k3 g' n  \! I7 F2 h
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    1 P. b/ t0 B' L/ g7 s% _' A9 B* Z
  32.   T! J. k0 Z' x8 s
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

# U; K' m% A. n2 g7 p( ]通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
# |& F* F  h* Y- C' T, o, h" W5 n& X; S9 {% D6 w$ ?
640.png
& S. t5 `1 R0 h" b( y测试结果:
4 p) Z5 j) d1 X% w/ p( i3 y8 T 6420.png
& r6 G* q! m2 x- s6 j3 ~8 V/ L2 e6 N' L1 Z. ~1 Z3 ]! p9 ~
反向测试结果 6410.png
. n6 D4 U0 X, T( E! Q" I

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

187

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-2 23:09 , Processed in 1.756202 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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