找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4851|回复: 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);
    / X2 @# |; }; c4 u2 s8 F* d" v9 g7 R
  2. int  EQ_is_ge (double s, double t);! @9 n: p4 k- Q' D- K' P3 X
  3. int  EQ_is_gt (double s, double t);
    : }8 Y' j; d2 s, e% r$ s
  4. int  EQ_is_le (double s, double t);- S- X, o* X2 B0 e
  5. int  EQ_is_lt (double s, double t);/ v' W  ^0 X& Z! I
  6. int  EQ_is_zero (double s);5 `$ M! S  e( k' l5 w/ D: j/ C2 I$ O
  7. //=============================================================7 j% z( w3 r8 ^- ~. L3 h
  8. double ARCTAN1 (double y, double x );! `0 Q1 s) E  s7 e- F: B
  9. //#=============================================================
    : B% \! l8 y& G
  10. double ARCTAN2 (double y, double x );
    ! M8 t) v; I4 z! A* A  }9 U; b
  11. //#=============================================================
    / Z6 N5 O0 h9 R3 P  `% e! K
  12. double CheckConst ( double angle, double constvar  );) f- T% _8 T8 l3 f- n# x$ Q
  13. //#=============================================================
    & Z+ Q0 ?+ D5 C7 n) A, T3 {! a
  14. double Check360 ( double angle );
    : K2 r* l* `  f; f
  15. //#=============================================================
    ) ?& n" B* B. W0 K
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );& t' W) @( v/ _$ H9 W/ M
  17. //#=============================================================
复制代码

