找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 534|回复: 1

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

[复制链接]

431

主题

5752

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);; h$ q, z; m+ q
  2. int  EQ_is_ge (double s, double t);
    2 u5 O* ]# z. H% r6 b
  3. int  EQ_is_gt (double s, double t);2 f6 K; |) `4 n# V( _0 v( Z
  4. int  EQ_is_le (double s, double t);
    9 C8 N# y. n) S% t
  5. int  EQ_is_lt (double s, double t);
    5 P- [( t% k% S8 v& T
  6. int  EQ_is_zero (double s);
    - ^% i. `$ j( S: n( v! `3 j
  7. //=============================================================6 l. m  e9 x' a% J5 O/ n- D9 `
  8. double ARCTAN1 (double y, double x );( X0 M- h3 R: H8 ?! r
  9. //#=============================================================
    ( N8 R* Q! _: P$ |# B
  10. double ARCTAN2 (double y, double x );8 `, A1 Z$ f( I' |: X' D. I8 L
  11. //#=============================================================
    $ c7 k/ s2 N/ Q4 _
  12. double CheckConst ( double angle, double constvar  );2 e7 ?7 z6 A% v
  13. //#=============================================================
    7 r. T. e) @$ K, b
  14. double Check360 ( double angle );
    ' K% p" D8 Z$ x  V( l" y( N
  15. //#=============================================================
    8 W6 o8 q+ w; @" K
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );. p. L/ p* E  _8 X; i
  17. //#=============================================================
复制代码
6 G. [& H+ Q1 m+ C8 b
以下为部分源代码,用于判断,计算角度等8 Q+ }! w3 u5 U* ~0 p7 p7 a5 A
  1. int  EQ_is_equal (double s, double t)
    1 ^& Q# B' s& ~5 D" E1 X
  2. 6 o* |6 ?; d2 g  ]- I) ^
  3. {  b* k# F2 `9 g" x3 W2 \

  4. - {: K- n: v0 }6 V, o
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    1 o6 \: U! ~/ Z% t

  6. 7 s6 m% N0 \8 P
  7. }* g8 H' g6 D# W- I. Z! \5 G
  8. 4 A$ F! I1 ^6 s
  9. /***********************************************************************/, A( s3 v4 ?- @3 R

  10. - i& n/ v! Z8 j+ a# y+ B
  11. int  EQ_is_ge (double s, double t)
    * p5 y) n) Q+ Y. h
  12. ' K7 E3 i* G9 F/ G. s/ l( R) `
  13. {
    : z2 s7 _0 t3 x% p, f' p

  14. ! f# I4 c/ j6 s2 Z. S  q9 Z0 s
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    3 |. [, M4 l0 t, D2 Y$ D5 r
  16. 9 _( @' u' R% K7 p
  17. }0 _) U8 V3 ~+ O- E  }8 C7 ]

  18. & e* j) j2 D( d7 A% `  O
  19. /***********************************************************************/
    % u* c; F/ o* `" x0 I: j# P( x

  20. ) z% f; x& r! m. K
  21. int  EQ_is_gt (double s, double t)
    ; G: s9 n% }6 H* u

  22. % \0 w( [7 D2 u2 e
  23. {- E# P. i% W/ Z4 |8 s3 `2 |- N
  24. + E2 Q$ N- K+ a( H1 P
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    8 R) b  o: a- |) R6 m* A; @

  26. 2 d- {1 h9 }) P
  27. }* R( _& z/ g4 m+ n2 w. a

  28. # H2 q" w2 s$ o4 {7 ~7 w
  29. /***********************************************************************/+ J8 q6 O. O, O* L3 N* @& E
  30. " A# w- r5 ?# i0 J
  31. int  EQ_is_le (double s, double t)5 I( q  u: [2 r! w8 F7 ?" i

  32. / @# t  \1 r9 L2 M, {$ _& t
  33. {
    # t3 a- U, I$ h' E* L# I& b5 ]+ \
  34.   N( B* C# D: f" [
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }3 _- E) j, y  Z. w- h

  36. $ Q2 ^0 Y# z% O# X% h' A
  37. }7 c# H; }) ]" _

  38. ( U1 I$ W: n( R8 Y
  39. /***********************************************************************/
    4 m0 m7 P% Q/ Z$ r# @9 E  n

  40. , j$ {' H+ ^; Q  w2 L
  41. int  EQ_is_lt (double s, double t)
    , O/ F$ I  O7 b
  42. * F7 A$ _2 [2 m( G
  43. {
    % R# g0 ?3 Z6 e+ ?# Z3 x3 @

  44. ; k( U+ |. C5 x' a, f/ [* L. ]
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    " C; n; k; q' L% q

  46. , k% U8 [5 g# h, M1 v9 c
  47. }
    0 ]/ T0 W+ M$ G  c" J( ]) u
  48. 2 J4 C; H* O0 |( t* _" R
  49. /***********************************************************************/
    # S  O; M6 O& @+ N
  50. ( C1 Q% d% c9 D/ p, L
  51. int  EQ_is_zero (double s)
    5 v7 O  ~7 M' b9 |/ Q
  52. ( x% F" Z' `: x( Q% m* K
  53. {
    * I, S* ?% m) G2 b
  54. & v# F& J$ |+ }1 }+ x
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    1 G7 d# F9 O  {6 B1 C
  56. . ?, t: Z2 P0 W  I
  57. }4 H* s3 {  Q3 u% a5 I' L

  58. 1 ~# `2 w, {' k. I  ~" @
  59. //=============================================================
    ; v7 g( K; v( u8 b) L

  60. % j' y4 R) \% b8 C) X( H' L
  61. double ARCTAN1 (double y, double x )+ Y  s) z+ p( D! ]: J

  62. ; S4 f8 U7 d$ R6 F
  63. //#=============================================================; g/ l/ e/ J# ^# X( J9 _$ [5 v

  64. / Q% t$ L* ]$ Z/ m- D3 f8 N  |
  65. {) m3 v) W. }% D" b0 x9 n

  66. ! X( ^/ F/ @$ n( j' s# y/ B4 d
  67.    double ang;
    $ v( c2 j7 O4 P$ `& p+ |2 i6 M6 w

  68. ! j* m+ E/ a( r/ i2 A
  69.    if (EQ_is_zero(y)) { y=0; }
    / h+ A5 s) z  L% a7 X" Y$ w

  70. ) n. ~+ [1 v. W  q& q9 _
  71.    if (EQ_is_zero(x)) { x=0; }
    # _) d. {7 O4 k  W+ F+ k

  72. 8 V. {3 i; `% ?% X8 u* C7 \4 n$ r4 L
  73.    if (y == 0 && x == 0) { return(0); }7 [$ f0 ?4 l& Z5 r

  74. 7 q4 h, w6 w: J. b9 q9 i0 I  A9 F
  75.    ang=atan2(y,x);
    3 G/ I: Q* P, G& q
  76. " |/ ]* Z5 C' u) G5 G. `- {
  77.    if (ang < 0 ) {9 o: b2 Z/ z, P/ A; B/ G
  78. / T; y) y! ~; e5 E. B* O
  79.       return(ang + PI*2);9 v4 b9 e* ]1 X: g5 O; C) W/ N
  80. 0 ~8 V$ O- H+ I3 Z. k
  81.    }0 `4 ^0 N) b0 N4 K

  82. / o+ M. h; a1 T# O* E) N
  83.    return(ang);1 A7 w7 t7 d- i: _

  84. 1 e) S+ V9 I7 Z4 u
  85. }2 T8 d( ^# a& _- i, \9 I/ `* g

  86. 0 y! {# ]% P! D1 o7 p
  87. //#=============================================================& o& P- b; R% e

  88. * m9 {- J; e1 q: |: |. W, h* O
  89. double ARCTAN2 (double y, double x )
    ' [8 Z. M  B1 {; A; A

  90. $ b1 e2 l& g+ p3 f' @/ f' T/ m0 k2 f
  91. //#=============================================================- t8 W) l0 l$ O4 ~
  92. ) L6 d6 o, h8 @: x  u3 a! N
  93. {
    2 x# c4 s% A: `3 {2 }6 W
  94. 3 y: b6 b- e) S5 r% q0 Y
  95.    double ang;
    / y4 u) `% J4 Q% i; {

  96. : s, A7 z/ U, J
  97.    if (EQ_is_zero(y)) {1 X9 i9 l! m. e- m$ R

  98. 9 I% H6 L$ T7 P% B: E
  99.       if (x < 0.0) { return (PI); }5 ]3 n+ ]; V9 \7 E- j& H) L0 M

  100. : k7 q1 L: _& A6 s  \* ?" o
  101.       return (0.0);
    ; q" y) O$ n  B4 I% E( L: W; ]( h: y) H

  102. " y  [$ O* r2 S: J8 O4 \  l
  103.    }) t6 ~4 t# V) X

  104. : w" B$ L* Z- {+ X
  105.    if (EQ_is_zero(x)) {
    1 P/ F  M% ~$ O5 e5 J* i

  106. / {6 _9 V' m1 H  C; C
  107.       if (y < 0.0) { return(PI*1.5); }+ s' D% u; M7 D$ w( j
  108. + u  d7 l* A5 j2 p
  109.       return(PI*.5);
    - t0 M4 ]# m' |% A5 [' ?
  110. + _/ B0 B- D2 G) w6 a) h9 \
  111.    }
    - X" L# O5 N% V

  112. 1 E4 q/ U* S( }  I
  113.    ang=atan(y/x);( W5 F) \7 K+ k3 j7 q; ?
  114. 2 K7 F7 E0 C1 l3 T6 g- V9 w
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }, ^- L- Q. b2 V

  116. ( t. D, F6 ]/ q) @9 W% v
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    $ F+ O5 h+ W6 T  e1 N! B

  118. # J  H! x% A" }) A
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    , ^; z6 \: @7 e- w# |
  120. ( @" C! P  u! y8 ~
  121.    return(ang);8 q8 C$ F* h" O3 d0 k9 y1 w8 l
  122. / Y# }2 G) U, f0 k5 I
  123. }
    8 ~# K; e9 n3 C$ H/ a
  124. ! v( e3 o; Q% r( Y3 g, [) D
  125. //#=============================================================: q0 b( ]( X5 d0 W( H. y3 O1 l  E

  126. ( r: L8 U( ?+ Q. P7 j* K: [
  127. double CheckConst ( double angle, double constvar  )
    2 p( O7 D+ y+ ^" u9 G7 `3 z

  128. 7 `. L' x7 m6 A, U" u$ {
  129. //#=============================================================
      X4 q* ?5 @; c; B

  130. % A1 Y& |  z5 |' C  S) I/ `
  131. {
    # X! z$ l2 o8 P( ?
  132. . g3 ?$ e/ u$ k, T
  133.    while (angle < -constvar) { angle+=constvar ; }
    . b4 i7 J$ {9 F9 N  G- ?1 j: B

  134. 6 O+ e8 E* D" E6 q
  135.    while (angle >= constvar) { angle-=constvar ; }
    ! p- U! m. z5 i* V; H5 x7 p- l
  136. 1 F( Z) j# k- C: n% ^) A% e
  137.    return (angle) ;
    & e* O* E" a) D  q0 d
  138. ' B+ D+ f! }6 d3 C& ~- ?
  139. }
    & `- C1 E! a& l6 ]' _) p
  140. , U. d- Q5 M$ C/ m! U! l# e
  141. //#=============================================================( p3 Q5 m0 r5 e  {! C
  142. 9 `" x; V' O1 v# M( S4 _
  143. double Check360 ( double angle )
    ( i0 R! a$ s: m2 Z8 c$ Y6 j" o
  144. 2 V: Z$ @1 @0 o) S4 m( X! f9 X; M
  145. //#=============================================================. J" ?) V- Y) Q# D# t

  146. . }" f' o. a( x" Q/ ]8 b
  147. {- l+ t# C+ H. z! W; z% c. H, \
  148. & z5 F. G0 c: F8 ~$ X
  149.    while (angle < -360.) { angle+=360. ; }
    . ~4 a5 g& b5 E
  150. ' E$ t( l+ T: ]3 W# H( ^
  151.    while (angle >= 360.) { angle-=360. ; }" e. R* y( i" V4 `( I/ {
  152. ( \$ s7 K/ f+ g
  153.    return (angle) ;0 X8 E4 |. i: E7 ^# _
  154. : L; v' Q3 ^+ q0 k+ j
  155. }
    1 y: z2 s( V0 z$ s2 Y" d7 U. g5 t

  156. " K/ e+ {+ w: a$ e8 h2 Q
  157. //#=============================================================0 d4 S: l1 u% H* {, m
  158. / q' K, F' n0 Z3 a2 W% U: C9 C- g3 D
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )+ I! d/ S. r) F5 j

  160. ; |* o9 ~; n) I1 G' W* y
  161. //#=============================================================: G8 Y3 f" D9 D
  162. ( @3 A& e7 R+ l, _$ G3 E* w
  163. {
    3 }/ g- c- |( k+ x  a
  164. 3 a! {$ h2 `9 g( H+ n
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    & \. }9 I  R0 |
  166. , N* u- w3 w, u9 p* K
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ! U3 \+ P" R% ]# _* x! N3 H8 \

  168. ' J5 |  {+ g6 d5 m
  169.    return (angle) ;9 F/ _1 U+ X  C' }) y
  170. * T6 H( j. o% @; v" l
  171. }
复制代码

9 ^2 z7 b/ r4 I以下为摇篮5轴计算过程代码1 v, z& b8 t+ b( w8 D! @( G* }
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);6 Z  ?' i8 a5 P% |
  2. 6 r$ U( y/ p9 |/ M' S
  3.          j=0.; B1=0.; B0=0.;
    & ]0 l2 {  u0 u$ k8 j
  4. 0 K) Z% i3 @" y8 h
  5.           if (EQ_is_ge(i,0.)) {
    : Q6 }. c' }) b
  6. 2 Y4 S$ x5 R3 q  t  j# F
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }, ~2 u7 d- w9 I) M* o, ?* @

  8. 1 |1 V: K* S2 I+ H) I( S
  9.           }
    ) z+ P: L5 J' J) {5 {- e# \

  10. 9 n9 c, B% D6 ]) _! L
  11.           if (EQ_is_lt(i,0.)) {( j* H7 H1 ~! q9 N. ?7 `4 R+ w

  12. 4 C5 {; i+ @$ @
  13.              if (EQ_is_lt(k,0.)) {
    $ |, j0 S$ o& @# q/ v3 w
  14. & O! n3 }+ P2 O( n* S
  15.                 B0=atan(i/k); B1=B0+PI ;
    . y. r( @; i% ]

  16. + k# q' V5 _1 x
  17.              } else {$ o5 F  I5 E4 U! k4 a$ ^0 r

  18. - [% n2 c+ }/ N
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }5 m3 X" [& [" U' @7 k
  20. ; M2 Y/ _( \! O# [
  21.               B1=2.*PI+B0 ;! @! d' a' A; |5 u$ K# x

  22. # H7 R& s& g' y2 J1 }, Q
  23.              }
    ' o5 N3 n, |- ?& I9 U7 @
  24. 3 b! J' M: x' S" Y9 t6 T  q
  25.           }
    4 S1 S  @4 S5 Q# k

  26. / q. U8 [# L, E! z: L
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;/ o* _4 ]5 v# c3 Q" `1 _

  28. 0 d! s; P5 Y( e. P! @
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));; u  x: ?- |$ l( N/ l/ G/ E! b6 x
  30. , E7 Z) @4 @) e3 A3 v4 a& h  {# P8 s2 n
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;4 A* j" `7 C# p

  32. ' A$ k( y2 ]+ |
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

% D; e) C3 R% }  ]: O0 e' {通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
, n: r- \1 M: Q, f  V2 Y5 d
0 \4 y! K/ V' E# K 640.png
% C  F4 c0 H9 J' k! w% R$ t: J测试结果:! A; h, E9 e+ d
6420.png
8 p; v: \' d1 A0 {0 N4 A
. T& ^$ O5 _- K: ^& K: u7 E0 l反向测试结果 6410.png
- U( U" p" h/ n. A) P7 Q( B

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-30 05:20 , Processed in 0.182590 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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