找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 434|回复: 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);8 n7 m" k6 ]! v. \  n& G5 m
  2. int  EQ_is_ge (double s, double t);$ K5 U. O, y. N$ j. P6 y
  3. int  EQ_is_gt (double s, double t);
    - J5 ?/ C6 ]  A
  4. int  EQ_is_le (double s, double t);/ a; R' n2 T( C+ p/ Y5 L, ^
  5. int  EQ_is_lt (double s, double t);
    - c1 x  T+ \% |' {6 V/ d: C# |  `
  6. int  EQ_is_zero (double s);
    - N4 p0 H' t4 T' _
  7. //=============================================================
    7 x: e) x4 ~  r) P5 Z
  8. double ARCTAN1 (double y, double x );
    2 x1 O( \2 r3 m8 I
  9. //#=============================================================
    2 ?% R$ u9 |% m% h6 i# s
  10. double ARCTAN2 (double y, double x );4 G6 y; G# f$ u2 @( B( x
  11. //#=============================================================. N3 r  e( H$ K( q
  12. double CheckConst ( double angle, double constvar  );
    0 z2 s( S/ ~5 {
  13. //#=============================================================7 Q/ M9 W0 e( M! ~% P
  14. double Check360 ( double angle );
    " |- n5 y1 V; i6 l) B6 i
  15. //#=============================================================. o6 f. [0 O( O2 V. \3 J
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
      r' ~  L6 D6 Y
  17. //#=============================================================
复制代码
- Y0 X& j  c, t( }- `
以下为部分源代码,用于判断,计算角度等# ^9 l0 k% z& T6 \* ?4 m
  1. int  EQ_is_equal (double s, double t)$ y1 Z/ r  W  U

  2. ' \# k- B/ H* s" }/ P1 l% T/ j
  3. {) W' v4 L( }7 a* i

  4. / o7 w; ^' h# l, d2 o% Y4 F8 p/ ?  y; R
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    * N. ?4 F5 i. L. O! C2 |

  6. . u" ^+ B! ^9 A! b/ P
  7. }% Z5 w1 I. j" h4 F2 V8 q5 ^/ E

  8. * Z8 Q# u/ D2 O% N& T4 u
  9. /***********************************************************************/
    1 u7 s* f9 h( m  |" Y
  10. ) A8 k- @3 [  v% a' t
  11. int  EQ_is_ge (double s, double t)
    . y" O; x% v. G* f8 Q
  12. # Q( X6 m: q! }$ o% Q) w( w
  13. {3 s) u: D$ g" n" M7 B

  14. 2 V$ N! O8 p: f1 M& |
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }- M" D# b: b! U6 E0 o) U; }
  16. ! Q/ `8 v5 y5 a( o) {
  17. }. n' j  h4 L6 d7 d

  18. 8 g) U" s" S% ?$ ?# G0 l+ b9 R
  19. /***********************************************************************/3 ?0 T2 c. H# X: t6 [5 w

  20. 6 u3 i( l* j1 q+ w
  21. int  EQ_is_gt (double s, double t)
    7 P% ?0 d  G* F! \2 t( d+ m+ `: R- U. t

  22. 0 l- Y" b% s3 p7 n  M' s* _4 P
  23. {
    & d2 G% ]7 T5 m; m7 m3 F4 a
  24. 7 |# i& L- E# E% j% p- Y; v( Q  r; C
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    8 d4 ?3 F, Q* \
  26. ) P6 n9 p( m9 {& o, h
  27. }
    1 H0 J  G& N3 k8 x5 {
  28. $ O8 d) o: h0 i9 l. f, h) C2 Z
  29. /***********************************************************************/% c. l1 l8 u$ [

  30. 9 u9 [1 }# }8 P! X
  31. int  EQ_is_le (double s, double t)1 Q6 Z0 k4 r5 D

  32. $ D+ I4 d4 H; F) m4 y. v0 r6 P5 s
  33. {/ h0 e) h  l- Y2 H. e8 a7 C" R

  34. 0 a4 S. [# q; f* R
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ! J1 l, a9 d" ~3 ?: D

  36. 9 r- b+ a. E7 C
  37. }
    2 O7 o# X4 z* G0 Q

  38. % n7 J$ w3 u2 ^
  39. /***********************************************************************/! k/ s. w- B: I: P( s1 U
  40. 6 L' m+ D! ~* O/ P/ A2 T% X7 r! K
  41. int  EQ_is_lt (double s, double t)
    4 [1 D2 v" Q& `- r
  42. 2 o& c. P* C7 _
  43. {
    / Y/ P+ L7 ]- S8 f* u; z9 r
  44. 5 W4 {; A( W( Z& ~/ |
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    / d1 T* S5 P2 ^/ y5 q" b/ W

  46. 4 v$ A# T3 Z; C
  47. }4 c0 Z1 B) b# B6 p7 N0 e4 x( D
  48. # e1 u- P+ D0 B6 U6 P6 z$ g
  49. /***********************************************************************/1 c! D$ d: F) r1 q! ?  Q8 f% O
  50. 9 T! e+ y9 @0 ~6 p( n
  51. int  EQ_is_zero (double s)& H( Q% ?/ j4 i, F  v6 |4 Z

  52. 6 T6 ?3 T/ i1 ~& R
  53. {
    / v! S$ K' Z. A

  54. 8 S8 o; M$ _+ F0 R$ t' \
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }2 d1 @$ [1 q' M% {# y* T$ c
  56. / B3 n; x) @, G2 U' D
  57. }
    6 e5 V% D3 x" P4 m& [  F+ q9 z" r

  58. 8 i% B7 y7 {% D
  59. //=============================================================
    % }/ Z: H* R3 D4 Y7 u
  60. 4 o0 ?+ U( @* `9 e" g6 @( U
  61. double ARCTAN1 (double y, double x )- c4 J) z+ y2 M6 Z8 N  n

  62. % O1 f! I: n4 m
  63. //#=============================================================
    ; H/ t6 I! t  s3 @& D5 ]

  64. ) f* I- N7 Z& H% s
  65. {
    / p! c% b* X, l. A

  66. % c$ f9 h) j- W, l3 S* B7 K
  67.    double ang;
    ( Q6 X: p/ H+ @" @: J

  68. & J2 H' F. c- y- U
  69.    if (EQ_is_zero(y)) { y=0; }$ _9 n! h" q( x" J; ^% p
  70.   J4 e, K% G4 a/ G0 M) k. p7 I
  71.    if (EQ_is_zero(x)) { x=0; }
    , e% d& Y) Z  y2 L
  72. 2 s# Z9 {3 _7 F3 \  t+ D
  73.    if (y == 0 && x == 0) { return(0); }, c4 x/ t; E# }- j; }! T" d9 w7 E
  74.   @# e2 ]) ~. b, e, b# H0 T
  75.    ang=atan2(y,x);5 Q1 A! O9 g6 ?

  76. - O4 z0 X$ O# ~' E
  77.    if (ang < 0 ) {/ I* d) ]+ Q; i1 o4 }% g

  78. 0 Z3 Z; j! m. \, k- k9 Z5 k+ _
  79.       return(ang + PI*2);. S! p" N" K; r6 i: y
  80. ' }3 n0 |" z# M
  81.    }
    2 ~. k$ `: V0 |7 S4 A
  82. ; @2 U, y7 a. n0 f
  83.    return(ang);
    3 O) \+ b& s( K6 m, a

  84. 5 @& [. [8 D; Q7 u) ?# J( t
  85. }# @( L4 v  }! y
  86. & u- ?# G' D5 a; _) \( U
  87. //#=============================================================
    " ~( `: ^* H8 S( O8 h

  88.   U. c* m9 S; P2 p( Z: }9 C
  89. double ARCTAN2 (double y, double x )
    7 `; X1 c! u6 T' U+ H& K9 g. Q

  90. , t& D% H7 A; I
  91. //#=============================================================
    ) b4 F4 [1 O- g

  92. ! O8 Z, n/ S* L3 g
  93. {
    * I6 y/ X% k2 U1 B$ u3 a2 P

  94. ' U4 x0 I4 ^+ _! V( ^
  95.    double ang;, z# g0 \0 D5 a3 k" x) t

  96. 2 O3 G5 ]3 S' y
  97.    if (EQ_is_zero(y)) {
    2 |) u1 }. x0 d- g3 e
  98. . \& X* m4 @& B' c
  99.       if (x < 0.0) { return (PI); }
    ( \' M, w8 Z; z( g4 H

  100. 3 d/ t) |1 h! z( ^7 c1 M
  101.       return (0.0);, ^; J3 A& |  o, t: {. J, O
  102. 4 A! C; N, c! Z  j1 _/ f
  103.    }! A  B* S3 F& T  u  y  q
  104. 8 d( N/ F$ @( M* P
  105.    if (EQ_is_zero(x)) {3 s" @  ^, y8 F- {) B- E
  106. ; |# t% m# t# J: g
  107.       if (y < 0.0) { return(PI*1.5); }
    ; Q! M1 f- T& P1 o# Q
  108. ) X3 y" ~& d& x& A/ ?! E
  109.       return(PI*.5);
    7 W# v$ e- `) r+ y

  110. 9 z. H0 V  c! y  i
  111.    }
      W0 y- S' I6 z6 u% c6 Y
  112. ' A' ?0 X, G( ?7 A2 Q" M
  113.    ang=atan(y/x);  o/ q- O6 K8 X/ Z5 f0 P0 T1 [2 W& q

  114. 8 }& Y/ s, x' D: V8 r7 C' y3 W9 F8 w
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    - k+ `% c8 V" Y

  116. ; z( N) p2 J4 j0 x1 g7 C, S$ ~3 ]
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    & G, I/ X0 o- u' Z
  118. 8 C; o% ~: B3 u0 X8 L/ u: t
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ! J: p  X% V  m2 R5 }
  120. ; q6 W0 J2 _: Q# j$ `
  121.    return(ang);
    ) c7 Z5 n+ a# P
  122. , j) T0 Q8 t0 Y5 K- r  E" g$ d
  123. }
    ' N- G# [  l0 D; O0 ~9 [
  124. & W4 G5 e% i7 ]/ f8 B/ Q! W
  125. //#=============================================================- U+ Z1 P5 G9 g9 L! C0 h

  126. & h, a0 s2 G& @/ Z7 l, W/ y
  127. double CheckConst ( double angle, double constvar  ), N, P9 \; O& q3 x/ T2 |

  128. 1 W3 T) X& Y) y9 R
  129. //#=============================================================
    2 r( P+ `' H% y$ r6 a" E

  130. ) \& \- ~' u- D3 c; V
  131. {3 y% E: [: q: V1 |4 S% e
  132. & h" K& f8 W3 Y8 m) C
  133.    while (angle < -constvar) { angle+=constvar ; }
    - u" Y2 m, f% f2 [0 ]

  134.   Z7 L# F" R" r( ^
  135.    while (angle >= constvar) { angle-=constvar ; }7 X% i; E2 `8 z# O6 z
  136. # B6 ~  g8 g" h* h+ z: B
  137.    return (angle) ;
    ' O8 `# a; s* H( b0 H$ Q
  138. 9 L8 x. ]8 l; Q5 M% w4 o
  139. }
    6 o9 Q. _! z3 j; x& Y9 v
  140. 1 [9 P0 ?9 r0 i4 U1 u; s
  141. //#=============================================================
    1 L& X6 b4 ~. |+ E% e0 G
  142. ; ^5 O8 P0 T( U8 @% B, x; G* D
  143. double Check360 ( double angle )
    0 F& F/ M  w# m3 \) e
  144. ; m- {8 H$ _; j1 d) H
  145. //#=============================================================) ]! d" k. I0 e( P. ~# L
  146. 9 D  y8 l3 ?& a: O! i0 J$ _) a  ]: [
  147. {: O6 e! J+ f' {9 C9 Q

  148. + v) F& X  o' r2 Q$ b  z: u
  149.    while (angle < -360.) { angle+=360. ; }) O/ z6 T7 \5 }* `6 @$ l1 P1 w% j

  150. : f( N# `: Y( H! e( G! S
  151.    while (angle >= 360.) { angle-=360. ; }
    3 g8 W& f8 R' \' c/ ]0 _+ B
  152. 7 `$ W1 T$ S7 {( H# E2 c9 K
  153.    return (angle) ;
    1 T+ [1 P: k( p1 q
  154. 1 x! C' p- O( F0 X4 V: g
  155. }- j: D5 V+ Q$ e8 D: g, e
  156. 1 E2 n  A2 N2 @' ]) A) r9 `
  157. //#=============================================================
    9 n( n* \; R# n( f5 J
  158. $ W9 \9 G/ c. ]  v) ?, P- H. i- e2 K
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )' l  A# U% q: F9 z1 @2 C

  160. ' N% a- |& S. [; N
  161. //#=============================================================
    7 r. D7 H9 Y  M6 q3 L
  162. ) C6 x8 V" c* ~. r! H/ O
  163. {
    0 R1 Q6 D$ j5 S

  164. ' L* p$ u- }( X; W
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    / k& {- p1 c" |) [
  166. * B1 f1 M  C1 r5 |
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    * }6 P& r" }) [0 c

  168. 9 A' m6 ^. e6 L7 z* J" X, H" C: E
  169.    return (angle) ;
    - b4 y( d8 R) |& Q6 e# `/ L" |
  170. 5 d4 D; ?% A: d* Z( i* K* S  }
  171. }
