找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6518|回复: 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);, M1 L" _' \) q! e! V
  2. int  EQ_is_ge (double s, double t);6 |9 d3 J+ O: J# v7 w* z9 C
  3. int  EQ_is_gt (double s, double t);
    . J* K9 a5 g0 {7 l* ~* Y6 e6 `5 T
  4. int  EQ_is_le (double s, double t);' V" ]( s! r* F
  5. int  EQ_is_lt (double s, double t);
    " q6 d7 x2 m/ E3 e" W5 x  ^
  6. int  EQ_is_zero (double s);
    ) |  ^. n$ J2 K' `' ^3 g
  7. //=============================================================% b' E0 [/ S  W! j& x) y9 w/ p
  8. double ARCTAN1 (double y, double x );& _9 t5 N% q* _- }8 R2 p4 L
  9. //#=============================================================
    6 e$ B& A& m. V9 c$ J3 W8 P
  10. double ARCTAN2 (double y, double x );
    5 a7 n/ ^- t) o  s9 M
  11. //#=============================================================/ \; `  Z: n6 }; R* v& c
  12. double CheckConst ( double angle, double constvar  );
    0 _% D- H( [: `+ h! W5 P
  13. //#=============================================================
    3 C& @. p8 w7 ]3 W; e& W2 l
  14. double Check360 ( double angle );
    + C; Z. n+ ^5 U& ^$ S
  15. //#=============================================================8 X. z! C6 {3 Q" e
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );6 E- G5 f4 Y: H2 \1 P, _/ |3 J
  17. //#=============================================================
复制代码

; Q9 w9 F% p; n  @9 j以下为部分源代码,用于判断,计算角度等/ A' i0 {0 m7 y9 M& K) X; o
  1. int  EQ_is_equal (double s, double t); \! x! g7 U  H5 p- ?

  2. - k0 q8 L" ?, K$ u- a/ g& ~9 M
  3. {
      V+ j( L% y# X* h5 R+ z8 O

  4. 2 G# W5 m. E. T/ P5 A
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    3 \$ g: ^5 k* r) T5 W. X* c3 E8 [

  6. 2 k5 h% J# J% Q+ ]( |
  7. }5 v9 W+ [: }$ c0 @
  8. 8 M9 _& S: I% g. j
  9. /***********************************************************************/& D- K' D; Y+ x
  10. / K4 A- B: q% D4 t' A: Y% p4 ^
  11. int  EQ_is_ge (double s, double t)8 ]) I3 _$ ^1 X0 b5 ?* U

  12. ; Z( Y+ Y' Y# S: z
  13. {
    ) B6 U/ ^1 I2 D
  14. " N  D) P* \: y' c4 j) {; E" k: c
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    % ?( m% Z+ Z5 X7 g( j( ^

  16. 4 `5 A  e# e+ H
  17. }+ ?- W# l0 W& k+ W' g; L8 t
  18. , `$ Z3 E; Z3 Y1 |  ~4 [
  19. /***********************************************************************/2 B" n5 ^2 t1 }! m& ^8 O9 o6 o- F

  20. & Q# d$ c* L1 q1 c" x. B
  21. int  EQ_is_gt (double s, double t)
    ) g% {" Z  a1 b5 v- j0 o$ G: {; Q
  22. * w. j6 x! R0 v: i2 j) O% Y
  23. {* l, b( ?2 R6 P0 ^
  24. 7 V- z" C* J! v' ?
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }! r! X( p6 z- D# t/ _

  26. ; @* u1 p: A) ]) T+ w
  27. }
    ' D; v. @& z4 W/ a& J) ]  G
  28. ( r) w6 f3 K6 W) M
  29. /***********************************************************************/
    5 m3 y9 v4 B6 A- D( I
  30. : g1 W: n! A, e" ]; t. X
  31. int  EQ_is_le (double s, double t)8 n) P) U; x: ]- L  h" f

  32. + B2 f$ L1 \1 T! H
  33. {! B6 |4 l* m6 ?9 ]- J0 T4 K& n
  34. 5 T( F% x: d; s& h, [: x
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    4 w9 i! g' R, u! X0 [
  36. 9 @: F; R# g. k5 o% J; y' z* g
  37. }- x/ ]+ r+ e) g: X( f

  38. - E) z3 F5 g/ P9 F
  39. /***********************************************************************/
    ( X" P$ B! X' J: h0 R5 w% F: ^
  40. 7 h) l$ o& r0 W1 q+ e) X) `
  41. int  EQ_is_lt (double s, double t)
    . |( l& H; l" Q$ @

  42. " |. p/ v1 @: {
  43. {
    1 F$ R2 M( |- K( f

  44. 4 Q) W, Y" X( t- {9 I  S
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    % p; E: P9 ~/ X5 s

  46. 2 o. b* g; N) m2 r3 a/ _& @- _
  47. }
    . P7 h" K3 K: k5 F5 H
  48. ; y8 z3 o, q0 f+ u
  49. /***********************************************************************/
    8 _. M+ f9 c5 Y2 Q: o  q; v$ ~! _

  50. ! X& V* l$ V' B
  51. int  EQ_is_zero (double s)
    / ?% |. X2 H, S7 ^
  52. 9 T6 p7 I8 Y! Z) i/ n" n8 p
  53. {
    , r$ G9 D  i2 U+ X8 _

  54. 9 w1 K+ y& U6 V& V) @5 k* a: }# i
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }9 v; t4 _# {9 L, D7 i5 z
  56. 4 [! T) v& S; m! J
  57. }
    8 V* ], Z4 x; Q  V
  58. 7 c- n2 X" [# v' K' H
  59. //=============================================================
    % ^7 E% [3 h% t+ e/ O
  60. 8 V' u, d' Z  d# S$ P2 M
  61. double ARCTAN1 (double y, double x )
    ) E7 u( t, [& j8 {
  62. / f" B& \( z6 H0 i/ v/ V0 ?
  63. //#=============================================================5 \$ F3 }3 ]; r9 g
  64. * o4 V- [0 L4 m1 m2 Q
  65. {+ z2 D6 X1 y/ T. r
  66. 6 ^# @5 N2 t' `: j7 Q9 I
  67.    double ang;
    0 E: e# b  P% _! Z2 g. n) D9 M) T1 N
  68. / G. l# R& w4 [' ^
  69.    if (EQ_is_zero(y)) { y=0; }
    ( q/ h# e! i1 M& r' x4 N
  70. 6 W5 W" b; n# R
  71.    if (EQ_is_zero(x)) { x=0; }' }4 b! W( M1 R  q. d  U( ~

  72. 0 c& X- e+ Q% ?
  73.    if (y == 0 && x == 0) { return(0); }/ y0 k8 u! Y: l0 {& q
  74. 5 c& \" N) p, d$ G
  75.    ang=atan2(y,x);
    8 q4 z& B/ b3 C9 j7 W" d$ t

  76. ( T' K, c. t, M0 T- B5 q+ E
  77.    if (ang < 0 ) {
    ' _4 ~7 ~! G4 ~4 A
  78. ' Q# y3 S+ r( g
  79.       return(ang + PI*2);
    # p# V. J( w9 L9 T. p% u( s
  80. ' U4 e: e1 [- G. A
  81.    }$ y1 y. L. d( F: w  l  R
  82. 9 q' y! v7 K: |5 L2 d: g/ y* }2 W7 @
  83.    return(ang);' P* \: T( `/ q$ D1 D

  84. 1 Y3 D# [2 V4 V( [0 y
  85. }
    + G0 H; n- |9 o. @  |
  86. ( a* ~! n- ]% ~% T
  87. //#=============================================================& E# E: Y% Z$ R% L" _' w

  88. : j9 j& L9 i2 t/ U9 C/ V, H
  89. double ARCTAN2 (double y, double x )0 e" L7 k4 `3 C- G+ n, E9 z
  90. . E: K! R- Y! n
  91. //#=============================================================
    ) U, g  v" ]1 ~2 p

  92. ) d* l2 T/ C: B2 W. E- E
  93. {
    + E: [8 ?. U$ I  {3 M/ z) x
  94. % |% w9 k" Z$ J7 ?7 i
  95.    double ang;
    7 P9 Z0 X$ m* s

  96.   d8 {" Q6 ]1 D6 _( v
  97.    if (EQ_is_zero(y)) {- v5 d3 ^- D8 c

  98. : D, w2 u' C; O$ L8 @
  99.       if (x < 0.0) { return (PI); }2 k3 U" M+ {, o7 Z* t  N
  100. $ s5 E1 R0 Y/ B; c, {
  101.       return (0.0);6 r0 @' a) W! ^( ^2 i; t
  102. ) r; q/ w* E% B) w' D8 H( i- m0 V
  103.    }
    4 q2 y( z, _) C8 K0 E2 ~

  104. ) R. d* r1 E" R: `
  105.    if (EQ_is_zero(x)) {* J* S: i* S- w2 r2 u
  106. 3 V; f/ U" U8 o3 p3 _. M  ?; p1 y* e: W
  107.       if (y < 0.0) { return(PI*1.5); }" E4 ], c' b/ l) Y/ h

  108. 4 u4 d6 e5 {5 Z+ P+ x+ f# ?  c
  109.       return(PI*.5);
    8 @, b2 c! }2 R9 I  g% S- o& ~

  110. . J) J  ^) O/ t2 N$ j& Y5 G! {
  111.    }7 M0 @( |/ l# f: S$ z

  112. * r7 p) K$ a6 }$ n9 T' I" v
  113.    ang=atan(y/x);
    % f0 z8 ?9 z2 R, q6 j' z
  114. / `! }; B  l4 \
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ) F7 [& @6 E, r

  116. * R' L' [. D! @  X8 S& R8 |' I
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }: R* C$ V9 p) L. m

  118. % x* e# G7 g. q
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }* n9 ^9 Q  k" e/ |% e+ p( m# J

  120. / g  t/ z- _8 H& g* I7 C
  121.    return(ang);
    & Z4 Z$ I! p! ^' x

  122. ) y' w$ x: F8 [, V
  123. }
    6 o  L5 O" P0 |

  124. 4 s! t' {9 M7 i  _
  125. //#=============================================================
    8 V5 [# C0 T8 B# u. X/ c
  126. + q7 f8 P% J: P/ |# E" _" \
  127. double CheckConst ( double angle, double constvar  )
    , @! P$ f  Y( \$ o

  128. / I4 w8 P8 u/ K9 J/ k5 @
  129. //#=============================================================
    $ |: ]. `& r" L" z, l- t5 P

  130. ; V8 S: h6 |9 d7 _
  131. {" y& u, f. x7 f+ u

  132. / o7 i* m' q4 |5 ?+ y# d  L
  133.    while (angle < -constvar) { angle+=constvar ; }7 ]0 o9 v% W: @1 J5 x
  134. % _& y5 B& ~) B2 u/ H
  135.    while (angle >= constvar) { angle-=constvar ; }" w+ |2 |6 m9 D4 M2 b" e
  136. . c' w; g) O, P4 a# s
  137.    return (angle) ;, s. B6 Y0 q1 V- s$ J% w8 ]0 h" ^
  138. 9 i) J4 K0 ?# C' U
  139. }
    3 z2 B& S  `, p

  140. ) P! o1 h9 O3 Y, C+ Y, |
  141. //#=============================================================# h/ p- g% s: e  O0 Z! v
  142. 0 b7 h6 B0 b* [$ x/ V
  143. double Check360 ( double angle )
    : c/ v) C9 n/ ]6 Z% t. G
  144. 8 @: t9 j- J: j6 m& w0 `( e2 g
  145. //#=============================================================
    & i1 k$ v$ k$ }3 N" S/ r, f; T7 R
  146. 1 L3 e5 |+ a/ \$ M
  147. {
    , e: _! H5 U3 m. W
  148. ! u- N& E+ Q, q$ ~3 N
  149.    while (angle < -360.) { angle+=360. ; }. Y4 |, }' o7 ]  a9 X! L

  150. 4 b! r' l0 f+ A3 `  [6 G2 \
  151.    while (angle >= 360.) { angle-=360. ; }
    8 P6 y4 n1 |% M+ e& C- f* k
  152. ) a: @2 Z4 H8 d# S9 q6 H  A
  153.    return (angle) ;* }: b2 j8 ]9 u+ r
  154.   E: I% K& P+ f5 ]
  155. }- s$ N: e+ T5 l5 |. U) ]
  156. ( w$ U; p8 ~& W4 l4 ]/ h) k8 Q3 G
  157. //#=============================================================
    # G* X9 c# {7 x6 C0 F

  158. 8 W1 _9 M; [- t2 h6 f4 P! i
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )  U" \$ e* }. ]/ J) a9 A/ N

  160. 3 e. I( i- V/ M
  161. //#=============================================================
    " j7 s& Y" T1 s5 R% }' p7 R3 T9 b: f

  162. + [# {9 h1 X+ G; @
  163. {
    8 Q4 [0 x5 E1 E" ]3 a) d( t9 t
  164. ! Z7 ?5 D1 R" l& t8 L3 T
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    / Y0 L3 L  ?: B8 S" p- a4 @

  166. $ K' [# E) S- e& S# ^  p
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }7 j( m% k5 K: t; y% j  N3 {
  168. % m' _, o# O- s- {. v$ K
  169.    return (angle) ;
    ) ]7 Z) N* d, |/ z. P1 q  j4 Z8 E
  170. 8 m: M9 U8 j- t9 v
  171. }