" T) n3 k9 M4 E4 o以下为部分源代码,用于判断,计算角度等1 m. p0 ]8 M% J: o/ O  y
  1. int  EQ_is_equal (double s, double t)
    - E7 R5 Z- H' T/ e- ~9 p) V5 v

  2. ! b" j+ X1 A3 H' q2 F
  3. {# }$ F4 W/ E; G' }- m0 D% [% M7 L/ P
  4. $ q0 z+ M; k3 J( l$ u
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    % u; x! ]) B# A/ A* S
  6. 1 Z+ L. p% Y  r3 a
  7. }/ I$ L  \" b  S+ B$ g( a9 }6 D) l
  8. - p6 D! V5 u$ H) b  X4 A  v% O  F7 A9 X
  9. /***********************************************************************/
    ( t9 }/ b" {' {& `# t5 F/ w! k6 f6 K
  10. 6 ~& E7 e" V2 e; y* L
  11. int  EQ_is_ge (double s, double t)
    * j. L8 ?' ]% i7 p

  12. 3 Z$ A1 M0 R* H5 {1 m! W* G% r
  13. {
    . i" T" u: n/ L- l
  14. . {) l6 ~7 v$ D$ c( C. M
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }1 l) V" H0 x+ ]; k
  16. : G+ Q' y7 K. |6 x/ `8 F% T
  17. }
    2 @3 e$ k! E6 F3 {" @( v, ~: a: g

  18. $ ]) L$ c) R+ w* A
  19. /***********************************************************************/* \0 D) g  M7 H- D9 n2 H/ x
  20. 0 W7 ^& m8 X' |' l
  21. int  EQ_is_gt (double s, double t)" \$ J9 [3 z; }' Z8 v3 ^: M7 s

  22. 2 g4 I. `  @& _/ b
  23. {- I4 R$ `3 s( T/ Z/ ]' ^7 I6 m; g2 f
  24. 0 b1 M7 I( N- ~! }4 G# {! U
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ! O+ N2 b$ |+ `) k1 H( I

  26. ' H9 m4 |9 J  R6 y. d$ M. x
  27. }" _: H5 \0 a; G+ m+ j
  28. 8 |: x7 l, s/ \0 g
  29. /***********************************************************************/7 L& T9 D  }2 ^
  30. # s$ ?9 u1 H# F7 R% Q- e
  31. int  EQ_is_le (double s, double t)% \% v0 L: W4 n" P- _$ ^
  32. 1 ]& O# F0 @& Y$ Y7 c
  33. {
    5 L, t. I' d+ h, D$ t/ ~3 x

  34. ! K" q& R; A" {; Z' p9 t
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    3 v% \; f, t& [2 g: x& y" K
  36. , N* B- O: @' V- Q3 z
  37. }
    / M* P* O) _6 U" h1 l

  38. ; b7 q1 P* T5 _. B9 ?3 s  l0 E
  39. /***********************************************************************/
    1 J: p' Q9 f/ `1 x3 @
  40. * Z- ?, R* [# n& x
  41. int  EQ_is_lt (double s, double t)
    6 N" x" z) O' h4 W# p

  42. 6 M. {3 z; A& Z  ?1 a( q
  43. {
    # p7 @7 p' ~- t/ q) i
  44. ' C, O9 ]$ R7 g
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 ?( O+ W% Y5 S/ n: ~& j' I0 E

  46. 6 B  t8 @& u0 F  V
  47. }% ~0 ~+ l1 \" r+ \

  48. 5 |9 g8 `$ g3 d
  49. /***********************************************************************/
    $ M3 c) z2 o; u  ?+ `
  50. : [4 r# P7 ~3 w# [- S: D
  51. int  EQ_is_zero (double s)* t1 S) ^  k$ F# O8 b
  52. ) k- L) n/ ]$ @/ r; E, u
  53. {
    6 g4 a& E' k( A2 B+ B
  54. / i5 I/ U2 u1 R& C8 A" t! u
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }5 [! o; U7 s& [, ^# b
  56. ; G: l1 Y9 L9 C2 I% |+ T" r0 d. c
  57. }
    6 b! ]6 q' ~) l& A7 D
  58. + C( L6 f+ ]+ |2 Z" D
  59. //=============================================================! }& f; O# w( a4 F& R3 p1 e

  60. ; n5 h: o( s7 q5 d* O/ G+ N7 \
  61. double ARCTAN1 (double y, double x )- r! w) c/ p5 t" y6 Q+ d3 @. @
  62. + Q& g3 f/ }; n2 L3 j& z" E
  63. //#=============================================================9 c! i+ B4 B& \6 i! {& V
  64. & c% O9 G9 g" n% ^
  65. {
    3 [' T% Z9 m7 U- V  i  S
  66.   c) y  t7 h( I0 L4 ]6 k* ]2 e
  67.    double ang;8 x, P0 p* ~/ R- V5 B- x& t
  68. / y  R7 T, c% J
  69.    if (EQ_is_zero(y)) { y=0; }- K6 f; V% Y9 w6 M0 o, X8 g! @
  70. / F' K0 X' K0 ?- p6 K
  71.    if (EQ_is_zero(x)) { x=0; }
    . d+ v# ~! x) J0 ]/ z
  72. 3 Z# T6 o8 P$ C2 Z2 c; K. k! G0 j- Z
  73.    if (y == 0 && x == 0) { return(0); }
    1 c: B# o4 ]2 S3 q7 @
  74. 2 W3 W" o, a/ C$ Z7 B- \3 e: A
  75.    ang=atan2(y,x);
    - R- L8 `4 s, ?8 i
  76. $ v( e4 N* {6 |1 |. J2 p
  77.    if (ang < 0 ) {
    9 l+ R: ]: s/ n
  78. 4 {& H0 ]5 ]  n/ s& @/ f
  79.       return(ang + PI*2);
    3 j3 W2 P4 q( B$ N1 X' q

  80. * _, o$ g) z) v& D% h( U5 K
  81.    }/ H  L& Z' c- J2 e7 _# a" `) V7 \- ?
  82. & G6 i" u% [# a8 ~
  83.    return(ang);. A. r6 ~) P& {+ b, n. _

  84. 4 c! K5 S6 m: J
  85. }' r, N# M9 T! Q  |. @! R. G
  86. ) q; L7 q  h, k8 N
  87. //#=============================================================
    8 F' G, |' h1 {! s. F% w
  88. # ]# Q2 |4 ~! ]6 C* p; m
  89. double ARCTAN2 (double y, double x )- R- Q+ P' d2 N% j/ c3 C7 K
  90. - L! H9 g: l% {1 c) T
  91. //#=============================================================
    . T0 S( d7 U1 N2 d1 K0 H- T  s

  92. " z) }+ {3 A8 a- g  [; v
  93. {
    ) c5 C5 g/ E3 F: R
  94. " l/ X- O1 y! e
  95.    double ang;; d/ Q% m+ r$ p

  96. * {' C( A" {: s9 u! L% I
  97.    if (EQ_is_zero(y)) {
    9 o, z/ h! B4 y$ W; Z  V
  98. & A( X- r$ L" i% x
  99.       if (x < 0.0) { return (PI); }+ T. t8 M; }9 W$ P2 x- T
  100. ; s. U  |* B& P! l
  101.       return (0.0);
    ' w) A, [2 R( x3 K( E& ^5 v

  102. 6 I2 ?6 R, y% i/ _- z5 R4 U0 z
  103.    }+ |9 W/ |3 W! C  D9 r
  104. % [+ D1 p8 F# T+ w' G1 H
  105.    if (EQ_is_zero(x)) {
    3 h4 c1 t9 y* S3 P& Y+ Y! W5 R

  106. 0 ^; }$ k! P: W
  107.       if (y < 0.0) { return(PI*1.5); }
    ' Y& F) k  c8 k9 _. W

  108. 5 }( ?& a* v9 s) C: \
  109.       return(PI*.5);
    ) @$ r  o- b$ I, P# O/ l8 k

  110. ' b7 a9 g  P/ N
  111.    }
    7 L3 J, N0 c# ^; e; p, w

  112. . o9 q  o# W% u+ ^
  113.    ang=atan(y/x);; B! `2 _+ h/ a3 P

  114. 5 ]8 {: [% R) _0 H+ i& i5 t
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    3 N6 l1 b9 a3 f) c% O! Q
  116. 6 `4 R& S6 c0 n2 y# p! e
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    : t4 v4 K- N$ W
  118. 4 o4 N  ^- y6 h- Z6 ]" R: L( y
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    0 r  Q, @, D/ T- T; f, z7 {

  120. 8 {/ z$ J; T4 Z- M8 x
  121.    return(ang);& `6 G4 ?3 Y3 k5 y# {6 p( i

  122. , l% ]# v0 d7 L4 w4 }
  123. }: Q- p# b# Z+ Y
  124. ' c$ J6 y* X9 T% F$ j1 x
  125. //#=============================================================6 w1 C; m8 k9 r/ p& _9 m
  126. % l! V9 y' |( m  u2 Q
  127. double CheckConst ( double angle, double constvar  ). K: T! o  E2 k
  128. : m  O. q* G2 F2 C" l
  129. //#=============================================================1 v1 }" Q3 m. j& X) ^% y7 ?

  130. 1 |7 h' m5 @$ y9 C* e! U
  131. {- P7 Q5 N+ _6 o# a' S7 z
  132. , b" h' p* p6 y8 c4 n; [
  133.    while (angle < -constvar) { angle+=constvar ; }
    4 H0 u, |  o0 a" o3 H0 q( N: _
  134. 7 w, X  j$ H# |& _
  135.    while (angle >= constvar) { angle-=constvar ; }0 w& p9 @% Q( V
  136. + W" t* N, N1 b5 r! O; B
  137.    return (angle) ;
    # L1 c& q! f, f

  138. - c4 q5 w# t$ @: l
  139. }
    # V" o5 s9 O9 h+ l
  140. 6 R1 N" y5 N% Y2 N* k8 k4 T/ d% T
  141. //#=============================================================9 x) D# t' q. R. S, L5 X" [! \! h

  142. - c  w1 e4 M2 Z1 j( i' X
  143. double Check360 ( double angle )! W1 s+ z$ d4 P0 T4 T
  144. : z; U; v2 a7 i% s
  145. //#=============================================================8 Q+ O4 v" y3 ~
  146. : E) S* z/ r2 x2 ]
  147. {8 V7 b) `3 ^0 o1 D- q: D, P
  148.   J' K  C3 O3 C8 X
  149.    while (angle < -360.) { angle+=360. ; }
    4 q0 u: G) K* u

  150. ! G2 e0 o+ F: r. _0 j( g
  151.    while (angle >= 360.) { angle-=360. ; }% S, _, Z5 D* `3 `) Q; c# O

  152. + f' Q. _; J( {
  153.    return (angle) ;
    8 B1 \; A, t1 h4 S

  154. / Z, `" T! o4 x, e9 t
  155. }
    $ \% I8 Y5 P8 `* z! `( o

  156. ) q, g/ ?( m$ u, G( R& |
  157. //#=============================================================
    ( c9 p* q* |* g
  158. & E3 A0 }  q* v% m+ _
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    1 O7 P& K$ a$ V9 l  D$ D( N! d

  160. . z  ^7 c, p9 L2 y* B" T
  161. //#=============================================================- @! Z  ^' k6 ]+ A
  162.   w1 {' z5 [/ l6 Q; h# Q
  163. {
    0 x' g9 _7 K& _4 I. M
  164. ) Y. s: q" u) _' a) X' Q" q# v
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    ! @3 D" J, a, G* b2 i
  166. , [+ {3 S; y' g3 I! e7 d
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    8 q& k% R) ?9 e! a
  168. $ k# r/ A' w! f5 i
  169.    return (angle) ;1 D5 c  V& }+ T* `0 \; L
  170. & n# w8 y6 }2 k4 C
  171. }
