找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8036|回复: 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);- \, O, q8 H' y3 A
  2. int  EQ_is_ge (double s, double t);) V' d/ {/ }/ v: B  t
  3. int  EQ_is_gt (double s, double t);
    1 `3 N" f8 n; i' C
  4. int  EQ_is_le (double s, double t);6 G& P1 C- z0 Y0 z! D4 D. h
  5. int  EQ_is_lt (double s, double t);
    5 Q* V; }& h1 F2 H' G) e
  6. int  EQ_is_zero (double s);8 @% c9 Y' x9 T" k) j+ ?7 R* T2 m8 ]
  7. //=============================================================9 c1 j% y! F. G9 D& ?
  8. double ARCTAN1 (double y, double x );
    $ ], G5 r. [  [# z7 m, u
  9. //#=============================================================; r0 Y2 Z2 _8 p9 m( n; _6 o
  10. double ARCTAN2 (double y, double x );, g5 }1 L: D1 T6 o
  11. //#=============================================================
    2 f# `' D  e7 J4 a% Y0 \
  12. double CheckConst ( double angle, double constvar  );
    : D  _6 {2 n1 \4 I% v
  13. //#=============================================================
    * _; I! V8 G& `: w- A
  14. double Check360 ( double angle );
    " j9 n9 P. ^# I
  15. //#=============================================================
    ) x  f7 [# w7 m) Q
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    , ?( L8 _3 {9 U7 n
  17. //#=============================================================
复制代码

7 u1 Q" U* `! J8 ^; h以下为部分源代码,用于判断,计算角度等% l( m6 Z% j& G
  1. int  EQ_is_equal (double s, double t)( q7 Z; a; g3 S* j* v
  2. 5 [3 d: p4 s  s8 q& m
  3. {! l$ x' O, w0 J8 Q* Z

  4. ; j' m$ |7 s$ A9 V
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }- S& P. i. E  Z$ M
  6. : b; w" q* a6 D& i+ Y% h2 h9 f5 ~2 [- ?
  7. }
    " j  R7 v  m3 d; {5 S

  8. 8 ~# p$ }; ?* r
  9. /***********************************************************************/
    % ?/ F! S* a* Z, j! L

  10. + Z0 g! z* l; v( y5 G6 j! ~
  11. int  EQ_is_ge (double s, double t)
    ! j6 T( Q4 A/ S" Z2 |( n  c
  12. % c* g0 N3 B2 T" ?  j6 v
  13. {% U2 P) q  d. d

  14. ) T( |" @% x! A# ^
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    $ s6 V4 u9 N* A% q; e2 C. X- C
  16. 4 j0 M( J& e/ n8 C0 |  ?
  17. }
    + A6 c2 ^! j# s( Q) S) I9 a
  18. / i: [4 W9 v0 {- c1 d: C
  19. /***********************************************************************/
    : `% o0 M. O: n8 l- ]& W6 l% H

  20. ' @2 |  c! g2 t$ n
  21. int  EQ_is_gt (double s, double t)& m4 p1 \6 E% C1 |+ E8 ^& T- ]
  22. 2 u6 _" n' C/ ^8 k% q
  23. {" H3 y. F! p; d( g% s

  24. 6 ~; `8 r# i" @
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }9 L! G6 T( B2 \" |/ D# J, P
  26. + H, l( _% x  g/ C8 p: f* O
  27. }$ Q5 u! X+ O8 N9 ]+ ?. S. p6 F
  28. ; k+ C8 h) V! ?4 a# d
  29. /***********************************************************************/0 l! d% b, i. l/ ^) U+ H
  30. 6 j4 n- {& b5 q7 j1 F1 R" B5 i
  31. int  EQ_is_le (double s, double t)
    7 D8 C) }& l/ W- G, [" m+ F
  32. - u" u5 \5 S; a' U+ i7 k  T
  33. {
    / k- j* M% d% g) T3 y
  34. # y* e5 }% Z$ c# t/ {
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }2 ]; a1 ]9 `: ~8 z+ J' M
  36. 1 L! e; D4 ?0 J0 n
  37. }# P' F! R/ ~; I! K& B

  38. , w9 ^, A) g4 Y! W4 U1 b
  39. /***********************************************************************/) L7 w' {% a% h4 K8 o

  40. $ w- G' }& i) I
  41. int  EQ_is_lt (double s, double t)
    - I) k( _* @. s) n2 t: D' K

  42. ( u% _  J% f# Z% w
  43. {
    8 e9 H0 e, a0 p1 X& a" l# _$ z, `
  44. " {- d- `, s" s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ) n' a6 Z/ N* ?% ?( J. L. ~0 P! R
  46. 9 K# c9 d0 ]& q6 `* c
  47. }
      g+ X1 i; H6 }% l5 I
  48. 3 z; S1 c1 G0 e# }5 a
  49. /***********************************************************************/
    : U. o5 S. j: D6 N0 Y2 G
  50. / D( a- c# s* R2 U* A
  51. int  EQ_is_zero (double s)2 S9 `$ L# f& V' a: e( ~) z3 @
  52. % d* u: x) n$ |  f& y
  53. {
    & g- M0 W% [! B" b* q' K: M

  54. % U3 S0 C5 S2 i, o! F% j9 [& j
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    4 A1 b1 ^' j  v9 k% C! n6 i
  56. 0 |1 o# D; }4 w5 k, v9 l0 h( F
  57. }
    1 r( x' k1 F3 z% [2 R! `2 m- F) X

  58. 1 b1 Z" q/ a1 k. h
  59. //=============================================================
    3 }1 m' |; k: C, [) o6 m6 G

  60. 8 y( g! G# w) _) T" N
  61. double ARCTAN1 (double y, double x )
      A9 K; D1 F+ |' F. E
  62. ; w0 B" R- O- q5 U% ]: f* e
  63. //#=============================================================  U  a* p" i( g6 s
  64. 0 I8 Q( c; p' t) U
  65. {
    0 f* i7 |0 g0 X8 Q

  66.   P9 a  s8 ^/ B, L5 K* h
  67.    double ang;
    " X0 N) T" B! M3 P
  68. : a' z! e! P, m. H( h/ d
  69.    if (EQ_is_zero(y)) { y=0; }
    0 C# c, ^; \( Y/ j; T7 I' V

  70. - L! F: g$ D0 p3 d, V% n
  71.    if (EQ_is_zero(x)) { x=0; }
    , H2 n- q. b8 ^+ K2 b
  72. 0 y0 Q; g2 ^; r# ?
  73.    if (y == 0 && x == 0) { return(0); }
    : \# X: Y* m! D5 {+ Z
  74. $ ~3 C5 B( K' X( e7 ]5 C# F
  75.    ang=atan2(y,x);; s" h& O# E3 _6 k" g4 X; M# d

  76. 9 X5 z0 `+ n: D! b4 r, N4 t
  77.    if (ang < 0 ) {
    8 H+ s3 ^  S& b; M/ a6 a
  78. ; Y$ m6 ]2 P7 J) d
  79.       return(ang + PI*2);8 M3 N' G" S% x

  80. ; R5 U5 Q* y4 [/ C7 t& j
  81.    }, {4 J+ ?2 P: ?. F0 V6 X
  82. 6 K/ ?& f4 S. T- [9 ~  }! \
  83.    return(ang);
    - ~( O, F9 m: }7 d; A9 m
  84. 8 M% D* n* ~( _0 J  f5 ~& F
  85. }" `. d+ h9 G" m4 ]0 Q% \' u
  86.   f3 A# ?2 h3 h! C1 |' q4 E) p
  87. //#=============================================================
    - k4 r- H  z" Z1 O. b# Z
  88. & X: _9 j; _' _* c; Y8 i
  89. double ARCTAN2 (double y, double x )
    % G: k* v, i' W4 Q

  90. " b/ ]3 e$ {8 J7 o
  91. //#=============================================================2 b! c# v" D6 w5 E

  92. ' m- M' _0 \  K  W* r( D0 U
  93. {
    2 P4 q$ {6 F/ [/ ]

  94. * H: L, q/ U% g
  95.    double ang;
    4 |8 G9 z5 [; l3 u. V

  96. / t' k- F, q7 a! P  t3 p
  97.    if (EQ_is_zero(y)) {* J& @. j7 `) X6 }1 @# [: c' @

  98. 8 d9 b4 u& V7 N1 }  \* d
  99.       if (x < 0.0) { return (PI); }
    0 x; y' _) ]+ R0 U# F7 g

  100. : n6 I4 C' ]8 ?  g+ @; V/ X# f+ X
  101.       return (0.0);
    - W7 n/ Z" a/ d0 h7 @. f
  102. : }) r3 N+ j2 X! e
  103.    }
    + x0 f( G% q$ z/ j0 W1 [; U) y
  104. & \9 p; q( ], }3 E# w) F/ c( x' S; L
  105.    if (EQ_is_zero(x)) {
    5 m/ i& t- g/ K3 E  l; v9 O6 v
  106. # }8 {. B2 ~, O
  107.       if (y < 0.0) { return(PI*1.5); }& C1 }+ \9 ]. c2 n% i
  108. & ^, ^1 p2 m- h
  109.       return(PI*.5);1 r' Y3 \. W/ ?/ }  s4 @
  110. ! M  ?$ u3 Q( |6 L
  111.    }
    8 l" S+ B: @' \! d' l

  112. 9 }: |! o7 }4 J. l3 L1 }
  113.    ang=atan(y/x);
    9 u1 V0 g) r- T7 t( i! K* [

  114. . n0 u4 f- t0 Z2 S4 h: P, b
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    5 s* S! U9 ?+ v

  116. " s/ B" t0 F, g' A) \
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }5 e7 ^2 D; t5 i% P/ _0 o8 C
  118. + \* V( ^$ D- d, x7 v
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    * b2 l0 u$ ^% c% Q% i; x+ D
  120. * a2 o5 q+ z- w6 d1 j* s, q1 h
  121.    return(ang);
    8 Y& b  _3 {% J3 a

  122. * N1 B3 F& p# L! K5 X. u' i
  123. }
    % N2 \2 A7 Y/ |1 K5 V9 M& d- D
  124. 4 M4 v# S" V& m! g! [7 o
  125. //#=============================================================' q% K2 V$ s8 \& Z# c1 ?

  126. ' ]- ]1 T8 [: Y: ~& `
  127. double CheckConst ( double angle, double constvar  )
    6 ?+ s  ^& ~* I6 `$ n* r3 z) g

  128. 2 O' C& g2 M, f2 H  ~; l
  129. //#=============================================================9 g4 h2 K1 S0 f( D5 ^

  130. ' b0 r4 C0 P7 d8 f/ W, K3 \5 y
  131. {) d/ |! A- t, \+ n$ F4 T- \

  132. " K. k6 p8 o4 p6 H3 Y) s
  133.    while (angle < -constvar) { angle+=constvar ; }
    * X& O( Q2 L% W  n7 J: D

  134. * ?/ G7 p9 z8 o+ x; k2 E
  135.    while (angle >= constvar) { angle-=constvar ; }1 x- f/ q1 a" s, M
  136. + ~3 p( l6 \& s; C* L
  137.    return (angle) ;2 n; ^. ]4 |% z/ ^2 Z$ W0 ^( J

  138. 0 X" c) U' S1 Q: L( K' j
  139. }
    : `9 x. O9 ~# b
  140. 5 i! Y* D( ~% |: y' Q  Y) a
  141. //#=============================================================
    9 e* F+ J* C2 m8 z# i1 x

  142. 9 j7 d* z0 J1 d' ^6 R
  143. double Check360 ( double angle )0 z6 Q+ i6 |7 v" M3 b2 i; j) p- i
  144. ) P, J$ f. }2 \: j
  145. //#=============================================================
    9 X" h# {) j) L+ Y* q. n

  146.   a- G. D  Z/ b% T6 O
  147. {4 N5 R. U3 K6 G& r6 n. {' i5 w+ X

  148.   e. z+ k( K) Q) {
  149.    while (angle < -360.) { angle+=360. ; }
    - ^5 w7 X% y. Z# m% {
  150. 4 b* J2 E( W' F% [
  151.    while (angle >= 360.) { angle-=360. ; }' m3 z1 K6 x; ?& T+ s4 s
  152. . f, b% i5 ]( p: Q4 C
  153.    return (angle) ;
    4 T" |9 Y6 Y+ [' Q7 {- k5 F

  154. 2 m8 u  f& F7 _' E! ^! U- k
  155. }
    6 e4 ^/ N8 b& A9 k: _2 J( z
  156. 0 q) ^4 E" Z; V3 G! D- t
  157. //#=============================================================
    / `$ a6 @: q" F$ Z- t+ Y& p
  158. ' x- w) C: h6 p5 L; t6 D
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )5 c9 }% d9 g! _9 P/ K& |& q% |+ o

  160. : m1 t- s+ k( W. L) y
  161. //#=============================================================
    3 z0 J; @( Z. s; {' [

  162. 4 }& f( M0 E# O
  163. {
    ; h! J; M( h; z6 h; L- M

  164. & ^* b4 u" [* L( B
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }3 v7 @* R1 D0 ^% f" j4 Y

  166. 4 H& o# V/ k* k8 J6 |# v1 O
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }9 s7 g" A1 f/ O7 F  ^
  168. 4 O5 Z7 g8 g9 [4 [9 ^! d
  169.    return (angle) ;
    3 g( x3 V8 P5 a

  170. 0 L4 P; h/ m4 f2 H* h# O2 ~+ J
  171. }
复制代码

+ Z6 _2 y9 A+ V2 S以下为摇篮5轴计算过程代码; E" s' \+ f5 G9 w/ ^; P1 ~9 o' f% n
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);. q$ I& x2 v* M' E4 R0 k* X1 [
  2. 2 c# l$ m5 g  E+ `' p' Y' ]7 e, H
  3.          j=0.; B1=0.; B0=0.;4 Z; H. v$ `$ O3 Q
  4. % Z- U4 n, ?/ y, v
  5.           if (EQ_is_ge(i,0.)) {3 y8 r% o) S& T+ |

  6. 1 Y0 F' D/ a  h- g4 M& ^3 g) j
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }' Z9 D" U6 k! n' [

  8. - x4 L  P/ V0 _6 c" V& I$ c
  9.           }
    " R8 A3 c1 }6 t1 y) N
  10. & V3 x! M7 H6 R/ G7 u; g
  11.           if (EQ_is_lt(i,0.)) {
    4 E+ A$ p3 {2 B! j& ?7 e
  12. , g1 u; n. w5 j8 E/ I( b
  13.              if (EQ_is_lt(k,0.)) {
    0 W9 D+ k3 s% X: d) t1 I. G8 g

  14. 9 j& V# Y9 [5 F
  15.                 B0=atan(i/k); B1=B0+PI ;. H% J2 E8 |* U3 g2 c/ f2 W" x
  16. . @% D0 t" Y! W4 A
  17.              } else {
    ) k! ~" |) w4 p  f9 [8 W
  18. ; l7 G; e# m2 r+ v6 t
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }2 A; ~. ~6 m5 h8 e4 |- R3 z
  20. - m9 n2 k' \7 e; v6 c
  21.               B1=2.*PI+B0 ;5 L9 q! b" Y( J- ^" X  g- E+ N' V# K3 T
  22. + g( O/ g4 e* P. e/ ~# {+ c" w7 U
  23.              }1 b% E) V5 _7 c+ n0 ]$ _
  24. 5 t" m- G5 g5 j$ i# a
  25.           }
    ) {  x1 |$ B' D; W$ H- E
  26. & ~  Z2 [" k+ U: N: y# k
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;! H: ^2 L6 g+ M0 k  P: a2 c9 C
  28. 8 |1 G9 s0 r7 Y8 C
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    5 L* O/ W( [' A, e2 Q' u! `$ b: x

  30. ' ^3 O- ^0 g/ H9 a4 d7 n- x- e
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    * b; Z) C9 T4 K4 o& \( p
  32. # Q, V* d0 e2 O6 Q3 M& H! A1 ]' o
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
8 ~& J. B! }. ?* ^% S
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
, C+ S- }' y' @0 p/ h( B
6 O( G: H" [7 V$ W 640.png
9 |0 Q( W  S( h测试结果:6 d% Y$ S: I- O* e$ l
6420.png 4 A/ P8 F: v8 v$ n. |

6 F3 F6 j( O* \; v" F( H反向测试结果 6410.png " i9 K/ q1 H' F

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

271

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-21 22:20 , Processed in 0.425089 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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