复制代码
! z9 G. p, x* F, c  |
以下为摇篮5轴计算过程代码
' @' h2 v3 ?% q; n4 D( u+ `6 O
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);$ }5 G6 W! j8 I, G. z+ z. D9 W( k

  2. $ }( U$ m" C+ L! h5 f9 i9 R
  3.          j=0.; B1=0.; B0=0.;/ B5 a; B& P8 ?* }5 ^& `0 `# j
  4. 4 m, A3 e7 A3 @( j% Z; `6 {1 e
  5.           if (EQ_is_ge(i,0.)) {
    6 k  q7 G2 h& c" D& k% |2 n
  6. $ Q9 [; @. {" i" W# c3 p% d: h1 B$ S
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    ( n2 ?1 ^0 h, W8 c% p, g, y( Q% Q
  8. 7 {( U7 V% e) y4 E1 Y
  9.           }1 ^3 {7 d- u5 j1 g

  10. - N; Z& K+ D0 {0 a
  11.           if (EQ_is_lt(i,0.)) {
    ; r2 w/ }* C3 d* c2 _% U

  12. $ k" L( f* A( F
  13.              if (EQ_is_lt(k,0.)) {
    , C+ n$ _9 _, t8 ]( D- {

  14. & T; S7 z5 x9 d9 a* |7 T# S' W5 z
  15.                 B0=atan(i/k); B1=B0+PI ;
    9 N1 R8 m+ b/ S; N. K

  16. ( I; C, w  K, s( A# [' p
  17.              } else {; {+ m, K3 A, E& E' O5 Y
  18. - _0 U# [6 Z8 ^: ]
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }" k7 W9 u- G( ^3 c

  20. " t# T1 {; T( ^8 b7 c
  21.               B1=2.*PI+B0 ;+ h8 w+ t, q0 o/ r+ a6 k

  22. & i* U4 k  e1 _' P
  23.              }
    : G! r* P) Q- k3 r$ }

  24. 4 q, o- x3 E& @0 C$ w
  25.           }
    , G) u4 x! _' w: [- z3 I7 S# w3 e
  26. 6 R) ^; I; _+ p# r7 \) A
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    1 u  U+ O4 d) b5 v6 `/ |
  28. 0 k/ j' j1 R& G2 k( |
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));6 T3 ~1 |; d+ D5 J. b
  30. 2 U( h# f6 h# V' Q0 f: P
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    3 C& \: b7 [! j, B& j" g  T$ b
  32. 7 W8 o0 m4 ?7 m# [+ Y( l# ~6 j) h
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

3 v, U9 _. A& X通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
4 ?. v8 ~7 y3 q: s9 Z8 G; F* g! p' v/ ~! f0 N
640.png
4 J( S8 l0 \  `8 H- P* j测试结果:: Q9 T; O# }5 V0 @
6420.png
* G+ v' C* b1 T& Q
  W2 _4 x( g- n反向测试结果 6410.png
1 _, Q  ]+ Y% u* O0 C3 l! c

0

主题

24

回帖

12

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-16 06:06 , Processed in 4.100350 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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