找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8090|回复: 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);
    ' U! ^9 \  b% y/ R- x; |
  2. int  EQ_is_ge (double s, double t);6 E0 X" R& d& M- B8 v: q8 F
  3. int  EQ_is_gt (double s, double t);4 Z3 R0 s4 c) c( g6 ?
  4. int  EQ_is_le (double s, double t);
    7 f' }8 ]7 F' W: C$ G$ q, u! W( H9 t
  5. int  EQ_is_lt (double s, double t);
    8 d; q: h' ^- l9 S. F$ T/ g
  6. int  EQ_is_zero (double s);2 Z7 w' P5 @  O+ U3 a. l# K
  7. //=============================================================0 c8 w: c0 k# R7 d4 I2 b/ u  b' Y
  8. double ARCTAN1 (double y, double x );
    4 G  @7 d5 V, c) s
  9. //#=============================================================
    " P4 D4 |- \- x) w4 `/ z
  10. double ARCTAN2 (double y, double x );. L; l. ^8 z8 ?) x
  11. //#=============================================================7 v  V: K6 s, \- M7 A  _6 B# ^9 p
  12. double CheckConst ( double angle, double constvar  );# e& y% P0 _+ b* H$ t- {$ n& Q
  13. //#=============================================================
    - H# r2 N' R* k' r5 b; k- X
  14. double Check360 ( double angle );
    9 U' F3 v: Q  \5 f! O9 Z
  15. //#=============================================================6 z& a' G4 M2 I
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    2 q' A% G' u/ l0 [' G: d* l* m
  17. //#=============================================================
复制代码

+ W9 U, V8 s4 Q" `/ {/ c( C以下为部分源代码,用于判断,计算角度等' ~* l3 y2 k. F( d6 r
  1. int  EQ_is_equal (double s, double t)
    3 p% Q# ~. Y" U, g6 F* p& ~; o# ?" t- Q
  2. 4 O8 Z: ], u; @; }# j2 V
  3. {
    " _2 k* `4 M* J: ^

  4. 5 s/ s( _! M! y# ?6 F& M0 Y
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    0 B* _' U! ?+ N; {9 X

  6. % M- T8 c5 t& I4 O* I! _/ B
  7. }
      H% X/ J9 N* g8 I. G1 W: r9 z, ]* _
  8. ' [+ C* q6 |1 E- X
  9. /***********************************************************************/: q3 _: t% v3 ~( s$ V" K

  10. / W: H! d8 L# F6 y* `- l
  11. int  EQ_is_ge (double s, double t), i) I" Z! t) Y$ u+ Y# Z% t
  12. + g. o/ Z; a$ Q) C4 |$ N
  13. {
    1 @" _- t3 ]& v3 }/ M6 Y

  14. ( b4 W% F6 q: B' Z$ {
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    / Y9 Y8 {) N6 X4 \* ~7 }
  16. ( Q6 ]0 h. R. J  ^* J) a
  17. }5 j0 T0 D) B2 N
  18. ( h; e) ?8 A* d$ R( m7 R, q
  19. /***********************************************************************/1 w. \+ W* Q, D4 N

  20. 3 D) z' F) b% \3 Y
  21. int  EQ_is_gt (double s, double t)' R, C$ F1 u# s4 X& E

  22. , O( M  d" K# q* G
  23. {
    8 q( P$ \) J. {6 J  T) M' v

  24. ) h. s" ?: B' Z( Y
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    * [: o2 {* s  X4 g5 W2 X* u
  26. ! o3 y: h1 T' C8 X" c
  27. }. \5 ~* a' o( [2 g  [6 @
  28. : f+ I* n' ~) ~7 S
  29. /***********************************************************************/5 z) q3 h5 _& p

  30. 1 `$ G: ^3 p5 ]+ Z4 x3 y
  31. int  EQ_is_le (double s, double t)4 b1 j* |3 H0 }/ z, o

  32. & \* T0 C; E8 q. A4 D- J) k- }
  33. {! M3 n' h1 s4 o
  34. " Q! l+ [9 y* \# q9 ]/ O) ^  {3 |
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ! Y/ {, C1 j) N/ d4 ^; ]3 q& D

  36. ( p( U8 U  b8 q! E: h, k7 T
  37. }
    " H8 J; |4 q4 I% @% E
  38. ' S0 ]; L6 }3 W; h' H3 o0 N* L
  39. /***********************************************************************/3 d5 o* d) }( Q) Z5 K& L, a
  40. $ B1 h  ~* z7 g" Q) m2 I8 P% d9 S
  41. int  EQ_is_lt (double s, double t)0 ]" j3 O) V. ~: m0 i
  42. ! h3 b: ?6 X0 D+ C# i4 D/ P
  43. {
    9 `0 p# K/ n; y6 S; E/ C
  44. 3 ]! K: p! v% `$ w
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ! t9 C9 d9 k$ \+ z( i* _/ M

  46. 5 F( m' A7 J! Q) y) u2 e
  47. }& M  b( t* K; O% w
  48. 5 ^- D7 R3 w6 {( F6 E
  49. /***********************************************************************/7 _1 d. _+ q1 _% }" Y! n5 N! h* v

  50. , P# n. [* |" c) n0 d
  51. int  EQ_is_zero (double s)
    0 v9 s- [# E& x4 S/ |- _
  52. 5 i/ I2 o0 \$ s) P
  53. {6 b: x% U: e, D3 l: _% o, O. M

  54.   X4 g5 }+ w9 R0 b1 }& @4 H4 Q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ; L( D8 o/ h; S
  56. ) n% H; D4 d. g+ E% E1 r7 `
  57. }
    - }" b$ \+ H" s" h" a2 n
  58. ' ^: b! w3 d+ w4 _- i: S3 U. M7 }
  59. //=============================================================  ~1 F, {' b+ \4 _) x

  60. * W' Q' n$ f, E( {: B
  61. double ARCTAN1 (double y, double x )# A/ _+ `4 W# j% X$ G% b0 ^) k

  62. 1 f' A) j7 P, H1 b
  63. //#=============================================================
    # G: Q" ^9 T# O, z. x7 U
  64. + K/ L3 b3 v  N! m
  65. {
    + B" _6 g! _" _! v- i

  66. 8 Z1 T& [- J; ^
  67.    double ang;- m; Q1 q( @7 {+ a

  68. 2 J# Z0 ~' W& ?+ s$ _
  69.    if (EQ_is_zero(y)) { y=0; }( A# ]8 l" B# p& L* B: }5 w

  70. + t4 U+ f  \* Y7 I) |( D6 E; k: D
  71.    if (EQ_is_zero(x)) { x=0; }
    " |6 _- v, V3 s; K1 }
  72. 5 L0 Y3 f3 |- D7 E; i/ V) Q$ S) k
  73.    if (y == 0 && x == 0) { return(0); }
    ; V0 N: U' S0 N+ f5 ^5 V' ?
  74. . e; ~' X! X" `) a, c7 w" p
  75.    ang=atan2(y,x);
    + l; T0 I! S$ C

  76. " k7 {! ^8 o3 a. ^3 Y' D3 x9 r
  77.    if (ang < 0 ) {
    8 L! f( G+ [+ k. |& u
  78. ; H; C0 `  Y# w2 L, D8 B+ `, h$ p$ |
  79.       return(ang + PI*2);
    8 O: I2 u- |2 m5 U$ N- z$ k
  80.   h1 e& D3 h' o& U3 E
  81.    }  J5 \( M* I2 P# y

  82. 4 O7 b( @& H/ m1 g! p
  83.    return(ang);3 ?/ C6 W+ z, f" u$ H4 T8 u8 z
  84. " D' {. O$ V+ M
  85. }( h7 l$ V1 H5 X- P& Q8 y3 K! r/ x
  86. - V8 {1 Y! C- R+ x4 }  l0 Y
  87. //#=============================================================. J! J1 z- d" o

  88. 2 _2 f/ A/ Y( R% D
  89. double ARCTAN2 (double y, double x ). b9 \- A) f1 b
  90. % M+ S: S4 s2 `7 C; r9 A3 O, i) F  g
  91. //#=============================================================
    1 |* `% b; }  o. f
  92. * c1 Z8 M+ W; T2 K( a! {* W+ M
  93. {
    - x, H$ I' B/ Y! c  g/ p! B+ A

  94. ) ]3 ?. y: P/ U/ C  h6 h' a
  95.    double ang;* o" }9 p, n, S  Q% |  n

  96. - e# F& ^8 j! r! [+ e# S
  97.    if (EQ_is_zero(y)) {2 k& p4 d$ W8 S0 r  ?) X

  98. - J' }! h  z# n, D
  99.       if (x < 0.0) { return (PI); }
    8 a  i' \% O3 V% _
  100. ( C, ?* ?4 a# q2 D9 Y# {$ E
  101.       return (0.0);/ C  _9 h$ X$ A5 W* f- p
  102. ( L1 D4 k* c$ j0 M8 {, g/ E
  103.    }
    * d5 F! h+ J- D  A1 U

  104. , l+ K' I* }& A2 I' ~
  105.    if (EQ_is_zero(x)) {! b" n$ H& r1 @& N0 c
  106. 5 I/ [7 q% P. `' d: h$ t
  107.       if (y < 0.0) { return(PI*1.5); }: q" q6 T  m. g8 T1 ?2 ?. R5 h

  108. 5 o; P% o$ t+ M8 }" C) k# N
  109.       return(PI*.5);
    ' V' w5 n7 t" ^& r: I+ G

  110. ) O, b/ r4 ?! [1 v
  111.    }
    - b, ~+ F" s, k  g6 B, z- Q
  112. 6 U5 X7 h: _! i+ u- K9 U& A
  113.    ang=atan(y/x);
    ! n+ o. V- H$ A$ c
  114. - `& z9 y+ K  E% R8 {
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    " _4 Z' _( }$ ]" {% T

  116. ( R$ M: M! F' @
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }, F; Q4 j; o$ M$ K, ?  [4 B
  118. " P( V( S& n+ ~; r$ e5 T( W) B
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }" k# Y% I$ ?3 `" _1 |0 l* g
  120. . d7 ]$ W- e6 i$ Y4 o
  121.    return(ang);4 {+ @9 Q3 }) z$ ^, L
  122. & e8 N3 s% h' `; P) d; P0 N
  123. }
    8 w. G' {* f+ D
  124. / I/ Y; @2 l; X! W5 v9 c9 L
  125. //#=============================================================% e0 m- c1 B: K* D* `; f

  126. 5 T; m# q) r( o3 k- P6 }  s  s( \: ]0 B
  127. double CheckConst ( double angle, double constvar  )
    & o" j  z# K$ _7 V' R" M: F& G7 }
  128. . _: B' U. a  L4 x( P, Q- l7 F
  129. //#=============================================================
    9 t& y' ~" a$ o8 X0 h
  130. ) W* f  m" g9 k4 A
  131. {
    4 A9 Q" R9 Y) r/ a7 W

  132. 7 L# k, j- r# h& f3 V! s
  133.    while (angle < -constvar) { angle+=constvar ; }
    + u- `1 j$ _! \0 ^5 W# i( c

  134. + `6 U1 J1 P) s1 e, {2 ^! i. M6 a: D
  135.    while (angle >= constvar) { angle-=constvar ; }
    ' l7 I. Y& s# Y$ z
  136. 3 |" p0 P: v( u3 J
  137.    return (angle) ;
    * W* y8 O) P% c) [" T4 o

  138. 7 x- k  b- o0 M6 a4 `
  139. }
    ( B  c  n/ w' y1 e/ O" T* E

  140. # ~/ s; V# Y$ ?  j9 H3 G
  141. //#=============================================================
    - U8 Q6 O8 |3 F3 e

  142. # T, I5 f0 C9 L/ ?1 B3 E
  143. double Check360 ( double angle )
    & C$ W& h; T# E& |- s, P
  144. ' Y; f: R. f1 N: g5 W
  145. //#=============================================================
    / I7 k8 c7 e5 n4 l

  146. % V" c1 G, u/ r0 o. c' s$ V, F$ t
  147. {
    * Z) ^7 x7 q' Z# O

  148. : R$ E6 m+ ?9 z2 R) A
  149.    while (angle < -360.) { angle+=360. ; }3 y3 L0 i& p# |" \# `

  150. % Y  X1 ~3 _0 d
  151.    while (angle >= 360.) { angle-=360. ; }
    $ F& R; d+ N9 {1 D' Y

  152.   k( l, C  G3 j1 y
  153.    return (angle) ;
    ( o8 w! n( m) W: C2 ~# M: ~; s) V# ~
  154. : p5 \" f( G% @) u: z
  155. }& c" z, t- r/ T# Z

  156. $ j9 m( `. |3 @  g# D; U) K0 D
  157. //#=============================================================
    0 z5 V+ ?8 d6 C/ W- x
  158. % u5 w" Z# p3 j- b$ d8 V9 p
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )1 w/ o2 U3 j3 h: A; c* w& k
  160. / I5 M. K) C3 w) W7 `3 z/ p) F% p
  161. //#=============================================================
    . ~% ^' M# P7 {% H" `( Z

  162. % ^6 |( c5 I+ H- D' O
  163. {
    ) r9 D7 s- M- `! H* R, s

  164. - ?5 ]; R& H7 P3 F6 F
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    , \& a( q: I+ S7 T5 F
  166. ! p5 U# d' ~" r- K! C+ I
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }* k0 N/ P3 ?+ f

  168. ; k4 G. x' _7 O% J
  169.    return (angle) ;
    ) i6 t* R9 K  g+ j- I2 f  d

  170. % h8 d$ D) y8 V- y
  171. }
复制代码
) ^; Z  W+ v! a- U6 v( t4 F3 }
以下为摇篮5轴计算过程代码
. |" ?+ p+ i' j
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    2 v+ P4 W) b% i/ k, o% O% _
  2. 8 Z( [" `2 @8 U, q* E# J% V
  3.          j=0.; B1=0.; B0=0.;% k1 Q7 ^& b5 F( M  H) e% ]: V
  4. " ~5 j' s, \# O6 M0 X# S& V, t
  5.           if (EQ_is_ge(i,0.)) {# s+ @: c  R% a' t0 _) V
  6. 2 V& q) V9 n7 v! e2 W% n
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }# v* ?6 d/ U# w$ ?" j# Z
  8. 6 M$ L/ S* c$ s! Z
  9.           }
    ! h6 `7 E7 f% C+ {
  10. ; i& S% }" X( }* `
  11.           if (EQ_is_lt(i,0.)) {- T# R) G, U  @# N# C2 T
  12. ) v+ X4 v( b8 k( G- L
  13.              if (EQ_is_lt(k,0.)) {
    ; D: o  C+ i2 O8 t. R4 R0 G

  14.   I' ^2 ^7 w  w3 {2 z9 j5 @
  15.                 B0=atan(i/k); B1=B0+PI ;2 g3 q3 q3 x6 X: F

  16. 4 J' Z- V2 r+ p; f/ C7 y
  17.              } else {6 U4 x. Z3 e8 _) t8 B4 ^, w2 K
  18. ( {  y& F- O- u, T
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }  b4 v" @' @1 V9 P3 y4 x
  20. * I+ I4 N( [# j4 U& b
  21.               B1=2.*PI+B0 ;  a1 }/ e8 g9 z. f
  22. . z! e- b5 H' j" m5 k
  23.              }
    3 J: B6 F' b+ a) F) L0 C8 _
  24. / w8 m6 Y; m/ }9 H
  25.           }! e( {. s, |$ K4 I5 V

  26. 3 i- U$ U: K, X3 u8 x
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ( y* b+ j* t8 ~' s, {7 |6 C

  28. 0 q: |( W- h  c0 o" m
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ! W: P- I: ?7 f$ J: K/ |- L

  30. $ }6 [/ M* c6 a) s
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ( d  M! P' w* m& p2 j$ r/ b
  32. ) a! N% _( A. S- Q* I* U5 |
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

/ \. B. l* M" i) A5 b6 X, b. f通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
* `3 v' m1 m% c, D2 m; u: Q5 A5 ~
5 P8 N  g+ c# k8 o$ P# u( l 640.png 1 U0 J9 ]1 z; P; r$ G
测试结果:% ]6 H  Z) L8 _/ i1 P
6420.png
9 ^, O) y! K+ ~! w; F4 _# y" E
5 V6 m, F& ^. {0 y5 H# v& B反向测试结果 6410.png 6 D0 e) V3 p2 K4 J0 Q+ i

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

275

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-25 22:50 , Processed in 0.475167 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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