找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 331|回复: 1

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

[复制链接]

431

主题

5751

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);* _: I" T6 _9 A/ u* `
  2. int  EQ_is_ge (double s, double t);
    - Z! C' R) H4 ]: b$ V% x' h  E; Q
  3. int  EQ_is_gt (double s, double t);* r" j9 [; e9 o) v  j: {/ h4 o
  4. int  EQ_is_le (double s, double t);
    ) E  e4 p0 b) z# ]% S/ r. I' N5 u
  5. int  EQ_is_lt (double s, double t);
    0 G# P! s( w3 n: H  \
  6. int  EQ_is_zero (double s);/ R$ E0 b8 |, f+ n5 V
  7. //=============================================================
    ! ^! e& h7 I7 T* f. q
  8. double ARCTAN1 (double y, double x );
    ( L9 M* k$ O0 ]  O% \1 C" U
  9. //#=============================================================4 V( v$ D/ ~( p8 |
  10. double ARCTAN2 (double y, double x );
      R% j; @: K4 |. _6 q9 C
  11. //#=============================================================
    $ ~9 m% L. I0 O) l
  12. double CheckConst ( double angle, double constvar  );5 k& c# e" i& e  g7 c) @3 Y
  13. //#=============================================================9 }% Q9 M1 s8 e
  14. double Check360 ( double angle );
    % ]3 ~8 C4 v8 L, v+ f9 {* b3 J$ o0 N; V
  15. //#=============================================================" K& z! [, J6 _% |1 F
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    : l" Y: D1 p. B# ?" b  I
  17. //#=============================================================
复制代码

& f* A, E- k7 e$ ~7 ]以下为部分源代码,用于判断,计算角度等: {: k1 `! Q9 o+ r1 f% Z
  1. int  EQ_is_equal (double s, double t)
    % b' G; |2 _' C5 a
  2. ; s+ a! w5 q6 Z, v0 _
  3. {4 }  z& L7 S0 b) {5 S2 R

  4. + d) X# e8 ]9 M) B+ }) A, t7 T
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ; Y7 k6 |- o( @6 i* H8 m, w

  6. " @3 b6 x( w4 U
  7. }: ?. X( c- x- w8 Y4 ]1 C. {

  8. : n# D  O" \8 O2 b; X
  9. /***********************************************************************/; K6 w0 Y' x$ i7 U! ]: D2 ~

  10. 3 b% K+ w. ^* J! m
  11. int  EQ_is_ge (double s, double t)
    * `4 u! Q1 `/ f, ~3 z4 Z+ d9 L; S

  12. % L; {" B) \# [
  13. {6 l- X1 G. Z' g8 r
  14. : r2 ]$ [8 e* e) J' C
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }' |  Z3 z& J- W/ Z7 g- o

  16. 4 b5 M; j; z' _* u
  17. }/ U3 ]5 I; [& M" t/ n
  18. + V, q' x7 @' V: e" |& u9 o" J
  19. /***********************************************************************/0 Q* m* W* r; w" F4 \# n+ w9 M

  20. 4 ~6 i* B/ |  D1 q8 T; F5 ]
  21. int  EQ_is_gt (double s, double t)+ l0 J/ C! d" h2 y- W) }9 }4 i
  22. - B5 a2 H5 L' S0 J3 O- s
  23. {
      |* r, x: f3 I/ E7 R% ]% K4 K
  24. 6 X+ m  v9 _9 E7 Q! N
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }* r' m. ~3 J, v, q3 O

  26. 2 D+ W4 g3 [* T8 ~" D3 t$ ~
  27. }
    , s0 p, ?/ J0 r( b( g9 W
  28. ! r/ o; c. n" _; P
  29. /***********************************************************************/
    ! p) U5 q; [' |4 J& p1 ?6 [
  30. . B. f  e( T' q+ o0 Z  p5 D
  31. int  EQ_is_le (double s, double t)
    0 {9 I6 j, \( Q2 M1 Q: i

  32. 4 y4 X9 v% o- ]; C
  33. {; z; q9 d2 m. p. W1 A

  34. $ m$ [9 c# y5 i
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }4 g0 a8 l3 a. F7 ~
  36. ( O* c& k5 `$ b  u6 N  N8 ?
  37. }5 A0 `; z0 P; \$ f9 T* H

  38. ; D5 e8 s- @0 R4 E% {# ?$ T
  39. /***********************************************************************/
    5 l5 Z/ }) g8 O& {0 ]1 V
  40. + k) W* R6 M% j! Z# Z
  41. int  EQ_is_lt (double s, double t)& h- H  ]- d: q+ \) m! g) q3 y

  42. 7 w9 P5 A+ a+ G# N
  43. {
    * T2 h/ z  y* I

  44. - Y' X1 r- }/ [  j$ r3 N
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }6 e$ J6 ^8 [. K; X' G+ B* O' M
  46. 2 S4 F! K+ ]6 n/ b9 f: E0 n4 R. ]
  47. }7 X3 _5 x' P- P* X

  48. ( z4 E$ \/ C, `: Q1 @
  49. /***********************************************************************/
    ) q( w) Z5 m; ^) d! w! H
  50. 9 N  U* q7 J5 h. W" ^  F
  51. int  EQ_is_zero (double s)# N4 [, Q! ]* k* e2 {& T+ M9 J

  52. 7 L. r2 s8 H) J: g- p- r
  53. {5 I+ i" h5 v- F# D$ S
  54. 9 [0 L. I1 M, f2 ^1 t
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }5 [% @% Q  L8 F% a1 `; H/ g
  56. $ V" i% t, T) g6 i+ o
  57. }
    8 E  O! X% m7 D: s% U! I, Q- j
  58. + [% d# Y3 {3 a8 f  L
  59. //=============================================================, J* R7 @! D. b. q1 t# a1 n
  60. 1 w9 |5 U( p. T& }/ S9 @1 Q8 k
  61. double ARCTAN1 (double y, double x )
    ! s, G7 U7 i* x8 a) e2 O7 y. ]

  62. ' S! _) s1 e% S8 ]7 J, U2 E8 j
  63. //#=============================================================4 E. u- k% @9 ]7 s' J  U/ `

  64. $ I* B: w5 x0 N5 G6 S4 M
  65. {
      i  }0 i6 L+ v: ?6 {

  66. - b. K" _( p* `5 A9 X1 q& x
  67.    double ang;
    4 E$ \% _8 u; ~- i+ H# C/ k/ ^

  68. $ {2 P; I8 Z3 q1 V# p/ B* l0 ~
  69.    if (EQ_is_zero(y)) { y=0; }. j( H: G) N) [( W

  70. , K4 d9 y0 ]% R) ?3 K) u" K
  71.    if (EQ_is_zero(x)) { x=0; }! n7 H) |4 {4 `2 P( i

  72. : ~4 W/ M1 \& u- y6 r  z, v6 d9 I' g4 b
  73.    if (y == 0 && x == 0) { return(0); }
    6 W- T1 g9 d8 \0 L

  74. $ F/ o0 @/ ?& y$ Z- K0 e
  75.    ang=atan2(y,x);7 t: D, ?% W# [& p' N
  76. $ V: j0 z2 F8 ~* h$ `+ u
  77.    if (ang < 0 ) {& q1 i* z/ Z: C" L
  78. 8 G% a/ K1 j+ i. ?) _0 f
  79.       return(ang + PI*2);
    . c8 A1 V* n' b' H
  80. ; H5 E- f$ p1 Y; s1 Y; k
  81.    }8 z4 a5 n1 b9 R  B

  82. ' i2 W+ ~0 T) V/ D. ]5 V' M& x
  83.    return(ang);3 e+ u4 Y# G! r5 U6 ~% c6 m
  84. 0 k1 n" f) D: q0 f4 S3 v! u
  85. }
    + F; }5 i+ W; Y4 I
  86. 3 X% ]/ F& f9 z( N- `5 ]) X% b* o. P
  87. //#=============================================================
    5 I* M/ t) e5 v3 H9 u  x

  88. ( E& H8 Z+ V6 q8 g
  89. double ARCTAN2 (double y, double x )
      s& D- E- a7 [8 }- [. N
  90. 8 i  _% M* v5 x% t( N! q
  91. //#=============================================================
    3 r: T! v- H  D1 a2 g; ~
  92. : f# s1 {, ^8 y" `! u
  93. {9 f! @8 ]' z" v2 A( J6 n6 W  D7 w4 W
  94. % b8 v% L0 E. {2 v* ^& I: R
  95.    double ang;
    2 V$ {$ j7 P. Z# D, J  O
  96. % g* \. K8 p# k: E
  97.    if (EQ_is_zero(y)) {3 Z/ P4 r7 B% f6 q% Q, X) q

  98. , @# R2 |4 W3 E) Y" t* @! ^2 h
  99.       if (x < 0.0) { return (PI); }7 x( O3 b- d! r  o$ W8 d( P! I9 y( ~

  100. 2 G+ W. T6 P+ O5 u! V0 R9 }
  101.       return (0.0);5 O5 U1 h9 F1 y) P- F& f
  102. ( d5 y6 m# W4 `( v& a9 g0 e) O
  103.    }8 z1 ?7 e$ A; F/ v  r

  104. 7 x7 l3 D2 e* H* {' q
  105.    if (EQ_is_zero(x)) {
    ! K! ^- ^$ j; o

  106. % E& R5 p0 ~% [5 }# R' s0 X; N: b
  107.       if (y < 0.0) { return(PI*1.5); }8 f1 u# b& `3 N0 s' E# j  v
  108. 9 B+ t$ L; ~* d4 J9 V: b
  109.       return(PI*.5);" M' B% I, R3 h2 i
  110. 0 [/ _& M0 M. Z9 H  W: [0 v
  111.    }
      k+ a+ b% b3 ~& t( i: Y

  112. # c& I- l! A% X
  113.    ang=atan(y/x);2 N4 V& n9 |. G/ ^% L% t: e
  114. 1 k$ I8 E/ y% `$ J/ _$ |
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }) @+ I1 \& [& {$ o( s) d4 H

  116. " H3 E2 J7 T$ T! S& k
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
      Z; ^" L+ V; t+ T7 M

  118. 8 j: W( h3 S! T% [
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    / {7 T/ V$ K9 \- B
  120. 5 A4 i1 ^" O' R* E$ J
  121.    return(ang);/ Y, u8 B6 t7 z6 X

  122. ' F/ D! X" g5 L. m& F0 i% g5 I
  123. }& }" W! |' d, E- D/ c8 B
  124. & g- \+ s, B# Q
  125. //#=============================================================( P. K2 c7 E# I' c6 F

  126. ) o% z' `& {# B# Z- R
  127. double CheckConst ( double angle, double constvar  )9 A) {, a5 R& q. O5 S1 l( c

  128. " r) V, @9 Y* F/ A3 D7 H4 D
  129. //#=============================================================# r1 B/ o" M+ b6 j$ x9 ^: p
  130. % t: C9 a$ C/ @$ |. ~
  131. {
    ) V# `2 s0 M6 \
  132. " t. y! a9 c: g3 @3 E/ L+ P/ y3 a
  133.    while (angle < -constvar) { angle+=constvar ; }3 e, w$ W! l& P; m3 X  }% y/ d

  134. 9 r! S+ ?$ T* N6 R; A; P
  135.    while (angle >= constvar) { angle-=constvar ; }
    8 ~2 m, c& G. k/ p0 ~0 @4 G
  136. ' ]2 \$ S9 c, c; J  w
  137.    return (angle) ;" B8 U; V  v+ g. w( }8 r6 P
  138. . ~) i" }9 P6 a
  139. }9 c* v+ G0 ^. n; }3 C5 x- m; p2 v

  140. : f+ p, `  [* G$ Z
  141. //#=============================================================
    % V" f: X0 r4 L* Z1 F
  142. . V+ z+ o' R& d7 k3 x  R: Q" Z
  143. double Check360 ( double angle )# ]( @3 N% b% u6 T6 u* V: S! R
  144. 1 _, f8 Q* a- h
  145. //#=============================================================3 u+ F% P* z7 C

  146. % E* p8 p3 G+ q8 B) D" |
  147. {, r$ s; o) h& ^* q' G5 X

  148. 3 ]! ~$ V* M  R) Y) P0 `$ B
  149.    while (angle < -360.) { angle+=360. ; }
    1 C' P& M/ {3 y$ K0 j, O0 w/ w' v' I
  150. 8 {! Z4 z4 a- n1 B5 T
  151.    while (angle >= 360.) { angle-=360. ; }1 X, p+ T8 V* \0 o, I2 t/ L
  152. ' V, b* ?" z) B1 J4 E* t
  153.    return (angle) ;% N. z3 l  ^: B
  154. 6 J1 W) V( [: L- z5 u4 B
  155. }
    " E- q" o. w  w8 Q; w
  156. $ a4 [7 x9 R$ @3 N8 B) X
  157. //#=============================================================
    0 u7 |7 R0 ?2 C# s8 }
  158. - W# s+ e6 R) J( ~, [2 q+ G
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ) C7 \' c: ^/ I$ v3 y
  160. ) `. [5 ~4 y8 d  c. _& B
  161. //#=============================================================1 Z% \7 `" P. P

  162. & E* a- ?3 ^1 u4 N9 Q: [1 G# @
  163. {
    - w% R- z) q% @" V: h

  164. : y/ {. ~% O7 Y5 O9 y- c
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }! q) Q6 N) i4 ~( C, k+ _# b/ b

  166.   T: W4 w! l# [# w) d, v7 Z; ]
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    * H; p7 m$ V: ^' g! Q* A5 Y7 e9 L

  168. ! y  X. I; n6 F
  169.    return (angle) ;
    # z7 b' ^9 ]5 r, T  ~+ n7 ]+ V
  170. # `& u; R: w  ^7 _
  171. }
复制代码
4 K, \! s! P5 n0 ]3 ~
以下为摇篮5轴计算过程代码
6 w1 r  r, b: y% K" Y$ M
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    & @  {0 }5 m+ {

  2. 3 x. p3 K' H9 ?, R5 u9 C" m
  3.          j=0.; B1=0.; B0=0.;2 {4 v, B5 q) V6 K& q% ?5 E
  4. 2 L. Q( X3 H; J2 x: U
  5.           if (EQ_is_ge(i,0.)) {
    7 f7 z& K- X& Y% z
  6. 2 Y2 z9 @7 I0 E, d
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }, f" N* c  x& O' o$ J* |; `! |
  8.   e* w/ F( J9 g3 k/ l- a6 j' u4 O
  9.           }
    ! [' S7 K5 a2 X- Y
  10. ( j3 y; v$ ]3 m7 Q" H
  11.           if (EQ_is_lt(i,0.)) {' D% y! u' B5 ]3 J. H8 z
  12. " f2 {. o- f0 R4 ^3 L% D
  13.              if (EQ_is_lt(k,0.)) {, X6 H  X$ A5 ]7 X" L9 {* Q
  14. 7 w# l8 A/ U, x) @7 Y. o' }; U6 Q0 I" n
  15.                 B0=atan(i/k); B1=B0+PI ;8 E$ L- H. v  i+ x% ]
  16. ) u& b4 @* n; ^; E
  17.              } else {! l# H: l2 e$ t& |: [/ p% k2 N/ }

  18. % _! }* l' X: T3 c& D' ^9 O
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    + V: w" r) _! Y$ I. {# ]

  20. 2 Q* H7 F8 U4 T5 P; [, P+ r
  21.               B1=2.*PI+B0 ;
    ; Y# l% ?2 @. K! p

  22. 6 U. j0 m/ M. S
  23.              }
    ! ~: E, p6 _; i% A  N& s. ^

  24. 5 Z% k3 z+ ?6 g, q
  25.           }8 M6 f' t  o4 p! G

  26. 1 q) ^& F% S* W5 R% d5 O" |
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ; u1 h2 {! v' s- x& y, a

  28. , U' L( w  X- M' h: m  ?- t) J
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    9 h  p1 W4 p' W% f$ M. ^
  30. . e( {! d  Q2 o5 A* c
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ; A( a0 x/ l! Z# J- U/ x

  32. 3 k7 X7 b- z% w1 `
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
* `* T( A& r* d3 e) x1 Q
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
. r  M8 J3 A1 b- n+ C: k) V7 K; C0 k# a
640.png
0 ?4 G0 Q- D7 f测试结果:; ?% T6 t- J+ i$ J
6420.png - m' `7 V+ B4 [( O
! R7 h5 N9 u* {$ K' s' x
反向测试结果 6410.png
9 P9 {1 a: M& [$ J! s4 q4 @

0

主题

24

回帖

8

积分

新手上路

积分
8
发表于 5 天前 | 显示全部楼层
谢谢分享
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-6-8 05:33 , Processed in 1.357202 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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