找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7973|回复: 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);# I- _4 O7 f9 R# x! A  l) E" X: ]
  2. int  EQ_is_ge (double s, double t);
    ' v7 g* K( S0 Q3 W
  3. int  EQ_is_gt (double s, double t);0 C+ y+ w; Z# n0 }9 W
  4. int  EQ_is_le (double s, double t);7 @- c4 T7 Z+ R$ m
  5. int  EQ_is_lt (double s, double t);) G, Y5 f1 J6 T3 J
  6. int  EQ_is_zero (double s);  b2 }4 d0 P, U2 J
  7. //=============================================================) ^, s* r; I0 @% h( J1 w8 m
  8. double ARCTAN1 (double y, double x );- B; p% s4 M5 i! h1 K
  9. //#=============================================================9 D+ d8 I4 y  Z$ |
  10. double ARCTAN2 (double y, double x );3 X) [! v+ b; `/ G
  11. //#=============================================================) j% o0 N7 W5 k1 `. K5 \9 A
  12. double CheckConst ( double angle, double constvar  );" A( J0 w! y  Q8 J
  13. //#=============================================================
    3 F+ _, ?# S! Z( o: x* U3 z5 R# [9 [7 Z
  14. double Check360 ( double angle );
      q; ]' {1 G7 f) e
  15. //#=============================================================
    7 z7 T1 w! v2 x
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    , z& m. B+ m' [' m5 i9 _: Q' U  i1 n
  17. //#=============================================================
复制代码

