找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7000|回复: 3

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

[复制链接]

433

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);7 X, |1 Z0 m9 Q# o5 ~
  2. int  EQ_is_ge (double s, double t);
    : m' D  C% Q: {& b
  3. int  EQ_is_gt (double s, double t);
    1 k9 }  I; R6 T, }! Y
  4. int  EQ_is_le (double s, double t);
    - _; x; [+ G  f1 j8 m6 o
  5. int  EQ_is_lt (double s, double t);
    * J: R. K% p% x- r9 F9 M- y! e- Y/ L
  6. int  EQ_is_zero (double s);
    8 \. z3 \0 S2 l9 d
  7. //=============================================================8 \. f0 D0 E; }0 r
  8. double ARCTAN1 (double y, double x );$ B! Z0 p: q# t. Z* N( B
  9. //#=============================================================- s" h3 A/ S% Z' m: g) t
  10. double ARCTAN2 (double y, double x );4 i& T- Y. U/ H) u
  11. //#=============================================================
    6 i1 i: v; c9 {7 Z" }: H
  12. double CheckConst ( double angle, double constvar  );( t5 C- Y; K# S; d7 c' s! x' i- m! `
  13. //#=============================================================. o! k' t0 R# @$ R" f
  14. double Check360 ( double angle );
    + R9 _( ]$ R9 k  Q0 t7 r% v' H
  15. //#=============================================================  _3 c1 R4 w- N% l2 V0 K& z
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );3 [! F4 r; f' v
  17. //#=============================================================
复制代码

. H7 E9 s* ?5 ^# @以下为部分源代码,用于判断,计算角度等
) Q, L; Z" M, ^0 Q8 |8 f
  1. int  EQ_is_equal (double s, double t)
    - p+ m9 z2 ]* ?# x8 u+ }+ O

  2. 8 C5 C" e3 g9 i" I
  3. {& g. G+ I8 i; y8 f* K; s$ @$ c

  4. & B, C! d2 e1 X# B
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }" H$ }% I" M' D4 h+ u+ N
  6. ; P) j. C: Q, F
  7. }  ~2 B' y: v* N8 |- n
  8. . Z+ X- j( o4 D5 [! \+ D
  9. /***********************************************************************/
    - A# z: b% s5 {
  10. 5 `# f# G: u: R- y( _6 {7 \1 o; J
  11. int  EQ_is_ge (double s, double t)! C1 s8 X( ~3 X' ]0 j
  12. " ~! W" x+ r" o" C  c
  13. {. u6 u" e" n8 T8 b( r. X# F

  14. 4 q5 v8 G$ `& F" |7 w* R2 y1 I
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }( a- j: B( w6 S' Q2 n8 z1 m

  16. . @6 i* z9 J$ H9 \; Y2 g; I
  17. }
    ) F& _( A' N, _$ l# r5 m4 S- s
  18. & l" g- ?& w  _5 _" b$ c. x+ r
  19. /***********************************************************************/$ M/ D* t$ G" F; `
  20. 7 v! Q4 f! V3 k" N' B% E
  21. int  EQ_is_gt (double s, double t)
    ) E; K8 k$ ?" F: }2 I5 c  r  i

  22. $ s" N5 v! Z& `
  23. {: X$ w2 K& Z+ W! E3 G" L

  24. $ f/ _( h# }: b/ Q
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    + u3 z+ o# E5 o$ a+ ~2 D
  26. ! R0 R# x0 t0 ^9 x
  27. }
    7 }" V' U4 \6 C. z6 K- }

  28. , \  N: T# \. G* W/ c# U  q+ S
  29. /***********************************************************************/
    3 l# s; r- K# a3 X  p( }

  30. ) T7 ~% C: {& T) c* C9 M
  31. int  EQ_is_le (double s, double t)
    8 M" o+ k# z' _1 c, D( ?- s. K- b
  32. * F# K7 p$ l" G0 a
  33. {% a% u8 H" |8 U

  34. 3 c& M: W4 \0 M' S" I( a# ^
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    7 Y/ r8 U3 g  x" [/ K

  36. 2 n0 p8 v3 r- k& _! W! c
  37. }+ Q% s! s3 F7 n" |8 I  g

  38. - b5 y5 T% J5 P1 _$ `- t
  39. /***********************************************************************/
    ) m. b6 ^5 I" g& L$ X+ i

  40. ! P4 b! t2 m2 j$ S2 z# h" b' G( |
  41. int  EQ_is_lt (double s, double t)
    + N* Y+ [( w+ x9 m
  42. ' X3 s: z# ?5 {; e1 h
  43. {0 m1 }& w" M# G2 C% `8 v7 t
  44. ) o6 N& E! n0 z9 b- V$ L- Z$ t
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }; `3 b4 y' l- V* P  m

  46. # r6 r$ j$ G& U+ Z9 f( X
  47. }0 `1 e0 z" E* X) V$ h& q' P( G
  48. - D6 ]7 a  Y! w* V# a
  49. /***********************************************************************/
    + S4 r8 t4 |; _7 t3 I

  50. & t! V7 {! n6 U1 U. m/ {
  51. int  EQ_is_zero (double s)( I' }( |' h* S1 a) Y

  52. ! Y) A# e" P* o+ S9 {
  53. {
    " P9 B9 V# @; _2 v6 l8 D: w- P% t
  54. $ G! \2 D1 [- S; x$ N: r; P
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }+ M7 Y0 {. m  o$ t5 v* i
  56. 1 B6 f1 P+ i4 d9 K$ c- _1 L
  57. }3 w) r4 v9 n4 `( b. H; P+ A' W
  58. 8 f& e2 t5 r4 O+ F( q
  59. //=============================================================7 l1 |3 ?% P/ \& f& o- n

  60. ) Z3 x8 G' \/ j3 L- _9 F& Z
  61. double ARCTAN1 (double y, double x )
    ' L: t- q( P0 g. \" l* ~0 q
  62. 8 _- }% ]* e9 b5 m" n
  63. //#=============================================================& ?, G" c1 h  a8 o+ C4 x: t
  64. . A4 I3 y* J( v1 U
  65. {, u9 t2 e$ b# }" F  e% Q7 h
  66. ( X* X: {  P7 I9 @
  67.    double ang;
    1 }1 N  Z, W4 ]) z7 i/ F$ ?
  68. / p$ U. ]9 \; K' |) {
  69.    if (EQ_is_zero(y)) { y=0; }
    * Z9 o8 w: r3 S* E. w& T6 k

  70. ( r  \9 ]* X! u6 R1 G: k; i
  71.    if (EQ_is_zero(x)) { x=0; }7 c8 }( N: z5 k! z

  72. 4 _9 H9 ~3 ^  }* w' ~0 Z* b8 v- i
  73.    if (y == 0 && x == 0) { return(0); }3 U: T( N( \( H7 ~0 ~: P6 `- I

  74. : z" {0 ~* A/ z1 U; w: V5 u9 D, z& z
  75.    ang=atan2(y,x);& ~. U" l6 j* H! h3 @% z$ Z
  76. 2 C! p0 r$ n0 [$ j2 [9 D# }0 r
  77.    if (ang < 0 ) {3 u6 I9 c2 p; n9 y! n9 I

  78. ' {% V9 I$ u, p3 A; Q( I
  79.       return(ang + PI*2);! q/ M, U# D7 `8 g% I
  80. ' o% W, N4 b* Z5 a. K8 x* I  N2 l/ F+ Z( h
  81.    }0 N- S; A4 d& s7 ~
  82. + {; ~, u* K( n2 w) w; J; L
  83.    return(ang);( v+ Z, [5 ~( `' x0 H: I

  84. / n* f/ h, c" l8 n
  85. }
    . w7 ]+ Z* K5 x$ ~+ I; Q; F1 n1 A. j

  86. , W7 }: S& R- |! x; b
  87. //#=============================================================
    # X) I( E2 S5 X4 c" N% V- X

  88. 6 [# T; v3 T* c
  89. double ARCTAN2 (double y, double x )
    & W; t  \1 O- L4 M- b5 R0 L

  90. * e5 B6 [4 L2 O, }7 N% P# T
  91. //#=============================================================0 q* Y! X: p" B0 h0 P( H

  92. ! j5 U' V+ V2 X& C
  93. {5 \- D% B9 ^* u8 v, O

  94.   X; l6 y, X, l9 q1 X* T& O3 s
  95.    double ang;
    ( X& u  O. U  `, \/ J3 G3 @. y) G& F
  96. 1 ^' \# ?! v& ^0 }$ h9 ?
  97.    if (EQ_is_zero(y)) {
    # C( C2 f$ g$ ]: h! [% [# C, G/ u
  98. 8 l" U; }4 S) O% W, c9 l# r
  99.       if (x < 0.0) { return (PI); }
    . a4 r; X- r- Q3 q7 G$ R

  100. 4 P4 S& \1 U, i0 t; Y: Y5 d
  101.       return (0.0);
    ) ]  x" a- f3 @- G0 W9 \
  102. + h9 `" l) J# M7 u
  103.    }" K% k; e- P- L, K
  104. 3 J! q2 [: w/ O# Z9 R
  105.    if (EQ_is_zero(x)) {
    2 h* i8 b! N+ s- @# b; n
  106. 0 R! f( B( R/ C' ?4 E3 f/ n
  107.       if (y < 0.0) { return(PI*1.5); }
    3 y& ]& `$ c- _( X
  108. $ [; Y( C0 n, P. @2 S# D. Y
  109.       return(PI*.5);: p6 F  d7 l% B
  110. # s" V0 B& |# s- X# E
  111.    }
    7 |( B# q* v* n; Z6 z& z
  112. ! y  z/ W( s- X# J) @' s9 `
  113.    ang=atan(y/x);
    * Y6 ~& M9 ~+ }  ~* |
  114. : E, L0 r: W! p
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    7 c: A8 |9 w  u1 Z

  116. & Y( a5 z" ~* }& G$ x& S; X
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }0 f8 a1 M" R! N
  118. - `: [; L& _# x
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }" m. t* S, j" ]" N/ Z
  120. & X; U9 G! y( |" ]( r
  121.    return(ang);2 _1 \- L3 h: x# `$ p1 _& u+ e

  122. 9 u' S5 N( `2 H5 n
  123. }  r( s* m5 {' h' u; s
  124. * @  L! G+ G; V
  125. //#=============================================================
    $ z9 U. }% p& {5 l- a, }# B
  126. 8 C: D4 G6 `& B; ?3 J/ L
  127. double CheckConst ( double angle, double constvar  )3 X$ k1 m/ I& P( t( ?

  128. - J1 ?0 M& i5 y" d4 q, \+ I$ q
  129. //#=============================================================
    7 `6 p: p% q7 \) [7 u1 q& u

  130. , d9 B6 k( ?2 n
  131. {
    0 H$ s, u4 Z7 E9 x4 A2 j( [  {% z

  132. . r( \* ^  B3 z3 L$ N/ h
  133.    while (angle < -constvar) { angle+=constvar ; }. `/ o' L( C. u& T/ `' U

  134. ; C4 ]4 W7 z: Q. o+ Z7 D( J5 _
  135.    while (angle >= constvar) { angle-=constvar ; }
    0 W; I- J4 a6 Y( Y1 O8 s- h0 f

  136. " |: Y( K# [$ T3 U2 ^; ~% v
  137.    return (angle) ;
    0 D% L$ r' @/ E

  138. 2 {) @8 ~! a  D. l$ f) @
  139. }
    , ^6 ~0 ?+ |  |6 ]

  140. : [* D" C! q4 j7 a$ ^/ X: }
  141. //#=============================================================
    / ~0 N5 J* o( D- p
  142. 1 m; }9 _$ w: D9 h7 m
  143. double Check360 ( double angle )
    & C$ Q* k9 [% j
  144. 3 ]3 I# q7 H' ~, k
  145. //#=============================================================
    9 L1 l0 E6 |$ D: V7 P
  146. : f$ w, L5 L/ p
  147. {0 E! B+ H% l# J6 g( g
  148. ! S* T0 l' b* T$ X
  149.    while (angle < -360.) { angle+=360. ; }! H$ |+ j8 F$ t# X/ ^1 K7 u+ _

  150. % s" k7 ]/ K+ F, `( c
  151.    while (angle >= 360.) { angle-=360. ; }$ f; _1 H2 k( J" j. c
  152. + p. ^, M! X0 _# B
  153.    return (angle) ;
    7 V- N& ?( K9 n, b! m
  154. - E. N$ R3 J& c. p4 Z
  155. }
    1 z+ n0 U0 @, v9 b  x

  156. & u2 b- |9 o7 F+ v3 W
  157. //#=============================================================
    " h, k6 k/ q5 @0 X

  158. ) C, N/ j4 G; p$ Q5 g0 U
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    0 H; [; B2 X! E; h. N3 X* p8 |
  160. : [1 Y% U8 l- F( ?
  161. //#=============================================================
    ) A3 K0 Q6 ?" w( j

  162. ' j, ?( e" |1 N6 L8 G
  163. {! u1 Q: F+ n- _- m
  164. + q0 i7 ^- h* S4 C2 T4 [! k4 x: D$ C% h
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    - D' `  J; j/ p. Z- U3 z

  166. 0 v, x3 P$ x8 ^# ~
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }) W( J/ S  T9 d, Z$ P& Z" L/ I
  168. ' I8 e. O( K& A! F" B  Z4 t) {
  169.    return (angle) ;- V7 Q$ h3 D" }& ]/ z& O, i6 y

  170. 5 |, k6 b& E% Z
  171. }
复制代码
* b; J1 n4 w8 M2 C: m; a6 Q4 D
以下为摇篮5轴计算过程代码. Q0 N  K. w7 U/ O" O
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    ( U  J$ x( j0 I" G! P/ X) Q
  2. ; ?. p0 t- j0 G3 L5 [
  3.          j=0.; B1=0.; B0=0.;# @: `3 k) S1 _" I4 l, s" @
  4. , E1 W7 \3 H+ C7 c8 U
  5.           if (EQ_is_ge(i,0.)) {
    ( L' M" o- o& _4 R; U
  6. 8 x  l# N; Q2 c- A) {4 E1 B) A5 o
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }- A! s5 i# Q( f, \8 m) T  L
  8. 7 T" O" t4 A' t' z+ H  ^5 V# M' s& x
  9.           }2 f. n: i4 Z" \8 J; ^! M6 s

  10. 7 `: [5 x0 G1 W; M+ N
  11.           if (EQ_is_lt(i,0.)) {/ {7 I) O2 d3 k4 G( o% p7 \# T+ a; a
  12. . f; o6 y, w  s) C$ C$ k, j
  13.              if (EQ_is_lt(k,0.)) {
    5 H2 \( G. W! h; f

  14. ! J5 G, n, W8 T; A
  15.                 B0=atan(i/k); B1=B0+PI ;
    * ^" P2 M6 [8 Y5 q4 o2 v* J

  16. * ?& {  _: k" `: o
  17.              } else {
    - R- K3 c) J7 |. _! k; n' W
  18. ' O0 K, ?! Q# p# o% }3 l) K1 m
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    1 Z* M1 O  C0 [8 z* p: x/ r8 S
  20. 4 F$ h, b5 a4 a8 V
  21.               B1=2.*PI+B0 ;
    6 Q9 |2 g! {1 J  c
  22. 6 I+ i) A* l# V) C: T
  23.              }
    ) r5 y( j$ w+ u2 q! `7 H

  24. & J0 G3 p! [1 Y) M; i" ~# Q4 v
  25.           }
    ' o5 U% l2 X$ r1 S# q* X; {# u

  26. ! h6 {* }& z8 f# Y: m1 @! b
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ( _; t6 B$ N, C$ K7 N/ r

  28. ! y3 d- ?1 Y( e/ \: h
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    / D2 W* V5 w! g2 h1 C

  30. 0 L3 Y2 f& U5 C* B
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;) c& K8 n+ [' Y! j) D0 y

  32. 7 v, z+ x$ c2 R, h/ ?7 p3 X1 i
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
$ _9 z* G/ m2 I. p0 z
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
6 j0 ]: D3 Z' z3 U2 E5 |. C3 |  C2 t7 w/ L3 j% T. v9 U+ l
640.png
) t  u& f( {7 r! d: C测试结果:
7 z* y' A- c, T' Y  e 6420.png
! v* S- x  \: M0 ~. @4 r0 \6 \0 ]& I+ S6 U* _9 D
反向测试结果 6410.png 3 i7 V# u, N/ b" d

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

208

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-3-19 22:29 , Processed in 0.975574 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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