复制代码

, K  o6 n. N; W! f9 X以下为摇篮5轴计算过程代码1 Y4 p2 [7 n& y& a
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);0 a) D  E* A' k: ]4 N0 i1 f. X# i+ e

  2. 8 v6 u1 H# b- u1 R! G% w
  3.          j=0.; B1=0.; B0=0.;
    4 q8 [  {1 o. Z" n
  4. / f) ^4 i6 p( ^7 V
  5.           if (EQ_is_ge(i,0.)) {
    ' G' a2 F1 i% g  ?% _( X; U
  6. ! c4 B5 L, x, |: h% h
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    & ]9 N: w  Z$ z3 g1 Q; \8 i$ H

  8. % S/ r* q& U4 _* L, S+ G
  9.           }! J2 G' ?- w$ G, j" V& v* p

  10. 7 x" A$ ?9 F0 a& I5 F
  11.           if (EQ_is_lt(i,0.)) {
    ; ^' B5 r" W- f+ ?- w
  12. 2 K% t* @' A5 G" \6 w7 B, h
  13.              if (EQ_is_lt(k,0.)) {
    7 S0 ~8 O3 b0 Z: l# [% |5 }3 `
  14. ( P; V* c3 [& y; N4 P& g4 W3 \
  15.                 B0=atan(i/k); B1=B0+PI ;  I- H; M, k; p. A# s5 `) x' R

  16. ) g7 L9 Q) w' K% @
  17.              } else {, A; x! s; w# h/ F1 I
  18. + j* I" c* j3 Y/ y  b
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    6 P  Z! b% `/ D# u) m6 {6 v
  20. % c) K4 ^5 U& G$ n  o/ L# b
  21.               B1=2.*PI+B0 ;
    ) o5 Q; |! k6 L5 E  r3 V
  22. 4 ^  O4 j' W( [5 ~1 s
  23.              }
    / G7 ~9 I2 Y3 w2 n3 E
  24. : @! p# D9 [3 A) h* @) p
  25.           }# M6 E/ G0 B- I9 D2 `8 q

  26. 6 P& k1 |2 K% ]! r  Y8 [9 g4 b
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;7 y* ~* t$ }, C& ^
  28. ( v3 e, O& D3 r2 ?& ^( k  y( {
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));  F6 C7 H/ Y1 d

  30. 0 U( ]; D: U# s$ ]. {3 a
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    # u2 F/ e5 Q$ ^9 d( s
  32. 6 I4 G- v& x7 Q) R# T
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

* K/ S! D' F% v: {; J1 N8 x# h7 d) r6 m通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
6 Q* M# H$ a& x. |
- ^  v! u0 X6 ~* ?7 Z7 q 640.png
5 j* {9 T3 }# \测试结果:
# y  W9 t6 y5 d. w 6420.png
1 x# J, \# W- ?  v/ o1 v$ l! h3 x- b* X" f0 ^
反向测试结果 6410.png
- V' C" g, H$ Y9 X

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-9-18 05:19 , Processed in 0.718894 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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