找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10295|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    : I9 Z- F4 f2 e
  2. int  EQ_is_ge (double s, double t);3 X# f  F7 F' v. E  w: M
  3. int  EQ_is_gt (double s, double t);% T5 t; l6 j3 [1 p# W! _/ k, [
  4. int  EQ_is_le (double s, double t);
    : @8 g: M5 j9 F7 j
  5. int  EQ_is_lt (double s, double t);0 H$ p0 N% S1 ~; ?8 r
  6. int  EQ_is_zero (double s);
    7 c8 z. W' Z. O; b8 n* i% w) f" ^
  7. //=============================================================
    4 Y  k0 }/ w$ |
  8. double ARCTAN1 (double y, double x );
    ! ]! v1 M" g' L6 y2 Q9 ^- w
  9. //#=============================================================
    4 K& j% ]7 S- G1 S) d7 S7 Q
  10. double ARCTAN2 (double y, double x );
    6 v- h2 n5 e" ~9 K
  11. //#=============================================================; O5 ~3 c' K9 A+ m3 G5 w
  12. double CheckConst ( double angle, double constvar  );
    7 K( a; ~: _  l' O: {
  13. //#=============================================================: q& a4 Z  w( M( s/ j$ c4 f& N
  14. double Check360 ( double angle );
    + N7 o) u- O# j: z( ^4 z/ h
  15. //#=============================================================# T/ O4 g0 g* ~% l1 k
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );% j) Q+ @) a9 I, P( c$ `
  17. //#=============================================================
复制代码

, |9 B. g( W6 U以下为部分源代码,用于判断,计算角度等7 d( p8 p6 Q2 ^- R
  1. int  EQ_is_equal (double s, double t)7 k' \( k; b/ h) F: K5 v" M6 h

  2. $ P+ A$ t6 U% s, Z, C& ~- B
  3. {! X$ M; |9 g. U) W% d) x' Z% [1 x

  4. + h0 A: Z& i4 R$ `' m; V' T
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }  T2 n7 _0 a! q- f  c- B- Z+ @

  6. 1 x9 x8 V; h+ s5 s4 @+ s
  7. }
    - }& N6 j2 L8 f* {; M
  8. ! u9 I2 a& z  T6 d
  9. /***********************************************************************/
    ! R  P4 `5 f: X/ c  g
  10. & @7 ~* c7 w4 V( s
  11. int  EQ_is_ge (double s, double t)6 `( z+ `5 l5 U$ ]2 L; Q4 r

  12. $ d, I# b+ Z) L: u* B2 J
  13. {
    6 C: i; n1 J/ I8 k/ @4 b  b

  14. + h2 A" h9 i2 p' N
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }: a, R2 _8 S4 K. S- {

  16. ) |( `3 N; S2 o1 ~2 W
  17. }! S' R) V$ W& S  [  g3 F2 H2 D
  18. ' W$ z  G) a/ n- A" T5 |
  19. /***********************************************************************/
    ' k4 e" D# s& F( l, ^) G
  20. ( E) D. V9 J# N
  21. int  EQ_is_gt (double s, double t)9 G/ ^+ _! h8 g! S7 d) z8 X, d; v4 t

  22. - e( d* o! X5 [: Y
  23. {
    0 h, b5 f( T  t. K' C" W
  24. 6 |, s. D. O! {( J+ r5 g) \. v
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }+ ]$ B' x7 B5 T0 E, q+ p( r
  26. ' \8 T* p% A% {& Y3 ]& I2 ^
  27. }1 F" ^# _2 ?5 i8 d7 t
  28. 7 o* ~, R" S8 q# F$ X& Y* d" \
  29. /***********************************************************************/" I& w! [* G- m5 v7 ]

  30. ' l& r' ?) N4 a2 Y7 ?8 j
  31. int  EQ_is_le (double s, double t)8 b- j/ k- ^9 d# T+ d6 ^: p

  32. & I+ d4 l+ S8 ?0 N6 y: ]
  33. {
    2 K$ G- c# z$ s  U/ x( J2 y+ v
  34. . X) P7 J! M+ }, A( ~& X& a1 w
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }! ^" U* t7 g& S# o7 ?! V

  36. 0 F2 z2 M! ~8 A
  37. }
    , m6 m) Z/ ]0 K9 x  T) q2 c1 r

  38. 3 q% X. d& b) y+ k* L
  39. /***********************************************************************/9 r- {! |+ O. I
  40. + y  L8 o" C0 x  Q/ Z$ m
  41. int  EQ_is_lt (double s, double t)' h* K( H; Z) o: d1 T7 q$ r9 u
  42. 2 z3 P! H* k4 [8 Z* o4 U
  43. {) k" a, l1 v; J- a
  44. * R) R+ y7 S' C. \3 J' ?6 v6 ]
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }4 A; s8 ]" Y4 a: `
  46. % T& L: L: i& `' N, ~8 h* I/ X
  47. }
    $ t7 G' e' O. g6 p
  48. " y; U2 E! J+ {' F3 S
  49. /***********************************************************************/. d# ]8 a. K0 D3 u# o8 o7 d
  50. 6 H* j* P9 x) ]* @. i, g
  51. int  EQ_is_zero (double s)
    9 Z8 R' ]/ ?- @
  52. $ }* i" V. n2 g; O7 V/ ]( P
  53. {2 f2 S+ U& \# p) s+ l% s
  54. + R; o: B1 A) |" `, z
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }8 V% R& n7 `2 ~4 v2 |
  56. - b  h6 U5 }% |" Y
  57. }; m4 L, @7 }: ?) {) P& {5 W; f' z

  58. ) M. L) ^0 C9 `7 C' D8 F7 e* l
  59. //=============================================================
    1 }) X, t  Q: u3 m2 Q- T
  60. * m& y* g* O2 d: f# h" d1 H2 ?
  61. double ARCTAN1 (double y, double x )4 K8 ]" g- }3 O6 `. E) G
  62. ' I% f$ V9 w7 k0 J: {
  63. //#=============================================================- {8 }. r. M6 z( c& a, M" c. X

  64. 0 L" f: U3 a9 g
  65. {7 p( Z6 ]/ b& h2 n' i- T
  66. # v# p% B' n% A, s0 Y
  67.    double ang;1 n- R% H8 |( x2 A& T& W6 E  P% W7 d1 d

  68. 5 b* b8 F0 G7 Q: l* C; ?6 R. c$ P
  69.    if (EQ_is_zero(y)) { y=0; }
    * \" @# ]: O3 g
  70. + T9 s& o- m) m7 d) [1 |1 X. Y
  71.    if (EQ_is_zero(x)) { x=0; }0 \( f/ y; e% L- z: G5 V
  72.   ^& w8 i. D2 [; k; z% {9 |9 K
  73.    if (y == 0 && x == 0) { return(0); }* a0 u7 H8 J1 X! y0 D, p2 }# s
  74. ; }% |2 p* X) W& O
  75.    ang=atan2(y,x);7 S% V1 m% G( L2 x# t1 a2 M
  76. 0 g# i1 s" H1 K% @* V: X
  77.    if (ang < 0 ) {
    5 z; w- |7 ]! G; G6 R

  78. 4 r3 q& f8 M- f& n) Z; Q# z
  79.       return(ang + PI*2);
    : u8 r5 Y! m9 C2 _9 g3 M
  80. / S1 ~, k0 t4 G* W$ D5 r
  81.    }, n( l. l6 b- ^: R5 v0 M" {* P
  82.   l& S8 ]! r! U& t. B; B  u
  83.    return(ang);
    - q6 m! Y$ E! T  G5 Q2 u
  84. 3 A3 j4 e* {, o- N' b: f
  85. }
    3 t- {7 \% F9 S
  86. 0 O5 z1 c- L/ e9 D8 f; D9 ^- {+ y
  87. //#=============================================================( V# o6 n. Z$ k2 J4 J+ H" s) V; y5 ~

  88. ( H& {! c/ L' E
  89. double ARCTAN2 (double y, double x )& k2 u  |; |7 x# v# ~7 h
  90.   w& W6 w# j. d
  91. //#=============================================================
    ( [0 l4 i6 S9 l8 d2 M2 f5 h# U( b
  92. ) K% n: G/ F" Z2 N5 @
  93. {
    - M( _# V$ l5 L

  94. 3 t0 @  z8 p6 r1 D. D- T6 t; }2 ]
  95.    double ang;
    4 u4 j+ F% ^6 k% A, o+ P* v
  96. 1 ?# |8 L+ R" C9 R- R, M/ |+ Q
  97.    if (EQ_is_zero(y)) {
    1 {7 ~# y5 f, p  L5 g& O

  98. + E& j4 q2 j- s; @: b! k
  99.       if (x < 0.0) { return (PI); }
    / w( d/ I& X. u; o: P. Z; ^
  100. # C2 D* K/ _0 I
  101.       return (0.0);
    - x' C7 l' \" m3 M
  102. 0 S3 k) @5 u( a( P4 c3 m
  103.    }, _9 d; T( B  D  P0 \  N
  104. ( l  ^: C: F' L5 C- g8 M2 l2 {
  105.    if (EQ_is_zero(x)) {
    & a9 q( N6 e" A7 |9 `/ _

  106. * W& E, H7 `* o+ s. [, H
  107.       if (y < 0.0) { return(PI*1.5); }
    9 H. C" m) d8 j  U! n
  108. + p6 q8 ~8 N6 T7 O; x$ K! l: e
  109.       return(PI*.5);  T0 m8 L3 A4 G  [* S6 l# I
  110. 7 a  C  D0 w& \, Q9 h, p2 c
  111.    }) F* a1 ^; _* n6 _
  112. 4 a* `: N5 N. z$ h
  113.    ang=atan(y/x);! f8 Q# ~/ z* K4 c( }! u

  114. * N( p' K7 F  Q: P3 Q( q
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }( x$ }( v- N9 k! m, @1 F

  116. 1 r2 p- z3 D' {  J+ Z! X0 D1 Z, ^
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    0 t2 r: I% Q  e* V

  118. " S& h' Q# E! ?& @' C4 T- G
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }  J9 @( v7 v! J3 s* c

  120. - _! ~- V1 e/ h( K
  121.    return(ang);0 m% C0 L# G4 @8 p' B6 [

  122. : b0 E* W! {0 ~; V) o- d
  123. }3 J& X' @- {( O1 @
  124. 1 ^" L" d+ K  k
  125. //#=============================================================
    6 X; A/ U# m1 F7 t; ^1 D
  126. ' z' T% a) f- z! Q/ `
  127. double CheckConst ( double angle, double constvar  )  Y9 t, z, z, z0 k, F. v
  128. * z/ @6 k8 b* V+ ?3 D
  129. //#=============================================================7 A, q9 F+ R8 x
  130. 0 a. n+ }8 E+ S6 |/ A) X) n
  131. {
    1 ]8 U" Z9 `3 G0 k. p' i

  132. # C1 W$ t& ]% ?& v
  133.    while (angle < -constvar) { angle+=constvar ; }5 ?" o/ X& B. F0 K3 N% @
  134. # k0 Q8 x" g- n- Z
  135.    while (angle >= constvar) { angle-=constvar ; }' ]; d1 w; x* _& n
  136. - z4 Y4 L% A) b$ [. ~6 i
  137.    return (angle) ;
    5 j0 Z% ?( s4 a& v: u& D$ i

  138. 1 {* Y( K; x, I2 |
  139. }& \5 ]8 B4 g! m. i4 D8 |7 u. ~
  140. * l) C- `6 w. Y5 _
  141. //#=============================================================
    : V# R3 ~* O8 R5 s0 l$ z& d
  142. 4 r) U6 m% h  W7 B4 |: t6 ^' h
  143. double Check360 ( double angle )1 A+ F  O. \3 N

  144. & U% S3 e6 l4 c7 K3 s! [4 \
  145. //#=============================================================
    % ?! m. u8 \+ T4 q5 ]

  146. 9 ]% a+ B0 y3 n7 w" I
  147. {
    5 A# Q( \  a0 d1 N! T
  148. & b6 x1 r" J7 x! Y2 q( r  V
  149.    while (angle < -360.) { angle+=360. ; }8 L4 ]- z: S$ m" t" a

  150. - v( i! U4 I9 o, G4 n# ~0 p
  151.    while (angle >= 360.) { angle-=360. ; }
    * I$ j4 r" C$ O/ G# k8 E% v
  152. ( E6 D4 h; l: y$ R, v: s/ a1 B
  153.    return (angle) ;
    , Q4 O1 b) q; o6 P* s; W, m
  154. 2 E+ U- v4 P; @
  155. }7 j: n* Q( v. J0 U
  156. . C: @- @/ l% I7 S. P' y! q7 T' q
  157. //#=============================================================
    $ Q5 U* R% T- y# X( P
  158. 5 f* z" [% B, k2 O8 d% r
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    9 ]. x3 X* |" i# R# L( z
  160. % C6 j/ z' _/ g) f
  161. //#=============================================================
    2 v5 v8 ]# `/ i: V8 t

  162. 1 o% B( h: a4 i0 g$ J: f
  163. {7 d* @- J5 F0 I- [) o* g
  164. - f5 U. ]# e! s3 U/ h
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }7 q. b( l+ p+ z$ I1 R9 p( y+ X

  166. . A$ s6 |/ Z: D
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    4 I) Y8 f7 C: ^2 Z- c* o
  168. - I$ L9 w7 g; y2 a: ]8 w/ K, L, v( y- \
  169.    return (angle) ;
    ! `6 O/ G+ ^  D

  170. : H' ~' k) a2 i( k# D
  171. }
复制代码

5 U. a: h: ~) ~; e, u以下为摇篮5轴计算过程代码
" ~/ Y* q5 u3 p& o
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    8 a# [/ h  @$ I8 S" G
  2. # _) g3 }, y2 L# ?# a
  3.          j=0.; B1=0.; B0=0.;( z$ b. A7 c/ N0 ^
  4. 0 r1 U4 t( f2 L7 c8 |
  5.           if (EQ_is_ge(i,0.)) {2 S& k4 w0 k" M" m

  6. 4 z2 R0 ]1 W0 j2 k& m
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    & s3 Q. |" Z# A" T/ u) X

  8. & T( L, I$ T0 Z
  9.           }- y/ p3 E! Q1 M" @: g. f

  10. 1 d7 a+ D" I# E/ U& E1 W$ Y/ N
  11.           if (EQ_is_lt(i,0.)) {
    1 n* h3 R8 l) q1 {6 v8 g
  12. 8 V. M: E( k+ e. a
  13.              if (EQ_is_lt(k,0.)) {+ y9 L2 `- z- p2 ~& F( W
  14. 2 i6 L: ~! T! V' N: H7 a4 a* p% F
  15.                 B0=atan(i/k); B1=B0+PI ;! U8 t/ {# ]6 O5 @

  16. ( Y! E2 x4 d5 q! Y5 f: H& w
  17.              } else {8 k4 _3 l5 ]: G$ X

  18. " s; o+ C4 z) @
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    . b3 w$ T; U6 [% }

  20. 3 a2 F  W, a& B5 p0 P3 Z2 I4 d( _
  21.               B1=2.*PI+B0 ;1 K0 n$ y% M4 [2 y* c6 Z
  22. : ?; z, ]+ ]1 f2 z
  23.              }
    ; u4 m  M; l2 T

  24. " _  n, R7 b4 o( b
  25.           }5 L5 F' I# d* ]% \! e7 l

  26. ' q' b. D+ N4 U& d2 h2 ~2 j
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    4 h1 b- j9 H' }& [$ \
  28. # x+ Z/ [, e7 i6 _. {
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));) a. @0 G- k+ J9 V9 c  k" }

  30. 1 w7 U9 b9 s3 X3 M. Z
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;+ J: C* Z1 _  O% P; P4 M; Z
  32. ' z& Q9 _& u5 s
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
6 w. r0 `# `% [
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
6 [. N  K' R0 e+ T. a" O: l6 C: {/ h- {7 w+ c1 ~
640.png & n7 d% T. F' c
测试结果:
1 ~6 w, Q3 _$ S 6420.png 4 @, m4 B: w) U6 b7 e+ E# {

$ Q; ~3 X: ^! T, G. X$ V反向测试结果 6410.png : W, r. {& U6 o. n3 f

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

326

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-8-29 00:12 , Processed in 0.201567 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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