: f, Z; X! E* [. S以下为部分源代码,用于判断,计算角度等5 n$ x) |9 G% Q9 X  j: ?, G
  1. int  EQ_is_equal (double s, double t)
    9 V- ~" b+ w  A
  2. ( n+ l( H' x; k9 O+ r- {, H
  3. {
    0 q7 I) M6 t8 R3 C- J" o

  4. - t. d4 d* A1 ]! C
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }2 D4 ^) p8 a/ W: r

  6. 4 @3 D: J6 t# K$ `
  7. }5 u9 q( \, E6 d9 t4 x/ r5 i
  8. . S+ g' {, n, \1 }+ f; \6 u
  9. /***********************************************************************/2 D- u2 B) Q' z+ \
  10. 1 u: _0 b% {$ t2 c1 O' i8 r
  11. int  EQ_is_ge (double s, double t)
      n& @7 A' @. x4 L

  12. , r- N, B4 |  L3 I+ a! O& e
  13. {$ T6 U% g. o+ h+ D4 |
  14. / D; d7 Z3 [& c; H4 Y$ a! f6 p
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    3 F8 R" }% V- y0 n

  16. 2 b+ g( c' C* M6 O& `/ z
  17. }
    9 ~: K! |- `# ]; B# S

  18.   Z  H  ~6 Z5 `
  19. /***********************************************************************/
    3 t0 l; D% @% A: h8 c' U) t0 x
  20. 9 n: N. _+ {1 J0 }
  21. int  EQ_is_gt (double s, double t)
    " L! @! A% y! z8 g0 R& a

  22. . C* g  a0 y# ?7 F  A
  23. {3 ^% ]/ L5 j) t" b! H. `
  24. $ `0 j" v0 C% a
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    - Y7 Q7 u4 w: Q
  26.   g. I5 r3 T/ l9 I/ i% u$ [) [: e, h
  27. }" r$ Q1 O2 q4 r! t( T- C
  28. . l; l" q; Y6 s# w2 k, W" y# x1 P
  29. /***********************************************************************/
    ( S5 `+ B( y. S8 T
  30. . L8 X! \; U- m0 u4 Q  k/ g% E0 A
  31. int  EQ_is_le (double s, double t)% S' N8 N+ N+ t! M
  32. 2 X; A/ W6 ~1 Q, a2 C5 d* n
  33. {2 k# W2 a! c6 L$ T* `( G

  34. % x- X3 ]. s& Y# e6 I; n
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    9 E  X9 G% @* g6 m
  36. * T$ `# k4 U! I
  37. }
    , Q5 F3 ?1 E6 t: l
  38. ) \( Z. ^! n( o
  39. /***********************************************************************/
    & D5 x+ J  m; h
  40. & Q  g9 o6 a: O$ R
  41. int  EQ_is_lt (double s, double t), b  s8 [" j; q: ^, [' V& p
  42. 2 h& J+ v& |! Z% h. Q
  43. {9 k# y- [! W. O5 z4 k$ i- f. @
  44. 9 \- D( F) v" v9 ~7 S8 o
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ) E# v. f, G/ P* j' W! X0 U

  46. ; d. R0 X9 I4 d5 A' |. ~
  47. }: j7 {" L$ I$ P- c4 W: N3 o7 |3 F

  48. 5 i6 D# ~  |! J$ Z8 {2 H( J" y
  49. /***********************************************************************/
    4 {5 j* j  V( [
  50. % S0 {. o8 [  W6 o4 j$ }
  51. int  EQ_is_zero (double s)
    & O2 l, ~+ W" j

  52. ) C6 D+ A( ~/ c
  53. {) \2 K7 F* g9 o* |* k% B: i1 c
  54. " a0 v3 N) v" V
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    8 i: k! v# P2 E
  56. + Q3 h1 \6 I( e' F: T
  57. }
    % b5 \( m4 v( [7 f1 l3 j) Q
  58. 0 |& i* O+ L7 p( Y+ K( P3 |% i5 g
  59. //=============================================================
    " ~! g" Y6 u; e  S/ U9 F% x" I/ ^
  60. ) u2 ]4 `% ?8 Y7 s$ D- ?( p
  61. double ARCTAN1 (double y, double x )
    5 w& T: F8 n3 @2 k2 R& u2 B/ G8 {

  62. % J  }8 \, {9 g
  63. //#=============================================================
    , q% b6 x! @% T
  64. 8 ]3 P- q* z1 t7 w$ \& M
  65. {& g" W* S- Y7 b- H& ?
  66. 1 S2 T7 m3 v" Q' _1 z  L/ |
  67.    double ang;
    2 z4 w. f' T) n9 v" l& [( I! {
  68. ; H, b- Y) f2 q# ^
  69.    if (EQ_is_zero(y)) { y=0; }
    $ q  Q, }4 ~7 h( _

  70. * f2 e* B; [- z6 m/ s, M
  71.    if (EQ_is_zero(x)) { x=0; }
    ! I3 C8 T4 N& h  I! H9 U: W

  72. 6 z- D/ H. p; E( E5 p) @7 _- X/ V4 L, N
  73.    if (y == 0 && x == 0) { return(0); }! r+ T+ d# N$ R
  74. " m( y6 u- P; e$ J
  75.    ang=atan2(y,x);- o# I% q" w  q8 x7 G

  76. ; c# O& ]) A, C$ p+ i
  77.    if (ang < 0 ) {
    6 X9 X' p$ n* b$ v+ j
  78. 5 V  t* ^: u( y& d
  79.       return(ang + PI*2);% S3 V  v+ c% V- i! m+ \0 E9 d
  80. 1 L8 H" |3 |, k- Q0 k, z% c
  81.    }
    9 w# r" S/ k! @! G; L! l
  82. & N! Z' _" [! S
  83.    return(ang);" N, \* T7 E1 {, t  i2 L
  84. 9 }2 o! v+ x! v+ y
  85. }+ b/ ^/ {  {3 v

  86.   y$ i% s6 m: \# R; G. {
  87. //#=============================================================
    - R9 v$ q6 `& b+ {) x9 J0 S. q7 L6 R
  88. / l* ]3 ], S; T+ l% O# i- W% J
  89. double ARCTAN2 (double y, double x )$ `6 `3 D2 N( [- y* ?5 B: i* Z
  90. ( V* l4 E6 i6 u  q( K' \
  91. //#=============================================================
    8 \+ [# J. F) @- S( J7 q
  92. ! j4 k; y* n0 `4 b9 A. |* s
  93. {3 f7 ?; l1 ]4 W$ P
  94. 4 ]+ X- Y7 z9 R$ @
  95.    double ang;
    + F- V" `' v8 E. V7 M0 {

  96. 3 i. N8 y) ]0 H, A. n! l' ^
  97.    if (EQ_is_zero(y)) {0 Y/ Y) T2 Y  A0 ]/ K

  98. " J; C6 w6 C+ t) s! m8 C. g% a
  99.       if (x < 0.0) { return (PI); }0 `  Z( U1 o4 e0 h$ Q2 C0 e1 y

  100. 9 u$ I( l( D7 P2 _
  101.       return (0.0);
    $ r9 _! {9 |; x- d3 h
  102. 4 e1 ?& z6 r8 u. E
  103.    }, x- s9 G3 E- K& R) ]0 {% u- `
  104. ( K, |; X/ z) G9 i: M5 B( _
  105.    if (EQ_is_zero(x)) {  d: q) s0 v; L% ~1 U- W  i: [

  106. 2 Y  i9 V1 G+ x4 t, ^
  107.       if (y < 0.0) { return(PI*1.5); }- z' ?# G$ B1 M2 w) B* G' i
  108. 2 D/ g# v$ w) u& R1 V
  109.       return(PI*.5);- x9 T7 j% ?1 K! g* |6 e( f6 b6 v
  110. + g/ M; J. c& z* j: t7 K
  111.    }
      t) x- D8 O# o8 J8 _0 T! a% j' Y
  112. 4 w" W+ M: h8 i8 n% K
  113.    ang=atan(y/x);2 C9 \7 T. c, o
  114. # j! X9 u6 z4 w0 v
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }$ W' k% ^/ ^' R$ m+ A1 [: y
  116. / \+ }  _' L% U- k" F0 Y
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }$ z& F" H5 I- x( Q3 Z9 r
  118. $ b7 ~+ u1 F% v: y1 P
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }/ |, X5 T; U+ p' ?0 Q" u/ K9 {

  120. 2 W5 B/ D$ P! [. T2 T7 A
  121.    return(ang);3 P# U% w2 D6 T' U& N7 Y8 a" [

  122. $ A7 ]% C1 P: y4 c$ X5 Y2 ?
  123. }
    . \$ C. g: w7 J0 P& A& T

  124. 7 F+ e/ C( ~% o( @6 e% f9 N
  125. //#=============================================================. X) }% `3 N( Y$ p% v0 b8 @
  126. . \2 p; T! `$ `" L( ^+ G
  127. double CheckConst ( double angle, double constvar  )
    ; K2 x& y0 a) j6 \7 n* H( M
  128. ) I8 T" U5 w% g2 ]6 ]
  129. //#=============================================================
    0 m. t4 e! w* q0 n9 x7 [9 b

  130. 4 E" h! i8 U7 `+ {6 o
  131. {' v1 [( ?' Y5 Z' x" S' t! \- v: R

  132. ; B& T/ Y1 K9 |) d7 y3 o9 A9 T+ E
  133.    while (angle < -constvar) { angle+=constvar ; }
    / `  G9 @# T) _. a/ X$ r
  134. : d) {! i) M. ^# A* M
  135.    while (angle >= constvar) { angle-=constvar ; }
    $ {7 _) s0 |1 S- F

  136. 6 ^4 P; C+ i5 P# R3 @4 @
  137.    return (angle) ;# I* h; B3 c. _* r
  138. ( {* |  r/ y( b
  139. }. O0 i& K$ H6 ~6 `

  140. . W: Y5 Z' C! M4 k
  141. //#=============================================================7 W' J1 C* g8 r) B7 T* T2 ?% P( t+ a

  142. 3 T  U. ^9 }4 D! c3 r1 B5 v
  143. double Check360 ( double angle )
    8 y7 R2 j. [; v' G2 a- o( i

  144. . W5 v, x% w) }3 b& }; j
  145. //#=============================================================
    4 x' T0 Y% y* }
  146. & n9 _, W+ `, z% l6 [' b
  147. {/ W& ~2 x) w' f( h
  148. 7 @' r7 R8 M0 _* u- l, L# @4 U
  149.    while (angle < -360.) { angle+=360. ; }
    % h3 [7 X6 ]8 H3 Y- K; N( |8 `
  150. 9 R2 q1 W7 \" Y6 e# U
  151.    while (angle >= 360.) { angle-=360. ; }
      [% e0 H: ^' y; D- g; Z

  152. 0 t5 o. f  {. k1 s/ m) C
  153.    return (angle) ;
    ) |) D$ `9 T7 H. f

  154. ( M* P6 I) ]4 {4 C
  155. }
    ! T' n$ i+ c0 d9 L7 K& V0 _

  156. : C! m+ y8 M: U4 v5 w
  157. //#=============================================================
    9 ]# H0 S6 U# ?- K3 h* L

  158.   l" f2 z& \$ n; @$ p
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )' e% g8 ~, g4 U1 a. v
  160. . w/ L5 ?6 @8 V1 a7 X
  161. //#=============================================================6 i8 x9 p1 I# e" _

  162. ' p# J$ V* t4 `, T5 f3 G
  163. {
    * T! K4 }  Q0 s# G. [+ n9 u+ u$ p
  164. 4 |  U! O0 _! O% D  _
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    ' r) O- n! y; I6 [8 T0 i5 n
  166. 3 `* f6 D+ q( d( u' Q
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }. S) {6 m3 v# g8 P$ E

  168. " I. Q! U: k' c7 ?8 C  Q2 z9 {$ F
  169.    return (angle) ;1 Q. U4 ?& b# A5 [4 G
  170. # P8 w7 b7 [0 C1 {& K0 B
  171. }
复制代码

  v  a7 W7 O0 e! G9 i! p3 g; v以下为摇篮5轴计算过程代码
9 x- {5 t6 s1 W
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);" w$ t1 n2 D9 [2 H/ ]# l/ X
  2. / a0 a+ u  \" y) `: D# V/ S
  3.          j=0.; B1=0.; B0=0.;* l2 Z8 d5 P/ L( a5 T* i) D
  4.   m1 y% J3 s4 c  F8 L
  5.           if (EQ_is_ge(i,0.)) {& Y. _9 }- b: t2 C
  6. - I# j. v# u& B- B
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }) s& |9 _; y$ A* r/ r

  8. 4 |6 U2 I: Q8 l' B
  9.           }
    / j' v. N' m8 U' J, R1 b/ Q
  10. " t* q& q, \/ S( e' W9 D
  11.           if (EQ_is_lt(i,0.)) {1 x1 H: D1 p* F5 }. `7 e+ E
  12. 0 Q: a1 A2 E* g* m2 q9 ~( F% n
  13.              if (EQ_is_lt(k,0.)) {
    1 ~, \' W9 Z1 _5 v; K! s* H
  14. $ {( Z3 f! A3 u8 G0 f
  15.                 B0=atan(i/k); B1=B0+PI ;% H$ D. ]% S% }4 s, b! s) g& D8 s

  16. " T: j' D8 w( `
  17.              } else {
    9 g2 L$ ], u1 y' V3 M9 `6 E
  18. % W2 }% y1 ?# ^( K4 t
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }0 U- X! H( r' _
  20. % _* W  v1 i; K; ]
  21.               B1=2.*PI+B0 ;
    * c5 z4 n: t: \6 E, n' J$ H
  22. ! E9 R' ]3 x& v9 R
  23.              }) ~; W7 c! y  e% p$ k
  24. " [6 G# i; P& P( R1 g: Q, F" U. N4 K/ F" Q
  25.           }
    * A& S* T4 W/ m8 u

  26. 6 h' a0 b& E+ O  L2 _
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;$ a  c! A0 K# g& H4 K  s9 q

  28. + ?& w( z& `  }$ s' f; ?4 x8 t
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    , N( w7 b; C6 |) @: `% [% G

  30. 2 d8 Y. r* D! f
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    5 L$ W- t- n. w  W$ L  u
  32. 5 s0 c: Z# S$ K) K  n( p9 J
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

4 k7 K) W/ W% s! Y0 m* T% n通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。1 N; |8 D  B- f# j& L
4 O; y& a; l+ p4 a2 u% |% a
640.png
# C) [! F6 O/ O* J$ a, k: T! ^* F测试结果:
) A: e# e+ d: W& H0 ? 6420.png " {7 O2 f4 m3 P: ^
2 k8 Y( P8 C1 n4 w! z  s& L4 D
反向测试结果 6410.png
' |2 E# G! n8 o8 d  u

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 1.175430 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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