找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4523|回复: 1

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

[复制链接]

431

主题

5754

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);) Q( x1 m3 T2 j+ \0 M. B
  2. int  EQ_is_ge (double s, double t);
    - j' W% Q' p% ~( I8 g: j9 z
  3. int  EQ_is_gt (double s, double t);' S: o8 v+ r! c! m) C: ~
  4. int  EQ_is_le (double s, double t);5 \: I8 z+ n: b
  5. int  EQ_is_lt (double s, double t);( e+ }, J& J$ V9 v
  6. int  EQ_is_zero (double s);6 u2 k. w7 P& F& e" Z
  7. //=============================================================0 N* J* z( \" f
  8. double ARCTAN1 (double y, double x );
    5 ^  S8 I3 s# Q. F" j
  9. //#=============================================================
    0 @3 u% u9 W7 Y) ]' g
  10. double ARCTAN2 (double y, double x );  _* ]) ^4 ?6 H- ]& {7 q
  11. //#=============================================================4 k4 w; I! j) ]2 Z  q6 e
  12. double CheckConst ( double angle, double constvar  );
    ( l& A' H4 N+ X2 Y- {
  13. //#=============================================================
    % F0 q$ u' q5 `/ L( H* c
  14. double Check360 ( double angle );- A. D7 E. w; K# A. x* s
  15. //#=============================================================0 F6 l$ V5 H1 N) X5 @
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );: L! @! ^" h/ a; k5 |6 }% \3 Z
  17. //#=============================================================
复制代码

  }7 i. s! \2 ~- S! a  N以下为部分源代码,用于判断,计算角度等' i$ ~1 r2 Y8 s  g5 O% Z' D* G
  1. int  EQ_is_equal (double s, double t)4 q7 I" e2 N1 r# X# [

  2. 1 H: ~: w2 E! H% a
  3. {$ D" J8 C1 u6 S7 x8 J% _

  4. " ^0 g3 T4 E. }
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ' e# X  e! W7 t6 A0 L

  6. 6 M' X6 L, }& k" g" f/ i+ b
  7. }
    5 m. j7 ?1 \- [! J$ D: b

  8. ; N% X7 |* ?; v8 T1 Q
  9. /***********************************************************************/$ ?+ }5 G! @7 Y6 n% N8 q/ H. r$ z) W2 p

  10. , F4 l8 T, ]& @3 K5 J. C
  11. int  EQ_is_ge (double s, double t)! R  {( R% |* y! A9 w: ~5 I

  12. 8 ?& a. c1 ?8 Y. s
  13. {. u8 `9 C2 h# {: v4 d, n9 O
  14.   S+ K1 g1 g2 _: c
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }, A0 F5 P* h2 `$ Y
  16. ' j6 v9 O. j6 }
  17. }! d: i( n5 |1 }( Y& n. ?" p
  18. $ h% m7 k4 q. V! [9 V+ Q+ U! j
  19. /***********************************************************************/
    3 M6 o6 Q! A, c1 H* O: P

  20. ' R5 M: M' }1 y
  21. int  EQ_is_gt (double s, double t)
    4 a9 C! s+ Z9 _

  22. $ V* R) x$ n# A! m/ g2 ]
  23. {2 O  r' s$ }1 [4 i2 k7 p0 k6 C
  24. ! G' y! z; c+ Y# J4 p
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }% w# o1 I5 W1 G' d, p9 O

  26. & K! r/ [, f0 v+ K8 o7 F
  27. }
    8 c' N  C, m2 S- E/ }/ E

  28. # p$ u4 n: x, J0 z0 r; o; ?) P4 I! x/ P
  29. /***********************************************************************/
    $ i1 h1 y+ q7 R# U+ C  j
  30. 0 w. D) Z0 k& ~  P  u
  31. int  EQ_is_le (double s, double t)3 R* }+ y# \4 d( O% ~3 f) I5 i
  32. % Y& s9 t% F: q/ n# B0 T0 g
  33. {. c6 n2 y& T. Y. M# I; x, O1 {

  34. - }$ \' Q' \2 }1 f
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    + T/ r% M7 U* ]% |; G4 u

  36. 9 d6 d5 T$ b2 v/ S' |
  37. }, y1 }! a6 F7 {# w" G4 y  o# P7 `4 {
  38. 0 D  O2 u0 I. _% k2 }, G# Q2 t
  39. /***********************************************************************/
    ! N+ T' c6 i4 q: r
  40. 9 ]7 q9 a; U( ~# a# \. R" K
  41. int  EQ_is_lt (double s, double t)0 `; g- Q( f% ?% L. f6 }

  42. . `# D+ @6 q7 \( j
  43. {1 K* A; q. d% h- R: E" a

  44. 1 U7 g/ F6 L$ S$ Y
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }1 R: H' I+ E& M5 F4 e
  46. . Y( p1 w3 ?8 [2 {# q1 n
  47. }
    , v4 K; D* H% }1 ^5 Z7 F

  48. ) M; M+ w- k" }. X: o
  49. /***********************************************************************/
    : h% Y5 ^; J2 y( p3 T! x
  50. ) _4 g: w% l$ e" O$ ]1 [
  51. int  EQ_is_zero (double s)
    : w6 e; a' D: T1 N$ [
  52. " y: S8 _+ y$ W- S
  53. {9 v0 R6 ?7 P& z+ c) {

  54. 1 q+ p& t5 T' R- H
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    + K) t. e, x6 Q8 @# j( d& H# e

  56. 6 A0 {2 O% h% @7 a* H  I' @4 G/ Z
  57. }( d2 l- g& W, @

  58. ; ^1 h$ z  M; O4 L% }3 k; M9 x) V
  59. //=============================================================
    1 m+ \0 Y/ S3 M0 a  J1 U
  60. ; ^/ @& h3 r' T) p8 T6 V
  61. double ARCTAN1 (double y, double x )8 T' z3 Z% h9 I# k
  62. $ G5 |+ h( G" x+ w
  63. //#=============================================================
    1 x9 ^. T3 X# u. ^1 K4 s! C" j! B

  64. 2 A# A6 J) R8 K+ ^/ K) D. K) ^
  65. {
    9 i& J0 ^  H1 T. }6 y6 C

  66. # L1 k6 a& O0 N9 x& ^8 \2 c
  67.    double ang;. b2 d) L. i2 ]) O2 T0 V
  68. 7 E. z9 ^% v/ v+ X1 ]/ ~3 ]4 A
  69.    if (EQ_is_zero(y)) { y=0; }
    # ?! s' t# K+ v7 n2 O

  70. - b9 |8 Y. E2 V9 n. n5 H" A, d
  71.    if (EQ_is_zero(x)) { x=0; }
    . [3 M( U4 N$ [* y' `( e
  72. ! x1 o; X) F% b& {/ x4 u, P& c
  73.    if (y == 0 && x == 0) { return(0); }! n& O9 W' ^( }6 ~4 }

  74. # z- n$ _1 a- _2 {
  75.    ang=atan2(y,x);
    - U6 L+ F3 x( S6 _, p2 M

  76. 1 \$ I4 ?) `! ~2 n1 r$ X3 C0 X
  77.    if (ang < 0 ) {* M) M2 d8 l1 ?- P; }) _) u
  78. : ?7 G# ~2 U  B) x& \9 j% C3 a
  79.       return(ang + PI*2);
    ) j$ D3 l; r0 T" [5 C0 f

  80. - @4 |5 w3 v" ~% G
  81.    }
    8 D- j' t& ^* ]; C. L# ^/ H& ^3 Y9 D

  82.   N1 ]% g* b' w! k2 \7 P2 @9 R
  83.    return(ang);
    4 ~$ B* R3 ?; w1 u9 y" O4 U
  84. 5 Z. Z5 f+ Z; ^5 x4 Q2 f5 Y
  85. }
    / D1 y, ]0 C  `. f

  86. 8 r0 H0 Q, Z) |+ T0 w4 M, E# t
  87. //#=============================================================5 ?7 p* A, z* p+ ~$ e- y

  88. 6 m+ r5 b( L. I4 {
  89. double ARCTAN2 (double y, double x )
    " i. b7 ?! A: _
  90. 7 o( j+ u/ c5 ]) {" k
  91. //#=============================================================9 S$ G# ~. u& L2 p# [3 w& E) _9 E

  92. / n% ?# j9 U4 ^
  93. {& g5 x1 x, o5 z( A: X

  94. ; s8 @' z8 O5 Q" T
  95.    double ang;! Z1 t; x' `+ q) c5 q1 m+ ^

  96. ( h' `2 ]6 q5 ~
  97.    if (EQ_is_zero(y)) {
    : r5 r& ~5 F' Z/ k$ U4 ~  q) T1 z
  98. ) p8 y6 W3 w6 {" Y
  99.       if (x < 0.0) { return (PI); }
    0 o0 z" k( _& y3 T2 `

  100. ) C4 }2 \4 q$ J  w0 T
  101.       return (0.0);7 l. q' x2 B5 P: ?

  102. 8 S; w9 r; }! p8 |$ b# K" t& z, U
  103.    }
    $ r8 s3 M% O( o5 G! d

  104. % A) u# `, g2 ]5 z: A: T
  105.    if (EQ_is_zero(x)) {9 \) r3 G# }5 G7 E2 k
  106. $ N  [9 {& Y* e3 J7 \4 U7 S
  107.       if (y < 0.0) { return(PI*1.5); }
    & q9 t. A% `, h7 X# Z  l  F+ n

  108. 2 C, g" T; p/ ]% n( l/ V9 d
  109.       return(PI*.5);
    ! F1 k8 ?5 S  }' a% g0 O7 d
  110.   L0 \% `& F1 c: P) B- V
  111.    }* y1 A5 U, a" w4 n, @" j+ U

  112. , \6 j5 v4 ]  Y" |
  113.    ang=atan(y/x);
    ! e5 o2 t. b, A! X
  114. + i: }  W/ w- E$ b9 v
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }+ X2 X( B* q4 _; M
  116. & D0 I8 t9 R1 T/ T9 ]: I/ k- R  P
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }9 h  ]- s9 {8 u' z

  118. " n; B1 j: ^! W3 ?* W4 L* Z2 Q
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }$ l3 p1 p1 ^# G; |
  120. " ^+ O/ T: V8 G( `+ X$ m
  121.    return(ang);
      v. T# J6 ]$ L% ?0 Y
  122. / m5 @; d! i+ ?
  123. }& q9 G  ?* B( N# n1 H* t

  124. 2 e" C6 V; g" Z. p
  125. //#=============================================================# e# x; s; ]# j9 j# i3 p) S
  126. 9 N9 }4 G; ]6 _% w( L$ M0 V
  127. double CheckConst ( double angle, double constvar  )
    ( y4 F9 T. _* Y2 ^1 \: i- b
  128. , L7 q7 f; |! E2 f, D8 Z- W
  129. //#=============================================================# Q& h0 v/ B. r4 ]# _  K  R
  130. " F0 y9 G7 n# s- _2 Z& v$ g& ?
  131. {* z4 j2 s0 A3 m7 _" _

  132. 3 p# d$ c# c2 d( M
  133.    while (angle < -constvar) { angle+=constvar ; }8 h0 l0 J2 Q9 y( a+ ^

  134. , W. q8 m% n* T2 w. I/ g
  135.    while (angle >= constvar) { angle-=constvar ; }
    1 Q2 ]; V! i/ u
  136. ! e, y0 ]# B+ Y6 X1 e% h$ Z
  137.    return (angle) ;
    / ?, H- G- w4 W: G, E; z6 c  ?

  138. ' S3 {- n6 B) \4 M, W
  139. }/ B! X0 `% ?* L; Y$ H
  140. ; U5 T1 A; v+ z! W0 v
  141. //#=============================================================
    , I" c$ I" B1 x8 g2 R6 j0 y( P

  142. ; ?" c# B& r- W7 |" u- Z: U- n
  143. double Check360 ( double angle )
    1 G' f( V4 r6 ?( _: o7 p1 D) T/ E1 X
  144. / y( {# X- c) y, a8 e& S/ X
  145. //#=============================================================
    - `  z/ D+ u  m% Y4 n, a
  146. ) L4 H) I9 J- s  {' `" P0 d
  147. {
    # L8 b! i& Y* D# t3 G) Q
  148. ( e% A# B! A5 I: P0 Y. z0 q- Y
  149.    while (angle < -360.) { angle+=360. ; }
    ' U; j# u0 g0 S

  150. : A4 a0 j3 f4 Y/ u0 y
  151.    while (angle >= 360.) { angle-=360. ; }# [# O) k1 D/ \5 ]

  152. 5 }  R8 T' s/ w- K+ ^; T' ]
  153.    return (angle) ;
    ( o& z. k. X" |- d' a* R
  154. & e, P5 Q7 K' H
  155. }
    0 Z: l6 B: [3 y: m+ p- ?
  156. + J4 d/ i' l' r5 z$ j, l5 X
  157. //#=============================================================3 w& y, W/ u9 k6 s( D+ @" Q

  158. 5 C: J) b5 j! B
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )( h5 a) y3 I7 ^4 `  C; J: w; o7 a

  160. # o1 i5 ~" W& g1 v% o
  161. //#=============================================================
    . _* q4 |6 l; O" f- |

  162. ! I1 q5 ~3 u. T% e0 H" K' U
  163. {5 A; {1 S5 w+ q0 i1 z; _( \
  164. / m) w& m# P2 s8 J! V% d
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }# G# J4 X7 u; X& [( C9 |
  166. ! Y/ n6 p+ _# C8 d' p
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }$ Q$ _/ W4 {% T- E1 E0 @/ S
  168. 6 F1 X3 }1 ?4 v" j
  169.    return (angle) ;
    6 m, W# V) I7 V& S3 A1 O
  170. ' S3 [% K; V: q  |" e% j0 u" h
  171. }
复制代码
' p4 E. v; B+ t0 ~4 x9 e
以下为摇篮5轴计算过程代码0 t& H) a( r$ I3 U
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);) l# L  H" m$ T* H+ K
  2. / m; U1 R5 Q) \, _- Q
  3.          j=0.; B1=0.; B0=0.;1 m% B' p) r. T% i- v  @- f. `

  4. + k$ I! _  ^# d/ W
  5.           if (EQ_is_ge(i,0.)) {
    & J5 y+ d/ ~1 G& o7 X6 s
  6. ' `; }- h6 r5 `8 o2 J+ ^
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }9 V8 V! n4 e% Z' l: F6 Z* i- `

  8. : Z' q8 l/ O& D
  9.           }& N  e" V* j0 L/ h& ~6 C  a

  10.   U: `8 Y* F) i4 x3 G9 ]
  11.           if (EQ_is_lt(i,0.)) {
    $ V" p9 H& a$ {; V+ ]; S( D

  12. # @' m% P! S0 Q0 r
  13.              if (EQ_is_lt(k,0.)) {: o9 T, X9 i$ X" A9 Q  G
  14. 1 m* d% p: A$ E5 z4 u0 S
  15.                 B0=atan(i/k); B1=B0+PI ;
    - S) p! `5 V2 |( V

  16. 8 {! n1 S+ }* z6 S7 p
  17.              } else {
    4 G  v3 G+ P; O' Z8 ^- T
  18. ! H0 V1 M4 f; s# q5 T4 O
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    2 S5 u; y3 l6 D, Z

  20. & p5 i: }2 b: h2 M+ ]. Z
  21.               B1=2.*PI+B0 ;
    " m; w, g  \3 b  z" z' m6 O2 y; l

  22. 3 h1 B. O% W0 R! E2 f, Z3 y5 A9 k
  23.              }8 Z% k" Q& s4 O( ^. {

  24. + ]( k" f  r% ~, f  W) h
  25.           }: C: H( W- G0 E. l4 |$ n

  26. & c! z3 h. l- e, B* s- N
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    9 j5 r6 M: e# s' b! [) X! @
  28. & Q5 C2 A. }! o4 B
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    . M, k! ^' W8 B# d& |! ]( _$ j; }% k
  30. % {; {. O( N6 E- e9 j2 t- Y$ Z
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    & ^6 m" F: c6 \2 j9 q) ?

  32. , w3 o3 n! }% |# a$ T) B
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
- {. b) b2 v2 G' C# n
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。6 t3 a0 F3 Y6 u. G# H& H

+ ~( k: V, O5 Q5 I4 S7 b 640.png 7 S4 Q9 U5 Z0 C$ L3 L! F
测试结果:0 J* z" |. N2 ?4 w1 f  l) E
6420.png
, n$ i. q& v# L9 L9 S; R& ^) _, H6 R+ X& O$ ~& n* [
反向测试结果 6410.png $ V: R& A3 M0 W+ y

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-8-21 05:34 , Processed in 0.361860 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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