找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4844|回复: 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);) Q1 O% B4 Q4 Q( b9 I
  2. int  EQ_is_ge (double s, double t);
    8 p" I9 w0 s  ~6 D$ [% s8 {0 v
  3. int  EQ_is_gt (double s, double t);
    1 W% l2 |  B  L4 @3 N8 c
  4. int  EQ_is_le (double s, double t);+ T8 J) L; B2 C( w) Q  E- ~
  5. int  EQ_is_lt (double s, double t);( v! W. ~) y  w( V" J- ~9 r" s$ P' {! d
  6. int  EQ_is_zero (double s);
    . h. ~1 y; K& v
  7. //=============================================================
    ; K1 _/ E9 e% g1 F. B" s
  8. double ARCTAN1 (double y, double x );
    3 ?/ ?. Q, n2 c
  9. //#=============================================================
    5 n4 e5 y6 J: o7 H4 |5 S
  10. double ARCTAN2 (double y, double x );& R) }; _3 [  P
  11. //#=============================================================
    % G2 h& M% D: W, O3 C  r
  12. double CheckConst ( double angle, double constvar  );" k# M2 y, s& R2 O$ K# i
  13. //#=============================================================
    4 P2 k) K: |4 L0 Q, K2 T3 }+ l
  14. double Check360 ( double angle );1 l& a( T+ X& i3 e. o% b# |
  15. //#=============================================================9 L( i( N/ b$ m5 ?
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );( T/ p0 \( o9 K3 q0 K( y7 b
  17. //#=============================================================
复制代码
- o- u8 \8 i3 t! k8 d9 G
以下为部分源代码,用于判断,计算角度等
+ R" i$ O# [7 L( J
  1. int  EQ_is_equal (double s, double t)
    ! l8 n- a: t- f8 H+ I. S5 X2 B$ F4 {  Z

  2. 3 j* o* c' C6 K& ?* z% s2 Y3 g! W
  3. {
    ! V+ G/ ^' \; P; d. P% |: A6 q$ s' h
  4. & l4 V: m; B  j
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }1 k! u, Q- Y9 M! Q9 k* E

  6. & w# u' x1 A% G- `" w1 ]
  7. }# |( ]- R  M+ ~" V2 H' N

  8. ; E3 B2 {. ~* y+ t" m4 {! s
  9. /***********************************************************************/
    1 x1 z/ t- ^' P- x0 |

  10. 9 [8 O! B+ G/ l! [8 W, W( J3 H, f
  11. int  EQ_is_ge (double s, double t)
    3 [" k7 `  q; R2 v* ~
  12. 5 M* R; r) |1 n0 a
  13. {
    ' @! |+ P* T% R( j, L6 Q- i

  14. , m; K3 W6 e2 F
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }0 P- X9 u! k4 l- h4 G9 C7 p

  16. ( D6 j- Q( Y- @3 V
  17. }
    ( }+ O3 M2 B& v/ }
  18. / S8 r1 c" n: E; @% H" a
  19. /***********************************************************************/  O1 v: u7 P9 @" k
  20. 5 }+ r: E) _2 ^( I7 P0 I% w
  21. int  EQ_is_gt (double s, double t)
    0 ~8 ?) \- K2 n! h
  22.   ^, t( c0 ^1 S" A" ?* [9 v
  23. {
    , B- ?* P# N' v$ b* t& q
  24. ) F9 C- P' n$ f. Y- o. u
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; K. ^2 g) c/ P' b# _
  26. / p9 M5 _/ \' a& _
  27. }
    . T, `0 d: H0 P  D

  28. * u. {' i0 U$ E0 _
  29. /***********************************************************************// b# H) z1 E( B; X7 j

  30. 5 `* [# }) z, d: k
  31. int  EQ_is_le (double s, double t)2 b/ i; O2 n0 J9 o% N$ W5 d$ ?' U

  32. . b/ w, v; U+ O0 S4 o: ]/ n7 }
  33. {5 Z4 d3 N  D/ ?1 K5 e: T3 b# K

  34. / `8 H+ v: B, A; R* F) p
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ) A! [$ M9 s6 Z1 x4 z4 }( I& w
  36. ) m/ P1 i) B! Z. d  }/ Q% y
  37. }$ q/ C5 t; u2 z4 d
  38. & `) a/ J; J' u. e6 e6 V
  39. /***********************************************************************/
    ; L6 Z( O9 y) U( d/ h0 E
  40. $ b9 }; h# \0 V% L1 E4 N/ @7 e, d+ s
  41. int  EQ_is_lt (double s, double t)8 ?) J" E0 P/ M9 j& K5 D' y) k

  42. . u% ?' p2 C$ s4 E: ~
  43. {' X" |# h5 S8 C+ D

  44. 3 j5 ~$ P  f; H5 p0 F; p
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    2 V& X& w+ j% d5 j/ w6 v

  46. # x! c9 H+ p: G
  47. }& ~+ n0 ~+ W  p( [
  48. # h1 }4 }2 u% `
  49. /***********************************************************************/
    7 p* {2 s3 ?8 t/ v

  50. 4 o; _$ ?6 I5 K! V5 @1 L3 y
  51. int  EQ_is_zero (double s). ~+ H, o# b( s" O

  52. ! ?' y6 z& Z8 E
  53. {
    3 w. s5 y* j) b- c; t/ H
  54. ) W) X# V3 c% f( K. |7 f- i
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }- p: J4 l9 t3 H! q

  56. 1 ~- L( ~' s8 O
  57. }; l* v+ ^6 x. Q+ H+ L5 r. ~, t( y7 q5 E
  58. 8 H3 x! V2 L# V
  59. //=============================================================3 |9 X3 }! C9 b( x% R3 D9 R  ^: p

  60. : q0 B1 c2 I- @1 d, E' B
  61. double ARCTAN1 (double y, double x )
    : n3 k% ?5 ~' J" @6 r8 t2 h0 A
  62. 8 Q4 X' g) b" Q# R
  63. //#=============================================================
    9 S& @/ s4 ]/ r- E4 D7 }2 c5 V' b; t

  64. . H8 B# b3 P/ y( I
  65. {% h) y5 j  s. ^5 G: y
  66. 6 s1 C- c5 Y2 {. K8 n" S5 D
  67.    double ang;7 O5 Y8 m) i  H9 W( e
  68. ' b  k( \& f/ e5 }( Y* @
  69.    if (EQ_is_zero(y)) { y=0; }
    # y4 T& x& f. \6 j* P' v/ b
  70. 9 ~6 ~& B( E6 b6 X, B' t' D% v
  71.    if (EQ_is_zero(x)) { x=0; }1 p% A; K$ [5 W0 ~  }2 P. \  F
  72. 0 `5 [% B6 J9 G
  73.    if (y == 0 && x == 0) { return(0); }
    $ x! c$ I6 u& ]# B7 y6 E3 F. c" P3 {
  74. & B! D7 R& W& B; e0 i# B+ [
  75.    ang=atan2(y,x);4 V( N8 A- l( g9 z

  76. * \2 G, q/ c" r" ]! @' {5 \
  77.    if (ang < 0 ) {
    4 p6 j: O# p- s" c; G) N8 i# j
  78. ! f% e, o6 F0 f! l& ~# a
  79.       return(ang + PI*2);
    . i- b7 c+ a; N7 z8 n# [

  80. 7 ^+ G( \! U( a  F7 L9 K
  81.    }! ^+ ^4 V0 V- [8 M2 T
  82. : L- b/ ?9 _9 a1 J( X
  83.    return(ang);
    ( E5 F: r) ^/ f& Y
  84. 4 M% A/ x- \3 }$ `5 M$ i! @- L
  85. }
    7 c* i7 G# F$ o# @4 B
  86. 9 ^# f" R( Z- }' M# Z6 F
  87. //#=============================================================
    " h: v/ n) S$ Y, ?, v  b9 j3 t
  88. # z. c+ S; ], i. D
  89. double ARCTAN2 (double y, double x ). O5 {% s" r) {; a/ j8 r- b

  90. 8 D, g  d$ w3 b, E
  91. //#=============================================================
    3 H5 @( j1 ~) s5 B, l$ z: j

  92. % [, a- {  A( N0 _1 m- S
  93. {) l" ^: E6 V" ]+ ^- K' [+ V3 [

  94. : U5 j/ M* H3 j( p
  95.    double ang;
    * B5 E+ m5 ^8 n) s7 k& U- W

  96. ( ]4 g  c4 q3 Y( p
  97.    if (EQ_is_zero(y)) {
    ' Y+ p/ O, ~. }! Q4 c
  98. ! @0 G0 |4 G7 @2 N
  99.       if (x < 0.0) { return (PI); }4 {: M( S' V, y6 ^0 M1 Q$ B* c6 K! ]
  100. $ }! _- \; N" B9 H
  101.       return (0.0);& W' \! y, z6 ~) G8 }. s

  102. - s+ T9 Z2 i6 _, _5 J+ V+ ]6 v
  103.    }# |5 `" Y& G  P1 H% s# w! J. X
  104. - T! f8 z. x% K8 F
  105.    if (EQ_is_zero(x)) {( w( H  Y, a" W/ d

  106. $ a2 @( i, H: o5 ?1 x! ?3 a& q
  107.       if (y < 0.0) { return(PI*1.5); }
    : W* I7 A- {5 U+ I+ v8 m

  108. # [7 R$ P/ ?4 o& m$ t
  109.       return(PI*.5);
    " _* C4 r- b9 C% e% }
  110. ; r8 D7 f* q3 m9 b; a/ R
  111.    }
    - [5 S1 O/ |8 N& `' y

  112. 9 n2 x2 ~4 T5 p9 s" \5 Y  J
  113.    ang=atan(y/x);
    8 B3 n$ K; I9 q4 [: [" ~. w& X

  114. # g5 V* |" Z. S% @4 x
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }. [( Z; X7 q$ M0 Z1 H9 Z

  116. ; w* u$ C  [7 e* ^. m3 a7 n
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    . j& c3 r5 t4 n& p3 A1 C" E
  118. # Z& [1 t) H, ~4 x  o" Q
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }+ l2 \  o7 t7 N8 w5 E) m
  120. 0 ]; H; t) R& q. l5 c: p2 d) Y* h6 @8 U% }
  121.    return(ang);8 d' s. O+ O0 x$ L  \8 n
  122. / O1 U8 R4 K3 @- w5 i
  123. }8 s' Q, Q9 w8 d3 S7 p8 j4 L/ F
  124. / s3 c' l3 W; z" s, t5 a+ v3 h
  125. //#=============================================================
    7 T/ k, U2 b1 C7 J) L8 N
  126. , v* a& F' u! G
  127. double CheckConst ( double angle, double constvar  )
    5 p5 Y$ w# S4 w& O+ |7 _( K
  128. + D; q* y1 o8 L
  129. //#=============================================================: B9 @* C4 k- z2 r, i/ {5 m
  130. % n) G2 j2 F- V0 H
  131. {! `; T/ ?: d. F. T* B" }

  132. 7 x; p2 [# ?8 @0 |. G
  133.    while (angle < -constvar) { angle+=constvar ; }
    % Y# _+ M. [% x7 i6 N2 G2 s

  134. / s# l1 k8 h/ T) \7 ?4 r
  135.    while (angle >= constvar) { angle-=constvar ; }: c8 N3 L& h1 f3 e, p
  136. 7 C6 y$ @+ P% n, ^; t6 W/ v, H
  137.    return (angle) ;
    0 `  t3 n$ y+ i4 ?8 w  \& J% g
  138. 5 w9 D* W. d7 {6 s' C$ W8 g. |
  139. }
    ; Y$ c$ t1 i! ]

  140. / d8 R  V( G1 [0 m, @5 \
  141. //#=============================================================
    5 t2 z9 d) P& i

  142. % Y0 G" w: T/ m3 \7 T1 d3 b
  143. double Check360 ( double angle )3 C( }, U7 q- a8 R: m% g" C; S6 G3 @
  144. & E! O) T8 l5 _1 w+ V' F
  145. //#=============================================================
    0 J! w5 V! x2 x& I3 |

  146.   f( a7 N$ J/ ^$ y2 V, S
  147. {' _, m. l* ^& U4 e0 k9 |

  148. / A$ ^( j% I! E+ U. i- _$ C, p
  149.    while (angle < -360.) { angle+=360. ; }
    ( E2 @, h+ K- X0 Z0 f5 d
  150. 6 Z2 Z4 r, p2 Z, f5 l1 {8 \5 U
  151.    while (angle >= 360.) { angle-=360. ; }1 t  V$ u* ]0 r- l/ z. ~) O+ i
  152. / e- }) L+ y3 H+ W6 }5 r
  153.    return (angle) ;+ Q9 G1 N/ g2 S) h  y$ ^2 |- Q6 \/ I
  154. 4 I+ ^6 G' [0 X- {8 r- r2 U: w3 V* D7 O- A
  155. }
    - ]6 G: Y; a  ~8 n; I# C( l8 P

  156. : C" n* D% ?( x* |# e' q( f( x0 z/ {
  157. //#=============================================================
    ; s' c$ N# y! v( ^: O2 w
  158. ) S1 z4 R$ @5 t
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )+ U. `* ?; A7 ]' i- t  H
  160. # i" g, v, u; h+ V
  161. //#=============================================================
    , `& Q' o! b& X" ^7 `: V' {( X

  162. 3 C3 J+ s% d$ ?0 g+ X5 E
  163. {
    ; N) t& q4 N: q
  164. ( G  l3 N) J9 D7 D
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }( E/ d# B( Q5 L8 Z! E) \7 @

  166. ' H& ^1 |% H* Q; i
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    1 e( B3 v% K7 R

  168. ) `8 ~, t7 W5 ]; [7 |, L# C" ^; R
  169.    return (angle) ;
    ) e0 N& u6 X0 ~$ F
  170. 9 ]2 M6 o, P2 x/ [- m% z7 C# q
  171. }
复制代码
; j  n- z+ n, k* D2 t/ ]
以下为摇篮5轴计算过程代码
( U* A1 h$ x  @6 u* Q
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    2 W0 T; B, O+ g- F6 U
  2. ! ~6 A9 x0 D& x* c' ~
  3.          j=0.; B1=0.; B0=0.;6 x# H, p! X  f" p. Z

  4. " t8 `1 B7 E- f) V( N! w4 S) W
  5.           if (EQ_is_ge(i,0.)) {
    % o5 G. [  |7 A3 [$ f7 D0 ]

  6. 1 k; M( W6 V; R- Y) }
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    , G; e2 w, v! x7 {% Z

  8. & t) J, ^5 M. `5 e. p, W: s
  9.           }
    3 R: B) d$ N* H

  10. 2 Y) @! Z- q% M7 k
  11.           if (EQ_is_lt(i,0.)) {
    & D: h; {: d& r: P' W
  12. $ L$ p1 [( W+ ~$ R0 {$ J
  13.              if (EQ_is_lt(k,0.)) {
    $ A5 ^3 b% m3 i$ D. b( w

  14. ! U5 {1 u/ W* N8 L3 X9 F& B3 j
  15.                 B0=atan(i/k); B1=B0+PI ;
    ; S, Y2 x5 l- w  I/ x6 [

  16. 2 _0 I/ X+ \. x; ]- N: E  X
  17.              } else {# t- ~2 |  t9 k  }7 f& V

  18.   W% @( @! d* e) T& b8 C
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }) {4 @" h/ r+ k5 C7 Z' q6 Z

  20. : m1 O; t6 J4 A/ W
  21.               B1=2.*PI+B0 ;2 z7 d- w; n( p% Y8 I2 ^

  22. ! v- W# N! ?. z+ c2 h1 S1 Z1 _
  23.              }! F4 d3 r3 w/ X: ]8 `6 Y
  24. $ r- ^1 Q4 u- N( H
  25.           }
    / Q" \2 I0 n# L3 e
  26. & {( g0 \8 Y' `; |4 Y* y, Y
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    . Q$ t2 E  Z- t
  28. 1 y* M% c# t9 c! m' b
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));4 l  f+ I( X8 ]% T: }0 R$ _
  30. ' C* u: `% f+ S3 R' G+ w
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    : j" V% K; Y7 ^7 X( g+ F/ q
  32. " t/ A( F$ v+ h" U: f! @* m
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

9 q* j9 b. Z  x0 a通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。" o, ^4 X! t* m4 x) b

6 G/ J1 k" ]; s4 A. r$ _* l 640.png
& U& ]8 f+ _8 |9 f: t8 u6 a$ [测试结果:& S# J, B& }" ?$ e
6420.png ) H3 F$ S3 @: ]
+ p$ G6 w) L7 f4 I
反向测试结果 6410.png
2 a/ D- {9 f- p' {! x' B% t$ h

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-9-16 20:11 , Processed in 0.417970 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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