复制代码
3 J5 @3 g6 I- _
以下为摇篮5轴计算过程代码2 G5 v# k! ?! Q+ _1 i9 |$ m
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);# r) k% Q* a2 L2 A" N* I. T* `

  2. ) Z, K- W0 g; i
  3.          j=0.; B1=0.; B0=0.;
    3 w" w# R# M4 A; u
  4. : I5 G/ h/ U9 P7 F2 r7 w2 G
  5.           if (EQ_is_ge(i,0.)) {2 m; `6 P! s7 N0 P: @* L. H
  6. ' e& }/ D+ ?: l0 B
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    1 J2 v2 Q& u" ~. d, [# {3 }& K5 u

  8. 9 p" y$ r4 W2 ~# }
  9.           }
    / W& s2 o9 n. P( n% Y2 L4 U0 r5 m

  10. / G3 ~/ t0 x6 k4 g/ O$ h6 y
  11.           if (EQ_is_lt(i,0.)) {
    : p3 b/ }- i* e1 w

  12.   ?) @' y& h: ^) ^" z7 c
  13.              if (EQ_is_lt(k,0.)) {$ ^. @4 n7 o( ?% f, U, G

  14. % h0 L; S8 H2 _
  15.                 B0=atan(i/k); B1=B0+PI ;
    " Y, \0 O# o9 g) ~+ |
  16. 8 u- P6 Y7 |" o
  17.              } else {. Z& r- b4 D! m8 |

  18. + ]4 X, |% _- @
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }$ w" X- n0 t3 J1 L* U7 c

  20. % J( Y  C7 ?4 ^" B1 r
  21.               B1=2.*PI+B0 ;/ I+ g) `* d+ b: G: |
  22. 7 }% I" z, l: X& m1 w. ?/ {
  23.              }
    6 G5 B; z$ J( X1 ^3 o5 I3 Q% U

  24. 0 v5 G2 J: ~6 S) z
  25.           }1 D: I0 @0 t. Y6 L$ {

  26. % K) S% q' z" J- q. o
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ; o4 N, C1 b9 E
  28. / D  N7 |9 G4 k# p' L7 A
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    5 X7 R* e9 J6 |+ g5 P

  30. . l( z" p, c1 x! t$ ?! C
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;6 E1 x/ A4 K. s1 Q% z) o/ H5 c

  32. # {$ w$ t' Y8 s9 P
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

% ?; O5 ]1 I5 F- F; H3 @通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。7 b2 z# k* J# w- B" b6 _3 E6 M

9 d0 [1 `" ?! c9 i5 w! a- \ 640.png : N, e- }- r) M+ O; @2 h5 ~
测试结果:
- V4 {& ^' U3 C: c8 f 6420.png
4 H' K# J8 q- H. m; L
' z9 ^$ h  |9 _; k/ X反向测试结果 6410.png 0 D9 e# N7 i+ e% |

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

188

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-3 21:37 , Processed in 2.390451 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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