找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7974|回复: 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 n+ L& c9 x2 M
  2. int  EQ_is_ge (double s, double t);4 {! u  _$ \: v9 |: v) T( ^' u
  3. int  EQ_is_gt (double s, double t);: _' ?  B, m6 c- c5 x
  4. int  EQ_is_le (double s, double t);$ D3 M: V5 }" S8 C- ?
  5. int  EQ_is_lt (double s, double t);
    ) f* B1 h+ l! ?3 k
  6. int  EQ_is_zero (double s);
    & v% N8 ~4 k- X! \' e; k* n
  7. //=============================================================
    8 S2 y4 O7 [6 T; ?
  8. double ARCTAN1 (double y, double x );, `* g/ B7 y5 z& P9 q' P
  9. //#=============================================================
    6 O( |  M; s; l* L3 H5 Q
  10. double ARCTAN2 (double y, double x );
    & ~' r/ N+ I$ n" C% n, [  {
  11. //#=============================================================" I; A$ ~; z6 u# O; J! Y
  12. double CheckConst ( double angle, double constvar  );& F1 T2 Y$ \4 b
  13. //#=============================================================
    ( y1 `6 F: O7 {2 N3 g- g
  14. double Check360 ( double angle );& B2 d$ T/ Q, Z
  15. //#=============================================================" @" R, c) q+ l! e$ J) J
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );( e; n: {( q) |' E- a4 }  \- L) |
  17. //#=============================================================
复制代码

! D" u5 H; }8 @) K8 Z+ K5 b以下为部分源代码,用于判断,计算角度等) c4 q: x* m, m7 O/ M
  1. int  EQ_is_equal (double s, double t)
    5 s1 D4 ?8 o2 v8 E1 X; Q
  2. 6 l& t6 P0 Y) m* `9 e* Z
  3. {0 |- k  B2 h' A9 @+ U4 U6 t

  4. 3 C2 d4 b/ J' q6 l& y
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    & j6 L: H* k" k6 e2 H) A

  6. 3 m5 d. m4 [0 |
  7. }" O4 M3 h' ~9 G! a* v$ I
  8. . l0 `2 o/ w- q3 H' z4 u3 ]9 ]/ A0 b
  9. /***********************************************************************/
    $ _+ p; j: v, v% E& t3 U) I

  10. ) E9 }3 t- O9 B  E
  11. int  EQ_is_ge (double s, double t): \  a$ X5 X* x1 h2 u. O/ `

  12. % Q. i' _& c5 J, ^; S9 M( I* L
  13. {
    5 R1 t' R* Y# {3 O/ u

  14. ' ]+ H6 \9 V, {
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    5 W/ j1 Y9 c/ R- ]" p
  16. 7 F! X0 A8 h' _! \& G
  17. }
    5 g' G" B3 C. {$ ]" A6 ?/ s

  18. " D4 h. Q. b% f2 r
  19. /***********************************************************************/) l, O+ _" g4 q1 Z
  20. 9 ], S  _! f* v2 ?
  21. int  EQ_is_gt (double s, double t)6 E! y6 j8 e! ~% y1 }# P1 A

  22. " P" \7 v2 O8 z7 V) b
  23. {$ y7 V7 k/ C9 z2 C6 ]7 z. V+ a

  24. ( t/ N6 D% R. d% c* X; I, ~
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    6 `) w! c; P: k2 a: ?7 N
  26. $ e" ^* J! R+ y
  27. }
    , }5 L# S- N$ U
  28. 0 Q, z8 j* a, a, ^+ c; k
  29. /***********************************************************************/2 y5 B# c! M% s- x+ H7 F

  30. 4 i9 M5 ]6 U5 A1 W
  31. int  EQ_is_le (double s, double t)
    % \7 i7 y' B/ D) s' m0 K& s
  32.   ~% v- x) F3 H5 b
  33. {
    4 v9 C3 Y7 {# _8 F. r

  34. - {1 Q% Y, O% x" I0 P. l' j
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    " D8 L3 g6 g0 j, R) i- S! v
  36. $ ]+ J: ^7 c) S
  37. }
    $ w3 k( y9 F) o+ N% q6 F
  38. 1 A9 X( Y) K: [1 ], T9 B  y
  39. /***********************************************************************/" }# l  j. N8 C+ t- C3 ^

  40. - H- b0 l( X+ z6 O  E
  41. int  EQ_is_lt (double s, double t)
      p* S& C9 p& K+ e0 @( x6 r+ [

  42. ! A: `- ~+ \# x
  43. {4 @' E# h8 n+ w& G5 N5 p9 l# k

  44. ) l0 O& A% q4 B4 J) i7 Z+ k
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }8 S6 x7 u4 ]: S  O8 H4 _1 {
  46. 7 E8 x  H, l4 t' B7 ~
  47. }: {) q+ t* p* S; p! {

  48. $ P$ d4 n& c8 b
  49. /***********************************************************************/3 Z1 R1 S6 G8 C* V+ S
  50. ) k; K# d5 x% W
  51. int  EQ_is_zero (double s)
    . ~3 c- @; z& U+ ?1 C

  52. ! Z. s9 W" {9 n' w$ m: V4 a3 ]
  53. {, _% I  t8 k' s7 \" P' ~, N
  54. 7 l& y0 m! `1 i4 s
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }' c1 @" F4 j( {4 c' H( T; I

  56. . C+ i/ x; e9 n; Q) P6 T0 j) ~  M) D
  57. }  d9 y! Q7 M9 t: e+ k1 x

  58. # W9 b8 A5 k6 b6 `: n" x  u9 l
  59. //=============================================================% L# Z. r" ^! H. C6 F
  60.   t& i2 W9 _+ q. C( d" s$ g" ^
  61. double ARCTAN1 (double y, double x )% K! P6 @# [" \, b8 W9 C- N( ]

  62. " p& {4 ~6 r$ w: Z  V. R& ?
  63. //#=============================================================
    9 y: [: U( P4 S; K  S$ h' {
  64. ) @9 v" u+ Z  y  b1 V2 z, R' x0 D
  65. {
    ; f2 M6 T+ H! F1 h, f
  66. # N6 @7 D/ ]' P6 W  ^7 c2 A
  67.    double ang;
    % d  e0 d- J* Q8 h; I4 N

  68. 2 I1 d- C( x+ x4 `- k7 r
  69.    if (EQ_is_zero(y)) { y=0; }
    % }$ y2 H+ y: j; b! H

  70. 1 M5 @# K6 z- f; f; r* i
  71.    if (EQ_is_zero(x)) { x=0; }
    ( J/ A/ k! p0 d" s) V! e# l

  72. $ X& d  Q8 s. y. H% C5 A
  73.    if (y == 0 && x == 0) { return(0); }, M4 l( ?. L* f9 t: X
  74. % _/ k) [& {- j$ S5 }. x* _
  75.    ang=atan2(y,x);5 a! t0 C, L2 N  l! \7 I2 _9 t, M, d
  76. ; a( o" c/ d. P5 X, R
  77.    if (ang < 0 ) {! ~& H8 u( Q8 f  M; \( o

  78. 7 q0 s6 V7 s1 j$ L
  79.       return(ang + PI*2);
    ' j* ]5 L9 }9 l$ K$ b/ T

  80. 5 |" y. z0 I/ S7 A5 D5 j
  81.    }6 j4 f! Y& Y/ f

  82. . U, e- M! i7 A! W7 U0 D
  83.    return(ang);; B1 c" L1 T! W. o

  84. # f) S. u% B# |) R$ Z6 r
  85. }
    7 Y9 ^/ U9 n% p+ Z' G1 o

  86. 7 Y+ m( x, ~8 F
  87. //#=============================================================7 B/ C  W  w  @  s- j: A
  88. % R: G. S& A& {8 p
  89. double ARCTAN2 (double y, double x )
    6 a  V( y* s7 @

  90. 0 D5 c; W- D/ K7 v
  91. //#=============================================================
    # t+ x1 L6 Z) c% R
  92. ) j2 x  S( B, m9 y& A3 K  i: k
  93. {) H& Y+ K6 y0 a+ u& x( O, n

  94. 7 _8 {  o9 y6 @- {1 J
  95.    double ang;9 y. `4 u; w; W/ a: S3 T' A
  96. 1 b7 g: [+ _1 s7 e( r
  97.    if (EQ_is_zero(y)) {! e$ A! M. r' y/ m% |! P! K
  98. * I6 D. B/ M1 W7 W! c
  99.       if (x < 0.0) { return (PI); }+ `& K* q9 Y5 h- r) Y5 P- [$ r1 H  H: v
  100. ) @4 {% [) Z7 c3 T
  101.       return (0.0);
      m0 }4 i) k6 E- Y0 V

  102. " t. ?' q9 S: c+ Z: q
  103.    }+ b, \5 \* y3 E" Z3 F4 o9 u! C

  104. : f2 ]9 N9 u' z0 E8 ~1 ]/ B) U( E
  105.    if (EQ_is_zero(x)) {- l7 f# X/ x* ?

  106. ; j7 w6 W, ]6 T5 J  h- U
  107.       if (y < 0.0) { return(PI*1.5); }
    8 m( L$ G% h! B+ D; e: Q
  108. : J0 u* i* l% [) o( T
  109.       return(PI*.5);
    6 K& E3 K2 b* O8 \- R4 P1 [
  110. ; Y5 H, f4 i& F% P: t; |, c
  111.    }# I9 H& c( P+ T4 l$ a- B8 p' }9 F

  112. # y' A' j  ?$ y/ D
  113.    ang=atan(y/x);
    0 M( t, Z- q9 m/ P1 h

  114. ) z/ K: k: e& M' t
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ( v1 z# b1 [5 b: Q
  116.   X" C2 Z% m2 p
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }" F$ R  w2 }( ?' w5 J

  118. ; B% {- H6 O" _1 {: A8 |
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ! |8 f. n, O. e

  120. ! u3 j' {+ y' X3 T% U9 b
  121.    return(ang);
      g" F* L' u& k' R& G  s( R! ^

  122. & g. M# S% R4 P9 t4 ~
  123. }
    6 V) t4 @! J5 l- ]& ~) Z1 o  Y
  124. : M# V2 K7 |& `& \# C
  125. //#=============================================================6 v  R) ]" ~/ V7 {' Q, E

  126. ! Z% @( r0 V* ~
  127. double CheckConst ( double angle, double constvar  )4 S: n# M6 w- L' F& ~
  128. / \- W. @# k  O( g3 \: W: v$ p
  129. //#=============================================================
    0 N. f! F& Q! ?# G1 M

  130. 2 k( `! R4 @) ~
  131. {
    " }9 r2 l5 i5 _: c+ o% H. j- a! U

  132. 4 C0 v) _, h5 L' U( k& Z
  133.    while (angle < -constvar) { angle+=constvar ; }) n5 r1 p) g( l+ L- W$ R5 n
  134. ! i8 J3 P6 D6 N) {$ [" W) y
  135.    while (angle >= constvar) { angle-=constvar ; }
    $ \4 r8 B( U( y2 b8 e, B
  136. # N7 k, |# Z, j& X
  137.    return (angle) ;5 r6 o3 B/ q+ s" u* @
  138. ! O: r. H- z8 y  N% w, H0 @
  139. }  X- t& [$ J8 U
  140. . I9 b+ H. [4 Z3 b: o) T
  141. //#=============================================================
    ) g; u6 b% r0 {1 W' r
  142. * j" U9 s7 Z7 g% U3 m  e; r
  143. double Check360 ( double angle )
    7 ~6 B, v4 k; v) A8 Q+ f. Q% B
  144. . R) ^, y% \9 a' S% A
  145. //#=============================================================* I' o1 X& I& K9 J; G
  146. " @8 z% b% M. f+ K2 E5 V6 D
  147. {: }% {! O2 o+ a6 {; d
  148. 6 u- \& h7 D7 R5 v3 g; H2 x* |
  149.    while (angle < -360.) { angle+=360. ; }) |7 ^! P. Q! F( a( @

  150.   F1 t" p; k- F" h) D2 N4 h
  151.    while (angle >= 360.) { angle-=360. ; }) G7 N3 r2 C3 f- \0 {

  152. ' U. x* ~$ R0 ]6 o7 e! L. F2 @
  153.    return (angle) ;' ^/ X4 ]- a, ?3 X4 x
  154. + A) U4 j& S% Y3 a( z1 ~( K( f
  155. }
    9 S* e% h' i; y" ]) u/ U
  156. $ z' P% P0 _' r! b  ]
  157. //#=============================================================2 e5 k6 _/ {4 w# E. q

  158. " S0 g# u' o: j, v  Y
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )5 ~* Q% J, B1 b( {. {* ?, ]# Q
  160. : ?3 K  @& S$ p' ^# M2 E4 J
  161. //#=============================================================
    $ ^, e) u6 G$ I9 t; X# {0 v, v& u; {
  162. 2 G7 \' O, `) x3 f6 z
  163. {
    3 t: c+ k) U- [& S- h
  164. 8 W4 }+ S$ D6 ]+ `
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    8 S. B% V9 f) e7 \2 B. e
  166. : N* L: \; n. u) B
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }5 o: U- n; k% s+ g* n

  168. 3 N* S4 m* R- w/ V. v
  169.    return (angle) ;
    2 H$ D; w; L! I+ k* s2 s

  170. ' _, B# G! m' R9 p
  171. }
复制代码

7 {: [8 f  u% U' g以下为摇篮5轴计算过程代码9 Q2 {# V2 g1 ~- p4 ?5 h
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    / `6 n9 L- o* F' Y, q0 M
  2. 4 u# D1 ]; s+ o- f" P9 N7 N
  3.          j=0.; B1=0.; B0=0.;
    , l( j7 u0 s, T; O8 Q

  4.   B# ]( q+ u4 ~% w0 v7 d- ?
  5.           if (EQ_is_ge(i,0.)) {! r. t4 a* c9 Q3 ~7 i  _

  6. ( [- W" W5 E5 k: G0 l
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    8 h% r) i) s2 a" [% N
  8. " n9 s) e; g5 U. x! F
  9.           }9 d- q' d- v" c6 h' P
  10. ; s; `5 x7 C/ S0 l& o2 ]
  11.           if (EQ_is_lt(i,0.)) {
    : J% m$ c2 V/ Y1 E7 y

  12. 2 d9 U9 b* H* B+ ?5 X. G
  13.              if (EQ_is_lt(k,0.)) {0 g3 a- L& v. y( C9 K' ~; Y
  14. ( g( ~% B$ R# W2 f. I
  15.                 B0=atan(i/k); B1=B0+PI ;& }1 e4 A4 Q: o6 v7 \

  16. 5 j. w9 {( |3 M/ `- V3 q6 q
  17.              } else {3 s* ?3 s7 N1 F% I7 ?
  18. $ Y  d5 V* @9 F# G3 Y( q7 D
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }5 y  ]" j5 d. W

  20. / C: J* j# v" r0 v9 w
  21.               B1=2.*PI+B0 ;7 `6 O# z! L' Q  m

  22. 7 Z: A& H9 c9 u! M1 \
  23.              }' _7 T; \. ?% F' @6 F. j% u

  24. : o/ k; D' n# V6 S9 p$ o
  25.           }% ~9 I. [2 j& G  i2 b( J, m

  26. ; X- ^1 _9 }6 C7 x1 u$ h2 S
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ; H0 D' Y, D. W" a4 I( ^
  28. 7 N+ h2 y! ]- f, C3 C) {
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    6 H% x9 i8 a2 h) P! p( C: S

  30. , h3 {/ O/ f# @) z6 G
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;+ h9 V& `4 O. ]

  32. / s. F, y2 E+ H! U8 r% b/ S/ u$ k
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

, W) o. {9 L2 J/ m通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。; }3 S2 W$ H: }# A6 H+ o
' T  V9 [2 e. ~
640.png ' ^: `# _6 L1 D! ?/ n: \
测试结果:
7 w1 m$ b3 x, F4 d4 w 6420.png
+ h( s1 {! C5 s. u' w; n
3 F, T" _+ r- h" j3 [1 T; s反向测试结果 6410.png 3 ^+ f4 ^3 u' T! [/ @) Q0 Z7 I* j

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

270

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-20 04:28 , Processed in 0.448387 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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