找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6505|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ' B: l  H9 v! F  X/ Q9 Z4 D
  2. int  EQ_is_ge (double s, double t);3 `3 i; O! N  W% r9 M1 @
  3. int  EQ_is_gt (double s, double t);, a  L; e' D' G8 M8 T" j# E2 V
  4. int  EQ_is_le (double s, double t);& ~+ J3 o) D, B- S9 Z
  5. int  EQ_is_lt (double s, double t);4 S& `8 |& P( U" q$ T
  6. int  EQ_is_zero (double s);
    - j/ p+ n( `) v% \+ K
  7. //=============================================================
    * B: A! g( C  R
  8. double ARCTAN1 (double y, double x );
    6 H$ w. X2 h  w* {4 c
  9. //#=============================================================, T" g% }- R0 Y- \
  10. double ARCTAN2 (double y, double x );4 _- j6 P6 W( i) R" T0 z6 _' h
  11. //#=============================================================  v$ Q' Q  l! B1 S. O1 V6 U
  12. double CheckConst ( double angle, double constvar  );5 s2 p2 O/ ^( |( V$ Q3 n
  13. //#=============================================================
    % E0 [$ b5 N% \- a* j3 O
  14. double Check360 ( double angle );7 P0 [- d1 e- ?! Y. r
  15. //#=============================================================
    8 W% J  _6 |$ m( H
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    * ~  Y' N- M: p4 h8 W
  17. //#=============================================================
复制代码

1 B9 H# f$ ~! A. T& r0 S7 W以下为部分源代码,用于判断,计算角度等8 v/ |+ X( L8 M7 L. V
  1. int  EQ_is_equal (double s, double t)
    ; E$ o: O- b- s3 E3 R1 o
  2. ) J" ^. ?! n4 s2 z
  3. {0 ?2 t/ n# W& Z+ r% r" f. {. O5 A

  4. 3 v) b+ W6 c' W, v- {- V  B2 R6 ^
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }3 Y. z" G$ h  V9 r  D8 a6 o  h
  6. 8 O- G7 P3 \2 M2 ], T/ p
  7. }: t9 M6 P2 _! B0 k

  8. 1 B+ O7 B. G8 G  t
  9. /***********************************************************************/0 d' }6 D* i. [; T* z/ H5 @5 t; G
  10. % V) r4 \7 s% c9 ]) q
  11. int  EQ_is_ge (double s, double t)
    % ~/ N0 ?& M) h4 c3 @+ V8 l! w
  12. " r8 A4 Y1 I9 H# T
  13. {3 o. v" G- i' m* G
  14. ' z* Z" P. e2 ?, Q& U: f
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }; e4 ^& L: m( @; U

  16. & M) L7 P: ?& w0 \* f1 p( ~4 T
  17. }. m0 E" |. l8 b: p
  18. - m0 R4 A9 G  w
  19. /***********************************************************************/6 @! t1 D/ u1 ]! z
  20. - K: h" t; Y' E3 X" c2 u
  21. int  EQ_is_gt (double s, double t)
    1 U  _9 e6 F1 E. i" Y- J+ v

  22. : @3 a) E4 W- t* P
  23. {
    : I& U+ ~- F; A7 r6 x- e
  24. + w7 k. d4 n- c; ?2 `
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }4 r1 l8 I# C, J: H7 u

  26. 9 ^2 z& [, p& p
  27. }0 }" f2 `0 e, l& Q' T" j

  28. 9 ?9 x: L! Y& K. h' e& o7 ~
  29. /***********************************************************************/+ m! V0 K' y  G

  30. : S( w6 [2 s, C( M* E/ N( ^8 U
  31. int  EQ_is_le (double s, double t)
    + c  U1 x, H/ d

  32. # `! [) z: |3 p0 ?5 n7 J( D  Z
  33. {
    . i' [; c. Q. f/ |
  34.   g! r% y, V- m4 O6 \
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }' l' r& G0 d+ f, I6 B
  36. * _0 t4 Z& c0 g
  37. }
    , J9 u. e/ t! C9 s+ ^5 @; F% t) H

  38. " C2 \/ n$ }  A3 w) e- b
  39. /***********************************************************************/; b# x# m! K+ A: q
  40. - V0 X  D! c$ H& i% y
  41. int  EQ_is_lt (double s, double t)
    . h# [; Z  H  g. Q% r# ~1 ^

  42. " k' i: I9 E1 i
  43. {
    ! R, I, f  ?+ Y) w' d5 b) Q0 m

  44. $ o0 y* M# {& ]% X
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    " C. M# M* D- P0 c
  46. ; g" I2 p( U) X4 u' |/ {/ n' J
  47. }. {& @$ T6 V: A& n) I" F3 E

  48. & G# @; z( F6 z7 e
  49. /***********************************************************************/9 A/ e. X* O  s2 Q4 S5 I; k
  50. 1 i2 L6 c+ s1 o/ v9 @3 ?
  51. int  EQ_is_zero (double s)$ r4 |' N4 k6 F5 _" }* N5 n# \( Q: p
  52. 2 D& J% w* ~6 Z) ]8 o/ F% i
  53. {
    2 Y) ]: s$ I6 |  Z+ o; }

  54. - ^, J& a4 m  \. L' v! N/ i
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ; [2 p! A' z9 Z( y6 t/ _

  56. # B- F2 r1 S) j+ _  d4 X' y8 \
  57. }: R0 d/ u- @3 i( r) H4 v

  58. 4 F- {) J" _5 T5 A9 q1 ~" G
  59. //=============================================================2 U! B& f' r/ l" A' s5 k/ _% B- U

  60. 3 P- m( T0 P% C6 M8 P7 b+ e
  61. double ARCTAN1 (double y, double x )
    4 x7 Z0 A. Z! H% X+ }8 ?' k
  62. 0 X+ h, O( }. `* A
  63. //#=============================================================$ P: P5 ^8 T. `' m( \2 y, A1 l( h
  64. 6 ^0 m: ]) E) h$ ^
  65. {9 g& H+ Q; Z2 s, n$ s5 x) g

  66. 0 b+ v1 T# ~# |! g+ S. ~
  67.    double ang;' ^- K+ P2 n! v5 b
  68. : N# p6 q4 |( o- J* K& i' h
  69.    if (EQ_is_zero(y)) { y=0; }2 g  H$ k% X9 @# t% r1 C3 C

  70. % T6 W8 U4 m* {: V; W/ ^
  71.    if (EQ_is_zero(x)) { x=0; }' g9 U4 N+ u/ {5 k: p% ]( A% Z
  72. 5 Y! M4 g4 W- b! `/ M. f1 m
  73.    if (y == 0 && x == 0) { return(0); }
    ! O4 R# S0 z# V2 m2 R! i
  74. " G: B, L+ @' Y1 h6 e0 d2 D
  75.    ang=atan2(y,x);
    ' b; v$ a3 s9 }2 Q$ B9 w# _. P5 f

  76. 4 K- n  E2 c( N5 n  c2 _
  77.    if (ang < 0 ) {' x& ?- V$ s+ A6 S* w& V

  78. / L1 M6 j% C# B: J2 a
  79.       return(ang + PI*2);3 @: U" C0 `1 H( b
  80. 6 p. q8 B/ V" g! J( v8 |! _! x% K
  81.    }
      F; \" y# o6 T7 D8 C" K( S8 r$ R' J
  82. . [* ^/ ~% P" V) B" a+ G6 A3 d2 ]
  83.    return(ang);
    0 N* ~  j, u# X/ I

  84. 8 i% _- K1 Y, ]/ X2 i
  85. }
    1 k& O) u$ x: m, x: i
  86. 1 }( n! L! d7 {: o7 F( c: o
  87. //#=============================================================/ v0 ?6 f$ ~9 y1 C! K$ R& W

  88. $ J4 s$ R6 b1 U* \
  89. double ARCTAN2 (double y, double x )& a* K* D4 j% z! l, T

  90. 9 m: t! j  q4 w) W$ l. ?6 g
  91. //#=============================================================
    ; z/ n2 y8 U1 Q+ p6 A8 ?6 \$ ~

  92. & I, Z! f- a: U3 ?
  93. {
    0 Y+ p1 x6 n/ M  q
  94. & H7 K- g# w6 A- G3 h: x. S  A+ X
  95.    double ang;" q0 A8 w) O& P" j
  96. + P( [" j; e' c2 Q" A
  97.    if (EQ_is_zero(y)) {  d8 ]. R* N' L; z& `# K% M
  98. 9 W9 P4 r" J: L5 Z% c8 D
  99.       if (x < 0.0) { return (PI); }, A$ r% C! S: V# O- L

  100. 6 h- [3 Z, Y/ I$ |' U' |
  101.       return (0.0);% P+ U( @7 R. f3 k2 X! M8 o( c, ~) S

  102. # }6 {2 `$ k* U0 t
  103.    }
    + n" q0 N3 P4 g# \7 M+ M' ?. u) J4 U

  104. " t" }$ Y# [$ E% ?, r- ^
  105.    if (EQ_is_zero(x)) {% `+ H; I- a+ F; f0 L9 A/ U2 a
  106. . Y: ^: c. F. z5 x$ }' w
  107.       if (y < 0.0) { return(PI*1.5); }+ w: O' a, A) k5 U7 z5 R

  108. / Q9 j/ Z. M% D! W
  109.       return(PI*.5);
    / q5 W5 ]+ J! @3 |- |4 P

  110. 0 Z& m& k/ \' F" i5 u* V
  111.    }& V1 p3 P2 t/ r/ X) y/ g
  112. , l/ E9 J! ~! j) M- o1 q" X
  113.    ang=atan(y/x);
    ) K0 {  o! J: X; n5 P4 I& ~
  114. 3 ^% g; t- W- {# I3 ?4 H1 a
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }1 J; H; T6 P' X$ S3 p8 l, f

  116. 1 A" [' O: q) m- B& T- w
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    . `1 X& X- Z! u
  118. 1 `- @' Y6 X& G( l- _) s
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    0 Q) s. M: g7 a% H# E4 f
  120. ! e  y2 N5 d  y& P
  121.    return(ang);) I5 l' C: R6 ^6 \  g

  122. 8 t% j+ x: r6 N6 Q8 D" d
  123. }) k% }  F% h; B$ K9 o/ f8 a$ `) G* g
  124. * g9 y3 B/ P( z! w; E
  125. //#=============================================================% r. k" B" r' J; J: R4 U$ I
  126. ) Q1 H3 l# Z& R0 X2 p, a
  127. double CheckConst ( double angle, double constvar  )
    % w; K" b3 W7 y- E8 C1 @( }

  128. + h7 w: Y# E2 X3 A# Z6 h) ~
  129. //#=============================================================6 @5 d/ Z, x' |6 S1 ~; L' w
  130. ' v/ d0 \9 P, w
  131. {5 t- g- Z  M5 @; I( p
  132. ! D! |8 E5 m( ?# ^+ h  V$ H
  133.    while (angle < -constvar) { angle+=constvar ; }
    / D- ?' A3 ^# q7 Z' U" L+ T, p
  134. $ v% v" Q; E9 e. Q+ Z  V
  135.    while (angle >= constvar) { angle-=constvar ; }
    & W: o0 z$ p, [% X
  136. ! ~, G5 ]( P2 P6 ?
  137.    return (angle) ;2 Z* d9 y. e3 q

  138. $ z4 r7 ~1 Q* [& `4 |
  139. }8 l) C6 t! I9 f, I! w8 U- W

  140. & ^7 a' G6 U/ m3 _
  141. //#=============================================================
    # j) P. J9 o4 x! Y9 d
  142. / Y, e) l' g! m$ p* U; Y
  143. double Check360 ( double angle )0 q3 d7 ~& P: q2 B9 z0 ]- a
  144. 9 {: Y. S$ I% ]9 v
  145. //#=============================================================
    ) ]7 @4 e' |9 `1 S2 y* }9 h
  146. ) l& e5 ]& o  A1 M4 r' }
  147. {' A$ C; w: l, Q9 N

  148. % I: l* e. B% Z
  149.    while (angle < -360.) { angle+=360. ; }  j/ w, d& s! q4 d, O- G/ L
  150. % E8 i2 l, m$ v7 Q+ D4 Q3 t7 ?- p5 k0 n6 H
  151.    while (angle >= 360.) { angle-=360. ; }( B: L( }6 H: t' ]" k3 j

  152. . y4 _9 y: B+ p2 Z6 V
  153.    return (angle) ;
    # r) f  B4 d; @( y) u/ |# r& s( n" i; L

  154. $ Z0 b" ~) q! `7 V
  155. }8 x' W1 d. w! R
  156. 9 l- F, N: u3 g
  157. //#=============================================================
    - B! B" X) L+ w1 x- `4 k
  158. 8 H2 J( H; b. X% _, r
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    " t! Q- Z7 F( i' n' C: {8 h
  160. ) z" e! Z1 J, G1 [, f
  161. //#=============================================================
    , E* {: {$ h$ u4 L

  162. " f* N0 ]% ~$ u( d* h# H# R( f9 _# K% v( I
  163. {
    6 N% s: N& _% u; R
  164. ; E% Y+ u1 q7 r) ~7 f: E
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }- Z7 Q2 \4 q/ d; ^* ~

  166. - ~4 i  ?) j+ X% J3 t
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    3 Y/ I4 j0 x' P
  168. ! K+ E, o6 z/ M3 R
  169.    return (angle) ;5 M. H$ X( j- V) v2 _

  170. . F5 _$ X; e) K( t8 T
  171. }
复制代码
4 h4 T% Q1 i/ q8 d, h6 d
以下为摇篮5轴计算过程代码0 e$ `7 E8 t  D' T
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);( n  {, d9 n- H
  2. * [: ?6 o1 k1 e/ H3 |
  3.          j=0.; B1=0.; B0=0.;
    ( G, W5 P) I$ r! e+ G
  4. , N+ ]+ O. x  ^+ f
  5.           if (EQ_is_ge(i,0.)) {4 s# I1 O% f* t3 {! r6 \

  6. 5 t& ]7 x5 n+ e& C6 g
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    . K+ u" ?8 ]) @0 y9 b
  8. ! w: Z0 T" g# H7 k: Q0 f
  9.           }8 s% P+ o1 w, f( Y

  10. 7 O& W8 a, }' X3 q
  11.           if (EQ_is_lt(i,0.)) {5 ]2 Y5 a0 ~$ [# K) U- ?
  12. # K1 I; a7 }& x. o0 U" z
  13.              if (EQ_is_lt(k,0.)) {* @/ w4 m& j: o. D, `
  14. ! ?' }# A* s" g. ^
  15.                 B0=atan(i/k); B1=B0+PI ;% E/ d4 h# U" e* p
  16. ) x6 I! N: f7 v8 V/ K3 x
  17.              } else {
    6 M: }; s* N9 _2 i. ~; N

  18. # K. o  T  q+ M
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ( x7 b7 {& T. s/ H5 H

  20. $ G) T& g5 T- b/ p) Z
  21.               B1=2.*PI+B0 ;
    / g: r2 |$ e" N8 |  ^  c2 t( z
  22. . b8 c; X' N2 h  B: t
  23.              }
    0 o# K1 y& ?5 b

  24. / i5 l) B: W! B' c# Q
  25.           }0 V5 W) o/ c* z  V0 N
  26. ! b; l# E7 S! I7 w0 d) X
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ( r: Z" j* b4 W4 ?/ ]5 b

  28. ' G- j0 c2 M) R: I8 Q0 k) Q
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    5 E! Z" F* Y& o; _
  30.   K( @; n% F4 b: }
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;- o( n/ p( h6 M9 L/ O1 j7 P% c

  32. 5 t5 R  A# ]( V) D0 w6 h7 Y- i
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
% B. N* @3 y& n( W
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。) G: }" |# Z# @: P$ c
5 e8 D2 \: P/ w0 M1 {, ]6 B! n1 \
640.png ; }/ ~& a; R9 n$ G& t
测试结果:
* v& Q' V' {/ q  n( \" Q  p% m& i 6420.png & R: N3 Q, E( l1 Y& F' I5 ^

; m  A6 P5 Y4 H1 ^4 g3 Y  e# R2 p8 d反向测试结果 6410.png
% ^. t8 D# Q9 l  u( n- k2 M4 P& \

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

187

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-2 19:42 , Processed in 1.464534 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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