找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7397|回复: 3

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

[复制链接]

433

主题

5757

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);  B3 Z2 I- i, m* a/ ~
  2. int  EQ_is_ge (double s, double t);
    + |0 v2 b3 ^: L) M$ M* v- w/ V% {! ~
  3. int  EQ_is_gt (double s, double t);
    " V4 m9 R& R) N4 U2 H' T
  4. int  EQ_is_le (double s, double t);
    : w0 e- e; b& m
  5. int  EQ_is_lt (double s, double t);
    ! m, h0 {( f) h$ |0 J5 x) \3 G
  6. int  EQ_is_zero (double s);# n" S: N. ]- G. l6 Z2 R
  7. //=============================================================. _7 ]1 T- m- E# g/ h
  8. double ARCTAN1 (double y, double x );2 S7 J% Y" Q6 h9 E
  9. //#=============================================================
    " e, C8 w3 m, |7 S6 r8 E  u
  10. double ARCTAN2 (double y, double x );
    8 |! v7 c% S0 |  P7 n+ @1 }. J  d! U
  11. //#=============================================================4 D  E! t* z2 ?, N$ a; H
  12. double CheckConst ( double angle, double constvar  );
    5 c5 v+ T# e" \& \; x% O
  13. //#=============================================================
    " c" T  F0 Z. U) S; S
  14. double Check360 ( double angle );! f  S- @5 a2 R
  15. //#=============================================================
    ) O# |1 C% R  L4 n5 T
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );- Y( \0 x; n! M' I
  17. //#=============================================================
复制代码
9 m& J1 i  W; `% ~8 C
以下为部分源代码,用于判断,计算角度等
* R4 d9 v2 m8 K  ^3 `7 }
  1. int  EQ_is_equal (double s, double t)- w& n7 o5 E, ?5 @

  2. 5 i* w9 Q' _- f: ^( G
  3. {
    / e* C) Z$ J/ C

  4. 5 M! g- E) j7 y5 }( y$ K
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    8 `# u  Q( Z- I" x+ a9 c+ c
  6. # I/ {  w+ _0 p& Y' m
  7. }8 c+ q# R5 p9 y: k; e9 g- c4 p
  8. 8 K. K0 H0 e4 M
  9. /***********************************************************************/
    9 ^8 x# h* r' W

  10. ! P7 a" s0 i8 q! F$ }, Y, G: j
  11. int  EQ_is_ge (double s, double t)  q0 p9 q. j5 K" R9 q; M
  12. / {" y: ]6 H' S9 P% }) k( u. T
  13. {7 h7 J; Q( w* e. r3 O0 K$ ^' H
  14. ) B0 V6 X9 Q$ X; E7 o4 m+ w
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }5 ^6 |) u7 @" o) p* S2 A/ Z' q
  16. 9 d7 f; N5 O( k; R
  17. }
    ; U5 P/ B9 J# W3 M; N! [" ?. D

  18.   G2 c" n; k) S1 v
  19. /***********************************************************************/
    2 q+ X1 @# \( x9 {4 T# z, c8 z

  20. " J# H) v; s0 |& I% M: ?6 p) l
  21. int  EQ_is_gt (double s, double t)" b* k5 y* m; W/ [: q

  22. " Q4 r6 J4 Y7 O9 f8 z
  23. {% Q$ q; R. F- l5 u" e: n" B
  24. ! @+ |4 `; Y9 h# R4 u
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }! n: z4 H$ |  F1 V; l' s" _. i9 A
  26. * v. |$ `4 W4 {  J3 ~! K
  27. }" F4 ]1 Q" Q0 z0 a. U8 p) V
  28. # F9 S5 p  l) k- _5 l
  29. /***********************************************************************/9 F0 J4 F9 P7 Z" K& E' D: o3 O3 A

  30. 9 a  e) S' E0 M6 Y  J; C
  31. int  EQ_is_le (double s, double t)
    ! R0 |4 w" \9 E% R! o  j! o$ j* J( B

  32. . H# I$ K) P4 g. J: [* e
  33. {
    + [2 n1 t% r. i) B1 {8 e

  34. 5 H. \; M; q4 \/ C( O! n: }
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }# j7 K3 P% t1 L- R: R2 ]

  36. / Z7 D4 \+ k7 r: X# X
  37. }. P$ p; s- c' j  J& ]/ r) h
  38. 6 B; u* j' Y6 I7 b* o! C9 P
  39. /***********************************************************************/
    ) \1 i6 O5 O5 a# ^$ t
  40. + V9 |* z2 x2 k# Q8 G- b9 X) v& i4 R
  41. int  EQ_is_lt (double s, double t)2 d5 }& y  m2 B# d2 |$ }: |
  42. - G- U3 \' N$ S
  43. {- I- m2 t) B$ J
  44. ( w5 F; ?$ B# E/ |3 f
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 O9 U( A) `( |. b1 m" p
  46. 9 g( V( p- v& `. e2 r
  47. }: |' P4 C" e, N% @
  48. / {& B3 _9 ?) k& Y
  49. /***********************************************************************/# M6 Y: \9 [) q: I2 o* O
  50. ) Z: i2 h) s0 T: Y
  51. int  EQ_is_zero (double s)+ v' i8 G  Y: i/ U2 u# a, w
  52. * A" z0 I" m, c" T: M# e' K# Q
  53. {
    + u! T/ F7 A4 l$ j* x
  54. 9 Z! N* r1 o; ^. H: D% W3 i
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }3 I( H* U5 I. c3 Y( j9 ]
  56. 1 u7 F( d, ~" |  ?0 Y, a6 P
  57. }
    2 Q3 r% H4 W$ u9 h2 }

  58. ! W2 F. v  O  {' A* F: h) [
  59. //=============================================================& u6 z) \# i- L5 O
  60. 6 `' I  ]3 A' w
  61. double ARCTAN1 (double y, double x ), }/ ~1 q9 t0 t7 p8 \

  62. $ Y8 w* z0 Z- b
  63. //#=============================================================2 W  u4 i- a) o- v2 O
  64. 2 e- v- h6 Z  h$ D' ~
  65. {7 ]9 P1 d" s# B$ H1 ~4 f5 q

  66. + |- ~4 A) j# t, W! h* @3 ?: @
  67.    double ang;* i& N' c4 E; D8 P0 s
  68. $ h% T7 c( w" |) O2 J6 R( p
  69.    if (EQ_is_zero(y)) { y=0; }6 }. a" ?% Q4 Y+ M& n8 o

  70. / Z8 |# t& v& _& G/ P
  71.    if (EQ_is_zero(x)) { x=0; }% u0 c) Z- o# [9 b
  72. 6 `. C$ c$ x3 y0 ^( Y2 T1 p4 @
  73.    if (y == 0 && x == 0) { return(0); }
    0 B9 C" L5 i+ \

  74. 5 Y8 G2 X8 M7 Y0 n9 M: C) M
  75.    ang=atan2(y,x);+ z3 R1 D0 m' I& z0 h+ r
  76. ' d* a  ?' j' i( Z0 Z
  77.    if (ang < 0 ) {
    . u! i- G" v5 Q0 }# g0 t
  78. $ [" K& m. e" v$ h5 a* g/ a0 C: a# ]
  79.       return(ang + PI*2);5 O  x: U( Q: p8 k5 m" n/ |
  80. ( o' T& Q2 [- I
  81.    }
    ) j" {6 |/ e! H
  82. + [; t3 ?5 {) f& M* c7 m! ^0 `6 |
  83.    return(ang);
    0 X: [* e/ w1 K& S9 M

  84. ! W& v. R1 h+ |8 q- K
  85. }
    ' O+ A5 s6 Z5 O

  86. % K9 @1 P3 F% N% F) |
  87. //#=============================================================
    2 a6 G. T( T! M% o8 _! Y
  88. 9 B0 t1 Q1 d* F$ k
  89. double ARCTAN2 (double y, double x )
    4 V' d. S6 q5 G5 j3 C, |
  90. * d& V  F' V3 j$ u  r$ R* a
  91. //#=============================================================
    3 p2 B; H5 \3 b/ `* ^

  92. - P! S" ~1 Y* L8 ]) x% o) T6 A
  93. {: v8 Q8 ~1 F! |2 h3 C/ V8 r
  94. 2 \: p0 k6 }/ \7 H, V1 X+ ?& a3 H
  95.    double ang;' L( _4 ~8 T8 P

  96. 3 i. ~' `9 W! C* V/ }
  97.    if (EQ_is_zero(y)) {- u8 |* T$ J( G! Q# o
  98. : l% j7 J! d( f4 C& J; i' f
  99.       if (x < 0.0) { return (PI); }
    ) \& b4 y- j0 S
  100. % I: ~- ~% q/ @4 O+ X; e  ]5 c2 d
  101.       return (0.0);
    * h" B- c' a3 T* e( c  L. {

  102. % e. r* c' `. c4 u7 I/ a
  103.    }6 Q3 j/ G7 Q- R" |8 m9 h
  104. 1 R: L* p' n2 l$ I, Z9 o' s, k
  105.    if (EQ_is_zero(x)) {
    ( C- O6 ]) c6 T* j. s
  106. 8 H7 ~  j3 `1 X  S
  107.       if (y < 0.0) { return(PI*1.5); }
    9 M  V/ M  v" r/ r

  108. . t: z$ |' B; ^1 `. y  g2 h9 ^6 x% |4 j( S
  109.       return(PI*.5);
    ' p0 x8 P4 L) m4 w4 A8 v2 `* M5 T
  110. 3 L# m# v# J0 r, q+ |, B
  111.    }
    # u2 |0 N; F) P, Y
  112. 1 P2 i+ Y1 ~* Q8 B
  113.    ang=atan(y/x);
    , B. F& X# ?  }2 B( E+ b% [$ t3 O3 y
  114. 5 ~* M- H5 h0 l
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    7 s0 ^8 k: i8 f6 P: q( ]9 S
  116. $ h% R6 F6 t& w8 z1 u# P
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    . F, B  O; Y7 b2 l0 `
  118. / u/ U# e: A7 O$ \
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    " B4 H8 a; h( R( t

  120. * p+ R6 [5 @" ^. A
  121.    return(ang);! O' t* E' R1 k0 [

  122. # d, {; E+ ]+ C) h
  123. }+ v8 ?/ ]5 L! b2 A5 J6 W* Z$ q

  124. ' I5 p( D% W8 ]" X4 C+ d8 g: \
  125. //#=============================================================* ?! Q4 E! \& y5 U7 G6 w) l
  126.   {+ o3 b6 U9 }; {: y" M
  127. double CheckConst ( double angle, double constvar  )
    7 \/ Z% n' z0 r3 @
  128. * s+ N  j7 I3 k
  129. //#=============================================================
    % T- |- U5 T9 p+ J. |) K# E; b; u

  130. " {/ n% ]7 \0 @% i& T3 P
  131. {; q8 r; C' h8 C7 {, ~( a

  132. 9 Y$ _) _8 Q5 i5 c2 p3 k" o
  133.    while (angle < -constvar) { angle+=constvar ; }
    1 s6 N9 b! P0 \/ ~* \
  134. ' a9 e! G$ x  ]
  135.    while (angle >= constvar) { angle-=constvar ; }! G0 H6 |9 }3 N1 \. ^  g. ]

  136. $ s* `6 s1 H# U
  137.    return (angle) ;4 B8 Z  e5 n0 [

  138. ! ~& }' x6 x9 Z4 g; Z. k) Q
  139. }! o/ w+ I- O5 }7 C% F8 x

  140. 8 ^" @' i( b& `; ~5 M1 c, \8 J
  141. //#=============================================================) C. J5 Y% J1 P2 p8 Q# Y
  142. : Z: P. h' R7 w) [$ Y" }' z, C
  143. double Check360 ( double angle )
    : B' \) X3 c8 I* |* W

  144. : P' \0 C/ \' d* }# B
  145. //#=============================================================
    8 B  R+ J$ r* ?6 {! y! v7 {
  146. # F. V: o5 S  ?/ Q
  147. {8 V2 p: w; _4 {) t
  148. 1 c: Y% h. V2 x
  149.    while (angle < -360.) { angle+=360. ; }
    ( F3 L8 D# o" {# D

  150. 1 B+ E" e; f6 O- l6 U, R
  151.    while (angle >= 360.) { angle-=360. ; }- D) y* e: x& v" |' O
  152. * e/ X% h3 p8 f. M0 U
  153.    return (angle) ;  K/ ~, U' G2 T( K

  154. . y7 _% w& w( T1 v, W$ F
  155. }
    . z; h0 {1 D  l- ~6 J# }$ A/ j  K

  156. 2 s% n# _5 g- E7 v* Y8 a
  157. //#=============================================================
    0 p0 Z. s) R9 W! W# u3 J
  158. " P, U+ i* d' Q2 R3 {6 w) n: {5 F, t
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    8 x- p9 l7 t1 V; u* P3 M4 d

  160. ' V! I" ]9 d. m7 q
  161. //#=============================================================
      L9 H- L7 C( v
  162. 1 I- \; V! W1 n0 S- A! ~4 u# ?1 [
  163. {6 ?$ S" g8 j, L) g2 Q( A9 r6 O

  164. 9 n9 t' O6 z% V/ K( c
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    : d* a3 y, w0 O- T) v

  166. $ t! O8 P$ h/ u' O0 t$ _
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    3 _: k) b+ ]' u7 B4 E

  168. $ o" f# C/ w  C. ~  w( ~0 X
  169.    return (angle) ;! s/ v5 P7 q; v

  170. 6 V5 L" H: D. e% O9 D5 j6 k- o' `
  171. }
复制代码
" P2 a9 Z* Q: Z5 K, }7 N- K# ^
以下为摇篮5轴计算过程代码
2 A9 W8 a1 T, q; k8 Q) `8 r
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    - b2 b" `" ^  |
  2. 9 k; m, Y4 D( |7 Q" q; b* G
  3.          j=0.; B1=0.; B0=0.;
    : h$ {; F: z* z7 m3 v

  4. " |- o& N( y$ \/ c7 l6 g: G/ l
  5.           if (EQ_is_ge(i,0.)) {% q( S# x% ?, x! U

  6.   t. ]) P7 d+ _8 J9 o4 J( ~3 n. F+ \
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }$ q  b) t# d* E, L2 Z) B+ M

  8. 8 J& `" b0 g; G1 M  {
  9.           }
    . a9 o; R4 }# F$ }" R( C

  10. 9 P6 q/ V4 m/ Y6 U. K  l+ y
  11.           if (EQ_is_lt(i,0.)) {: Q4 ^% o1 r6 x& g( a  S; d

  12. . L1 s6 h1 q, o( T* M# [
  13.              if (EQ_is_lt(k,0.)) {
    ) \# V7 P9 O" U/ m1 x
  14. ! e/ U8 i3 B( t7 w! N
  15.                 B0=atan(i/k); B1=B0+PI ;
    8 |# c2 p1 U' i% W% e6 ?6 }
  16. ' w6 k( S6 N2 u+ z5 @* @, g
  17.              } else {
    & B8 [* `2 u; Q. J% h* N

  18. + _$ K; s! F' U0 x) n9 h
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    * r- c$ C) v  {8 E& Z: n
  20. ) A& m3 `7 v& R: C9 K
  21.               B1=2.*PI+B0 ;
    + X+ v- B5 A0 B5 Z( H: p+ O6 ~
  22. # v- Z$ \7 E7 c' g4 G
  23.              }
    * f0 c2 J/ ^2 {) ?4 Q

  24. - f! b' E0 G; y' w: o, ?
  25.           }+ O1 n2 B4 u& [  G8 f

  26. 5 g7 f7 b! I: |# k- [7 @' _+ J
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    , b+ b/ x6 h7 L. x2 Z9 m  f! Y

  28. : U4 V& J; ~3 f' x7 `
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    6 `+ R" i/ y  R* _% ~& [2 d

  30. % N# i* t  ?4 r/ J. b9 t7 j6 S% j
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    . z4 u+ P0 ^. C7 i4 w: L6 l3 y

  32. ! A- x3 z5 v8 ^4 U; ~
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
5 _+ F' |8 N. l5 j# c# O
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。$ `5 Q6 h( N* m

" \: Y- [3 x( s 640.png ! v: `# n5 k/ R  m7 b5 u3 Q
测试结果:
4 Z, S# A1 w# R) g" c 6420.png
+ j6 f/ I: }" G& T8 b0 U) u: H
7 |, u, z9 b6 f8 d# T4 e2 `7 ]反向测试结果 6410.png 6 d8 K# n; I; J4 a2 Y

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

231

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-4-27 01:24 , Processed in 0.517019 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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