找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4210|回复: 1

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

[复制链接]

431

主题

5754

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);; V" A( F9 z8 k" l+ s
  2. int  EQ_is_ge (double s, double t);" e4 I3 I9 `7 A- N4 i* r
  3. int  EQ_is_gt (double s, double t);; y+ c/ K$ ^' s6 X) }1 q9 b
  4. int  EQ_is_le (double s, double t);
    . ]7 X' }  J3 _$ A' U* d. i5 d+ e
  5. int  EQ_is_lt (double s, double t);' R% u- C4 N) w7 p
  6. int  EQ_is_zero (double s);( o" M% D# X: T; y8 R' w5 ^: U5 \
  7. //=============================================================/ o: I* m- {5 \$ F8 t
  8. double ARCTAN1 (double y, double x );
    7 A* L1 |5 z" k+ x+ x" ~. L/ A2 t
  9. //#=============================================================
    0 p' A% e2 [# u, X
  10. double ARCTAN2 (double y, double x );. L; r. j# A* c7 f* V7 I
  11. //#=============================================================" _! F* [3 ^/ ^. k- j: A0 D: h
  12. double CheckConst ( double angle, double constvar  );
    ) g8 G) |) I2 R) Z7 d3 F# i5 r
  13. //#=============================================================3 y, h( I$ G  a/ ?5 ^+ Z
  14. double Check360 ( double angle );: e5 X5 j  {  `) c+ |
  15. //#=============================================================
    3 u; g+ C/ y8 ?+ q2 g* f
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );4 V0 a7 I5 D( [7 \% U$ W9 \
  17. //#=============================================================
复制代码

( c# L2 ]; n5 D6 c以下为部分源代码,用于判断,计算角度等' r% U6 u& Z; v& r
  1. int  EQ_is_equal (double s, double t)
    2 D3 {1 E# b9 ^' w+ A
  2. - l& k9 q9 q5 q  U3 {: C3 k
  3. {% l& ?( I: F) M: U

  4. # I0 C: \3 X: H
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }! M6 d  i2 E% o: ^+ H$ u

  6. : ~1 i* l8 S4 b$ v6 i
  7. }; Q: E3 {" z( W- U/ i

  8. % g4 d, Q8 X+ m# N( t  J
  9. /***********************************************************************/. [1 S+ X2 X6 Q' @0 t

  10. # Y( s9 S  E, W6 j& ]* U: u, n
  11. int  EQ_is_ge (double s, double t)* O; @, z) T6 [% H
  12. ; D9 z$ j( k0 \7 N4 F+ W2 D  }
  13. {- W8 F  C0 V) `# f4 ]4 K9 h9 v' @

  14. & d8 _( d# S1 X3 ~/ B
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }& ]! i9 `! Z( f8 h$ h5 i- v

  16. 8 k! z" S( C# d; Q) V. T
  17. }
      O  f, B1 i/ k3 `; R" l

  18. 9 \2 u9 r3 L4 B* Y1 g2 U
  19. /***********************************************************************/
    2 Z; L9 v2 F' i. {: ]

  20. 0 v" r( K2 x& O% q  Q, L- l4 w
  21. int  EQ_is_gt (double s, double t)" y1 q6 a$ l; H5 C1 f% _7 n
  22. " }9 u% ?& ^8 c
  23. {1 V4 g' k) M1 Z1 d% ?) s5 r

  24. 2 d0 t. }& l/ F
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
      B* Q( v- b8 s2 e

  26. 1 ?9 B& [/ d" }% Q  J2 k
  27. }
    / D) z) m- ^% p* z$ ^6 |
  28. 4 ^' a- S; R+ R7 |- d: E! E
  29. /***********************************************************************/
    & ]* z& O" s* B, o) k9 i2 v

  30. $ E. u" N' ^. Q; n! i$ y5 M" i
  31. int  EQ_is_le (double s, double t)
    ; Y7 Y- Z$ G* X9 ^* V

  32. 5 _5 W0 Q( ?; x% @
  33. {+ a0 Q- {* q+ r5 T% y

  34. % W' }# ~, ~1 x
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }4 r8 d" d  H* _3 b5 R

  36. 7 r% s; j4 E& X( O2 B- @
  37. }+ l) K! `( ]+ W0 i
  38. , j' c8 I8 O2 Y: x  B0 u; _1 T. e
  39. /***********************************************************************/4 }" y4 H! j: G  O8 e5 E1 o( l* L
  40. % K0 R' ]) H4 ^! G( ?1 L
  41. int  EQ_is_lt (double s, double t)( R/ A% o) M- ^# s# k
  42. 4 s3 f: J8 t  h; d! I
  43. {! T9 c: N% L% S- X' ?/ I. c3 G

  44. 7 |* V9 u* p( c" `* M5 |
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    1 X. Y* Q3 I; D! S( L( I/ u
  46. 7 t; L/ u& V. u. d
  47. }: m# A$ j. f* Z: n. b, H

  48. , @0 q6 @9 b5 H4 g) {. p9 ^/ ^1 V, _
  49. /***********************************************************************/) p$ L" P" x7 E% ?1 D

  50. , y2 Z, L' b; M# K& J3 f& O; W
  51. int  EQ_is_zero (double s)3 j2 n, i# E( q
  52. : W( ]# t/ K6 M
  53. {# g- m' S/ b8 ~+ h8 Y3 \7 P+ g
  54. $ ~8 ]4 F% E5 q$ N( y# \
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    : O) [" p4 p, E- u( D

  56. 6 i/ \; U$ R3 Y* `: j, J2 B) H$ Z
  57. }4 x' p- \! o) p. W

  58. : _; Q9 Q' x$ w, L* X& j; \+ h. A
  59. //=============================================================
    + Z$ C) G# O" i& g
  60. 6 H4 {% u* l  E. E" U9 c5 T0 I% Y
  61. double ARCTAN1 (double y, double x )
    3 O5 \! }# K7 e* Q5 W8 @" Z

  62. 8 m; h2 E* o5 k
  63. //#=============================================================3 e% N  S; H" p; `  Z+ g

  64. " |6 p4 J! Q) H8 B8 R$ q1 i
  65. {
    ) u, v$ B$ i1 \6 b3 u* y" M  z
  66. 7 z3 {9 c6 ~. f4 G" ^. N% V
  67.    double ang;9 Q  I: |+ j, y/ J$ ~- f7 e

  68. / Y$ k4 k% q* [7 D# n  `+ r
  69.    if (EQ_is_zero(y)) { y=0; }. \' N9 C% z& }1 s! R3 ~# S
  70. 2 c3 P5 k" x% f* v
  71.    if (EQ_is_zero(x)) { x=0; }
    , G; z# z- \- p  H; {7 y

  72. * {; Q# q# u8 _* E8 }/ Z5 N) I; X3 ?
  73.    if (y == 0 && x == 0) { return(0); }
    . P4 o  C( a- E, Y/ l2 ]" M3 i9 P

  74. : v) d- F' f+ u/ r' ?: B
  75.    ang=atan2(y,x);* `+ t) l/ p: W
  76. & [0 ^% X9 B% R' g
  77.    if (ang < 0 ) {
    " O- G7 O* ]4 Q+ w. J  l

  78. ) z7 U7 @5 ^. ]5 \/ k" ?) P
  79.       return(ang + PI*2);& d' j- b2 j. _& J
  80. 5 S+ T$ j/ K9 ?) e! F
  81.    }% K" x) F0 _& G
  82. 2 j7 u! i- H; y% {! u# f1 t
  83.    return(ang);/ U  j* r8 S( [

  84. ; O5 C3 v0 w+ L9 M
  85. }
    - I3 u0 A. I4 B5 h. Y

  86. , Y' @6 J" J* e2 V% ?1 r
  87. //#=============================================================
    + E& b; Z2 [+ W% l
  88. ) b$ w. O. E' |( X3 c* h1 V3 v. J
  89. double ARCTAN2 (double y, double x )
    6 D6 g9 R" I$ [. n- F
  90. 9 Y# h9 |7 P, I6 b% ~/ l
  91. //#=============================================================
    8 R* e; l* b6 I  _' N

  92. : L. Z/ J4 s& {5 F1 P7 v
  93. {) ]7 U' N6 C& x% P
  94. 0 ?- d" {/ O0 T! D; A) a
  95.    double ang;2 |6 P( _3 j" Z6 K
  96. - Z9 ]: W* n; R0 ]7 L8 G2 I
  97.    if (EQ_is_zero(y)) {
    - G1 V( Q2 H$ M& j% Z. G
  98. ' g7 P% O+ L$ t. i% d
  99.       if (x < 0.0) { return (PI); }3 @4 c+ a/ f2 u" Y. N
  100. 6 N( P/ K; G  Q% c1 F
  101.       return (0.0);
    6 H8 g+ k' u% c1 A8 |. T2 I

  102. 4 v! f3 ]- N/ @' j) f" d
  103.    }
    " A; s! h# a9 q5 b

  104. , l- R' z- [8 K. y& p% A( m
  105.    if (EQ_is_zero(x)) {8 B! n% I! F5 |4 g1 _. e4 d8 q

  106. . ~5 E$ C7 s6 S9 @
  107.       if (y < 0.0) { return(PI*1.5); }' Q) I7 L2 j; \! T! {( _

  108. 0 d& @- ~, a% H8 {3 k- C1 F
  109.       return(PI*.5);( A6 d" [  }. n
  110. ' e% E) J: Y2 Y; A
  111.    }
    ( X  h7 O8 h4 |0 n( Y; ~% r
  112. 4 r9 b7 G' e( u1 r# j. O7 t" u/ E! X) o
  113.    ang=atan(y/x);
    , B2 E  A5 w- A% |6 E$ U2 y
  114. ) W' Y1 G+ H- V9 q0 f" a
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }* Y$ k; Z1 y0 g6 l% ]
  116. ! y; N: C  f- h, q. w
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }4 [+ d0 {! ^8 v5 s+ z* c2 a6 L
  118. * S3 m! R3 x+ g" }: A/ @8 I
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    # h4 F& R. ?  E3 S& I1 C
  120. " g$ i2 S. |6 E3 X- C
  121.    return(ang);* N: a) E8 Z% c& M" B
  122.   ^6 C/ y. |7 \8 F" H, h
  123. }, _# H3 V! Z4 E: |$ |7 K- K
  124. ) T$ |  U/ w5 f" ~: ~  s& P
  125. //#=============================================================  |( L: y- x5 @6 d2 s. [# G

  126. ' }  y5 X  i: e) v: F
  127. double CheckConst ( double angle, double constvar  )+ a$ x. L8 |, A6 O/ O3 ~0 U

  128. 1 H6 j9 w3 {5 l6 n3 K
  129. //#=============================================================
    7 N& n7 N9 `6 |! O

  130. 6 N5 A" G& C$ x, d* R; f
  131. {2 Z# m! C9 N& g" f- a+ d  }

  132. 3 M  S) [  Z; X" A1 \* @  @, ?
  133.    while (angle < -constvar) { angle+=constvar ; }9 s; S: y+ d( @: k- M. u
  134. & q; _! Z) y" m
  135.    while (angle >= constvar) { angle-=constvar ; }9 ]+ O% C5 s; m- N- A
  136. 6 P6 P# ~5 E) I) t- t/ _! m
  137.    return (angle) ;
    % B/ w% n# y9 d8 e& e
  138. % Z7 G! I6 s; i7 n* E& G( G
  139. }: }0 j2 o, F, q

  140. * `- Y8 B; @) G# A  n0 L
  141. //#=============================================================3 x% X& ?  h5 i8 ]

  142. ) A% J' A7 o+ i) k! d
  143. double Check360 ( double angle )
    0 w4 k$ ]: h; h4 P9 W

  144. 9 q5 b, e2 Q# g' t# l3 H  {* o
  145. //#=============================================================
    . x; |* C  F/ n8 r+ D* n2 O* ]
  146. # G3 z( n5 ~  i9 R7 _, E4 w3 H/ {
  147. {
    ) ^( F8 N5 H$ I# P
  148. 6 ^$ z+ R8 [) G
  149.    while (angle < -360.) { angle+=360. ; }
    6 `! E/ c( A, Q6 }2 X* g
  150. ) ]8 ?. n; ^3 n" q8 t
  151.    while (angle >= 360.) { angle-=360. ; }) a/ Q# v$ E0 A- `1 N
  152. ! E0 O/ _$ ~2 j$ J+ _2 u
  153.    return (angle) ;
    + \0 {7 d: U1 C( x9 q
  154. 2 F( Q. n8 `) O1 ]
  155. }' n& A2 }- f, {
  156. ( J* Y2 p* D3 U* ]- R( L7 K
  157. //#=============================================================
    5 [2 L. Y7 P1 |% [6 f

  158. % K. x# R& p& N6 W
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit ); {$ r! h( ^' z, I% A; d

  160. , H+ y+ u. `' D  x8 w8 L
  161. //#=============================================================
    : W/ E- n7 _- N

  162. 8 V# i# q3 Q1 R2 d! @- q2 C% u. v
  163. {
    # C9 \+ P: C$ a# b0 k; s

  164. 8 Y6 A& p- b+ [3 S" R8 B3 {9 z0 [0 N
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    - X! o1 M7 |+ _$ o; [; f8 `! q

  166.   q, w+ c6 R7 Z; E2 e
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    , \( C/ Z4 H7 U, g  _& h
  168. 9 \6 \% b4 U* q: s2 V
  169.    return (angle) ;; D! y9 D9 m5 o& Y2 u+ K) k

  170. * S% I9 z5 j0 C% j+ g, j7 C3 ?
  171. }
复制代码
, ]  X: P0 P8 @9 i/ S# w* J9 _
以下为摇篮5轴计算过程代码
4 J8 }& {$ x( A: b0 d$ \' x% B
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    : X; U3 y8 m% \" z8 ~  e
  2. 5 M& p9 T" x" V/ e
  3.          j=0.; B1=0.; B0=0.;1 C' q% f! G8 E/ U* E

  4. # b+ S9 N7 W8 q4 ~4 P
  5.           if (EQ_is_ge(i,0.)) {
    $ _  L& y1 E) s1 b

  6. 0 L. m3 W) e* q( h& w" D/ H; \! R
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }5 D: F2 x' o" s3 S, t# A
  8. # i% u0 A4 I( k
  9.           }+ A( ^$ W" k) H, p( @7 M

  10. / U& ?2 v6 i5 }* Q, p
  11.           if (EQ_is_lt(i,0.)) {
    3 }* p1 Y  m5 ^

  12. 6 n2 Y1 n+ J" I, n/ J0 L* o0 P
  13.              if (EQ_is_lt(k,0.)) {
    9 ?8 D9 w/ F7 r

  14. 2 R  t; `4 \( ~1 h2 }! I) u; i
  15.                 B0=atan(i/k); B1=B0+PI ;" V& R1 y/ s. A8 \

  16.   t. t% R/ x$ c) c. o( `7 k
  17.              } else {% U+ X' K( a2 m. Q+ d/ b% u- J

  18. ) @& f4 t" u( L. x% @
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }7 q' j$ u$ @4 n9 {
  20. 3 E2 e9 h- o% z. \. D0 a
  21.               B1=2.*PI+B0 ;4 y2 C9 _) H% v8 b. [$ K; F
  22. 2 S% y% E! r# D+ T! p
  23.              }) V& R* u6 B# r/ o
  24. 7 j( p# _6 S9 w
  25.           }
    2 D& `& W& Z7 g9 A, l" x- K

  26. ( `0 F) Q: B. p' ?
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;# i* K3 Q+ i+ u$ M1 c
  28. ; n$ r3 O% A+ t% w
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    / I1 s- R5 c9 S& g

  30. " L, r1 V7 m. b1 y4 f  u
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;9 R+ p/ Y) M0 e0 s* `' I
  32. 4 t) _) t; ~0 M2 |
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
: ^( u- g: G, N9 }* x$ X! e8 U. V
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。0 W  F+ Y: b- b7 G/ L

7 y  \$ U( |, `6 e6 w 640.png
' d8 _) ]9 t! F( P$ k测试结果:( ~/ ]* g( j5 s
6420.png
+ b" f) J& T0 B! x" p7 [  J3 X7 v$ l: H4 Q, R$ j" v1 E- n
反向测试结果 6410.png " ~$ Y1 x) [% j0 ]( {7 ~- w  Z# |

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-26 22:10 , Processed in 0.191307 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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