找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8093|回复: 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);
    - e+ v. A8 J' R2 a, J
  2. int  EQ_is_ge (double s, double t);# c: H' E1 f3 _" Q6 s( W/ k% j1 V
  3. int  EQ_is_gt (double s, double t);  A% D% ^( f, b+ V# J7 d& b
  4. int  EQ_is_le (double s, double t);5 p$ D& Y2 b/ w
  5. int  EQ_is_lt (double s, double t);1 y" L7 a+ U7 k- D# h9 f( M
  6. int  EQ_is_zero (double s);" h+ v5 v2 V( E5 h- d; S' V
  7. //=============================================================
    6 X  ?; r5 U6 T' M  U
  8. double ARCTAN1 (double y, double x );* ^3 |+ _+ g- ~; I, H
  9. //#=============================================================9 d) ~8 h) g9 N
  10. double ARCTAN2 (double y, double x );% V. V! K1 ^" I" P
  11. //#=============================================================
    % `# Z& g# U& S
  12. double CheckConst ( double angle, double constvar  );, ~  D/ |/ N8 o5 R% N
  13. //#=============================================================& K8 {( n; U( _9 |# |
  14. double Check360 ( double angle );
    ) L8 U: d, c( P" P/ J
  15. //#=============================================================
    ( m( b/ {7 H% ~6 p1 @" l6 C" j
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );/ O. K- i& X9 _6 S3 r4 h, w2 I
  17. //#=============================================================
复制代码
; x1 ?* g8 n1 u$ }
以下为部分源代码,用于判断,计算角度等* _) q5 t# h  Z
  1. int  EQ_is_equal (double s, double t), [0 {5 k: C. T' n& }& {  _( M$ c
  2. 9 I' i; _% Q  O$ ]& e$ J
  3. {  K$ G5 z0 F; R" A* G6 D" P

  4. - U/ p$ Y; Q$ H4 N3 I
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    7 n4 E! F+ }+ ?& c! \1 ?7 G
  6. ) W& E2 Z3 l$ d; r, J6 _/ b
  7. }/ C( O$ `* @' o1 F4 F) Y
  8. " W7 o* q) {+ M* y: x; ]. `$ [
  9. /***********************************************************************/
    ! N1 @" d: T& i) m

  10. - a! R2 j4 E' X' c* f, b) l
  11. int  EQ_is_ge (double s, double t), b8 d3 i  W1 t- M

  12. $ e9 V) L% Y; N
  13. {
    % `1 x6 l+ _: Q/ c

  14. 9 Z0 g* q" P4 @* }! R9 J
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }. _. q6 S% K* @$ h* k. }: \- o

  16. 1 q8 R! Q7 g( N. o7 K8 ~+ q
  17. }7 U; a8 g5 z2 W& [& J( D0 D

  18. " D: E' k, X$ |( c) ~
  19. /***********************************************************************/
    - S3 R5 c0 x" X( H5 J; Q+ L, U& b" ?

  20. 2 N' t% r1 K( }
  21. int  EQ_is_gt (double s, double t). V+ \! S6 o0 y4 i/ o

  22. ( S% C) J& H3 D6 V. `
  23. {$ k2 q- [$ Q6 m0 o. F
  24. ) `6 k5 D4 W7 i, m5 x* q  ~' q: t
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }( D. Q. r' ]4 A9 m9 t4 F7 z9 _' @! ]& ^
  26. ' d6 K' Z( [* \# H( c& ~
  27. }! z1 c3 ~* H: r  b5 H% n

  28. / f/ X, f, g  o" }* H: H- j
  29. /***********************************************************************// O) r  [3 l' i5 O. j

  30. ) c1 H7 m/ r! m- k
  31. int  EQ_is_le (double s, double t)1 J( P8 N! w5 L+ t6 C' |5 a6 r) S

  32. 0 P5 s1 C" l) I/ ~& P
  33. {0 u; l. T+ i6 I5 P" g

  34. 4 {0 [1 F+ V7 Q: G
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; R( L$ j* C7 \) k

  36. 2 B1 r, \2 k+ u  `+ A
  37. }' P! q, J5 M; k, K4 K
  38. 7 U# P' F" G0 R- T
  39. /***********************************************************************/
      s; M6 j8 `6 z; V* H) y: n

  40.   M* ^# t+ v" k# N
  41. int  EQ_is_lt (double s, double t): t0 f2 f2 P' q! M% D  J4 ~. S
  42. ' w& _3 o+ d2 U7 n1 C" \
  43. {" z) `+ m! R$ g' J% Y) s9 f

  44. 8 _$ s2 k/ q! D6 Y' H
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }4 a# d6 @  |8 Q8 z- P0 Z( v
  46. 0 Q+ [( g& @9 u$ o0 n' F
  47. }
    ) `- q" k0 C7 b$ k

  48. / j! n8 W" [; D$ }% U4 q; J
  49. /***********************************************************************/
    6 B/ R2 ?. T* H  D

  50. 4 n8 l' C0 V6 X9 ?
  51. int  EQ_is_zero (double s)3 K* \& C$ Y& [- T& x
  52. 5 x& ^3 j) G# U& Y) r/ K8 |
  53. {
    : }8 K% A. L  ~+ |: D

  54. - D, E7 K1 W8 y0 o
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }! }$ s% y3 g( c6 \

  56. 7 D/ Z' F' y. q& l$ L5 X
  57. }
    * F/ E- o5 k; o2 \
  58. - d' Z+ `, @5 b$ j4 e0 |/ t
  59. //=============================================================
    ' w8 W, [+ X+ S5 k5 N3 ?6 ~# l

  60. ) i1 r2 V# R- q, F7 ~" X& h: r
  61. double ARCTAN1 (double y, double x )' R) w3 [; \0 s3 b4 R
  62. , R1 d% i# o9 k2 m0 h! g3 b
  63. //#=============================================================
    3 Z! N- i8 k6 k; \$ d7 F2 p% e

  64. 5 V, E# g1 _4 {# T, I2 I, C" q
  65. {6 Q8 A- r5 b6 J& f, u) p
  66. / ~. U7 L2 O9 a  O- T$ o
  67.    double ang;
    4 Y. T3 w  }# F3 ?4 S
  68. ! o/ V7 i5 k8 b5 S1 a8 J, K% i5 f
  69.    if (EQ_is_zero(y)) { y=0; }5 |  V) u) J. P# Q
  70.   s3 u" N/ a& f7 Q- |
  71.    if (EQ_is_zero(x)) { x=0; }4 d( v% x* a) }# y" U3 L
  72. ' U5 u% l- D$ ]" V) S7 t8 f
  73.    if (y == 0 && x == 0) { return(0); }
    # a& s# k& k. k% [& n. S) D
  74. 4 h! x' I) `' K5 E( \: x. u. i
  75.    ang=atan2(y,x);4 O: u. z- _1 q: Z& ]" n- }

  76. % b5 S. P, y7 V' {  \6 m
  77.    if (ang < 0 ) {
    8 {, Z' g  d! ~" y3 a; G6 V# S' C* P

  78. 9 V$ C5 |. P7 a+ t, }2 I1 s
  79.       return(ang + PI*2);/ o7 w; i3 |% W+ S- \5 ?

  80. 3 [1 h* [  C- Q( v& ]
  81.    }
    " [* b0 O! o+ ?* `/ h
  82. . s: j* F' i) W2 D" t4 Q; n! k. I
  83.    return(ang);
    3 b% K" V* M' t/ L( E- Z% ^) I

  84. 9 \' F, E/ B( b* c: X: l* _/ X
  85. }$ Q, i9 N" A; p: t! E) S) N! m
  86. 2 Y+ @$ W$ V, ], W7 O
  87. //#=============================================================
    " c+ Q7 K3 h8 S, x' O/ j

  88. + H  C, f" p9 _3 B+ P
  89. double ARCTAN2 (double y, double x )
    5 G0 M& Z  q  F5 J* n# W
  90. 6 `/ S* w9 @1 K/ {. n/ T% I" A& @
  91. //#=============================================================9 P+ ]# @6 z9 D3 S" {, Y

  92. ' x8 N$ R7 U0 @% S# ]8 _- R
  93. {
    4 X7 @# I9 M7 M+ j
  94. & Y0 k6 P+ t& p& z  A9 |
  95.    double ang;) N& z6 Z( }$ o9 e" X) ~
  96. * `5 i. W1 h1 g0 Y
  97.    if (EQ_is_zero(y)) {4 C# m5 d. k# a

  98. % }; S+ `# I4 m, w  B; l9 d" c
  99.       if (x < 0.0) { return (PI); }  N  v5 N, u- K

  100. : ?' r' h+ P! E. Q( y
  101.       return (0.0);
    5 E% n7 z2 D- Z( O* E# }5 O

  102. ! O+ b9 ^+ i$ I% f' }1 g3 F
  103.    }
    # e9 y6 s$ ~/ `" ?# k4 S4 H
  104. ' l+ }" X( X! n5 u# ^
  105.    if (EQ_is_zero(x)) {
    ) u- A' }% X( L$ J2 q

  106. ' A6 e+ x( n- ?+ d5 }
  107.       if (y < 0.0) { return(PI*1.5); }' }+ v, g# V$ N" O& z/ _4 S; S
  108. . l, y( U- t+ c  j1 C% c: k8 f4 z
  109.       return(PI*.5);
    8 q( q0 r: \( d- I7 [6 y+ ^0 V
  110. + k  U& p0 B% s
  111.    }. D7 ~* Q: j% _0 _# G, R  ?
  112. 2 p0 F* Y7 P' u5 Z3 L
  113.    ang=atan(y/x);
    $ r* x1 C) v3 m

  114. - n- G2 n' l& M# u
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }, v% ]0 e1 a, C. x! Y# G! Q
  116. 1 t' S* p- F1 E! q9 ?! \
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }( s) C! b, M/ Z! R' T
  118. 4 _, M; v7 U; A
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }+ e2 ]4 j1 e) i; U  ^

  120. , T  S, x' H0 f7 d8 s" U/ v; T
  121.    return(ang);* E& w" {; H. v$ ]6 C+ h- ?, t
  122. % Z& r. |6 O6 ^+ j9 h% M& T
  123. }- ?. K/ r' C# \7 q, c) A, s5 X
  124. 0 P# b- X" J3 j) b; I( t. \/ s9 O
  125. //#=============================================================
    ' Z5 Y2 @6 a6 t0 Z" |# w

  126. 5 N, [1 b$ d$ S/ l
  127. double CheckConst ( double angle, double constvar  )3 |; \8 |. K1 L8 O1 ?
  128.   [3 _8 _% E, s; _( ]3 D* q
  129. //#=============================================================
    ! N! ~  t  o  u) e5 @+ y
  130. ( v+ P. d+ T- n( I* Z# C
  131. {
    5 E( {+ Q9 A) J; I

  132. / U2 G4 @; {: ~5 b: |5 N
  133.    while (angle < -constvar) { angle+=constvar ; }
      p1 R" \0 _" w
  134. * l, p2 \6 H0 k( w; W% U' ^7 D
  135.    while (angle >= constvar) { angle-=constvar ; }9 B( p; D" e, h/ f" @. C$ _0 a
  136. " b+ x; ^3 q1 l1 N( G
  137.    return (angle) ;
    * c5 {) ]* s3 n5 Q
  138. 9 V- z' }1 C3 k  S! q
  139. }
    / t- R# {8 ?# y3 U9 v- {, Z
  140. . R3 E+ {2 ~$ o5 ^* B) ?
  141. //#=============================================================9 a, p" `2 @) ^3 m
  142. ) j5 ?* n& s, [
  143. double Check360 ( double angle )
    ; y( ~% ^3 u- e5 u3 N

  144. - ]5 t. l# t2 R, \# \
  145. //#=============================================================
    ! M' L9 F: n# W
  146. ) R) e( `8 f) z! p* w7 a
  147. {) o* q% s$ o/ d6 f) c# @

  148. 8 [. v- v7 U; \7 @# |- }' ~; K' g
  149.    while (angle < -360.) { angle+=360. ; }! B+ b: U- ^6 J) m5 r6 \

  150. 3 L9 Y3 ?4 E9 G5 M# P" {' {
  151.    while (angle >= 360.) { angle-=360. ; }' F' J3 g8 H- C+ J2 X
  152. * q# D% _* X! {: s+ \
  153.    return (angle) ;
    ( N6 A  W  ]& J, G; K2 D

  154. * N) v$ {1 W- H2 ]+ F( b( K6 e" A
  155. }
    6 X! L6 k! [: g2 s. {
  156. 3 q1 g6 R9 r& M3 ~* i- ^
  157. //#=============================================================
    3 D  N( O2 M4 ~$ G, v

  158. ; ]* ^* k3 p( g+ W
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    8 H- l5 f0 s( R' X- U7 U

  160. $ h8 `$ m- ]( ?; H0 M
  161. //#=============================================================
    2 A- P2 N) z: C- ]3 O5 r8 L" u6 K

  162. 4 r6 A$ D. V& @2 U8 w
  163. {
    7 t' J. X, D4 [2 V. {, H5 L2 ~/ b

  164. 0 b: L) ^7 W+ O, o0 W8 P. d% F/ u! ]
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    ! ]  F, u- q- j; w2 S
  166. ! z; r+ ?: X: q( [7 e. s# u
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }" g& O4 @6 u- L( b" O( J
  168. ) n% g0 [* k! O
  169.    return (angle) ;
    0 W5 K2 U' m3 ]2 I9 s

  170.   L  r9 c& ?$ ?( Z; I+ W# e
  171. }
复制代码

6 I. r  j7 }9 b$ X$ E以下为摇篮5轴计算过程代码
3 Z& Q0 Q$ s# y0 R
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);0 Y8 \& H' e" }: M' T6 g" W, l

  2. - h$ h+ y4 I; c& ]+ h
  3.          j=0.; B1=0.; B0=0.;
    " [9 z' G3 c  H, I8 Z' \5 I' f' y6 z! F1 a

  4. * k4 i$ ~/ O; F( d7 {# e6 V
  5.           if (EQ_is_ge(i,0.)) {. P) a7 ]8 _' p# q! R% a3 L% G

  6.   B1 x! I. a/ a: N  _
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    ! y( H6 R* X/ M) M0 t- l6 S! ]

  8. $ c0 Y7 k% k+ m2 }1 ^
  9.           }6 L& }3 x- ]/ f; h! Z, {* ~

  10. * B4 Y7 _' w! g5 @* v1 z, g- c( g
  11.           if (EQ_is_lt(i,0.)) {
    0 S7 R2 z4 S2 \6 ?3 |
  12. 0 w  d8 R  r/ Y3 @7 }7 q
  13.              if (EQ_is_lt(k,0.)) {
    2 y: ]$ i# S) {% \

  14. / Y8 C, F* c# ^; q. p% ?: [1 T
  15.                 B0=atan(i/k); B1=B0+PI ;8 b5 C6 ]8 \; ?3 W# A2 b& n
  16. 4 j1 G7 o+ A0 l4 x# _$ [
  17.              } else {
    6 o, M9 ^: e6 s2 i+ k

  18. 3 B  z1 l, ]3 o5 q3 Y3 i6 Z
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }' Z3 j$ p5 h& |5 t6 z

  20. . O- |  W! k" ^+ T2 K# k
  21.               B1=2.*PI+B0 ;
    # p' E1 c$ G4 U

  22. " q& \# Z: P/ L; ^/ a7 m# _1 x
  23.              }
      l3 X( o/ I! T" o. w# k
  24. * g3 ^- t  i/ @) c6 [4 {
  25.           }
    7 E% o3 I' r3 q5 B. o) A* y$ k! W$ W

  26. + {" P+ f/ b7 r+ v0 L. ?$ p
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    2 z1 m6 m% `! F
  28. " V9 j* z7 z" X' \4 J/ U9 J
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));# i% r  }: o/ B3 b8 V6 @
  30. + R: l! v2 W) P4 F6 B" U
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ) s( n6 i5 m% m; t  k1 r0 F+ c* C
  32.   z: b/ y- R0 X" T& V
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

" G2 |! u, o, n4 N% W- m+ j! X3 K通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
  _; Y4 T5 K. Q& [5 I2 p8 O8 U* [' O3 P
640.png & Z! o2 r% ]5 E1 F
测试结果:5 p: b: ]2 [* j4 b0 N7 ?
6420.png
6 Z3 j* E4 J/ [3 A4 @
$ ]7 R$ M( c$ J. j反向测试结果 6410.png 1 D! N6 H9 h/ z' H/ P

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-26 00:25 , Processed in 0.623532 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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