找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5313|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);/ k4 Y! R0 ~5 y  i3 F- G5 h
  2. int  EQ_is_ge (double s, double t);9 w/ q1 Y; X6 t0 n$ ]% U  S6 D. i0 Q
  3. int  EQ_is_gt (double s, double t);
    . a- W$ }# I, G% o
  4. int  EQ_is_le (double s, double t);
    2 ]5 x+ c5 G" E6 O$ M  I
  5. int  EQ_is_lt (double s, double t);
    8 y2 F% z- L3 M: n; x
  6. int  EQ_is_zero (double s);
    6 j1 e5 V0 V1 w
  7. //=============================================================
    0 _! m  m' ?3 h  C3 @) K& ~
  8. double ARCTAN1 (double y, double x );
    + k2 l8 ?: x* S3 C; @0 c- [/ o
  9. //#=============================================================
    4 Y! r9 i% n+ C  G" h8 R  R. w
  10. double ARCTAN2 (double y, double x );- W/ [" F0 n: z: s+ I
  11. //#=============================================================
    5 c9 y' a7 l3 U
  12. double CheckConst ( double angle, double constvar  );1 k( x/ t+ g* [6 V! G
  13. //#=============================================================
    4 T" t! j& w: J( |. c( R
  14. double Check360 ( double angle );* l. {2 S- V5 l$ Z' U- B; X% P9 m
  15. //#=============================================================
    ) f7 C* _% Z/ U" j( M) L
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
      C( B" c+ ~5 k$ y# C1 t
  17. //#=============================================================
复制代码

- c- K% ]5 `6 }" [" S# v以下为部分源代码,用于判断,计算角度等2 j4 G$ h8 [: ?
  1. int  EQ_is_equal (double s, double t)
    5 O  t3 g- q6 c7 J  s
  2.   T8 G6 g3 h/ ~0 v7 b' o
  3. {0 z: E. `5 A0 c  {8 n

  4. / q( C) L! D6 e, U* R; _9 a6 w! V) `
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }$ e7 H" ?( x7 P" o7 ^# H, j- A  d/ u

  6. . e% J* ~7 J: Q. a/ s6 E
  7. }( m( L! K5 O0 \& o! G! {
  8. : M9 @# ?  \7 K: s5 Y
  9. /***********************************************************************/
    * `7 Y+ ?1 v& p( x

  10. . f4 y$ p3 T# R1 u0 ?4 m" C5 P5 ?
  11. int  EQ_is_ge (double s, double t)
    ; i, U# L: n6 j+ C# p
  12.   \/ y/ Q0 G& z
  13. {
    # ~8 G+ J# A$ B6 ^( u8 E; g

  14. ' Q$ T/ g4 F. H
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    " i$ L$ \5 d, l& o- ~8 S1 [! _6 R

  16. 4 u4 V3 f% m# C7 R+ f2 u5 z
  17. }- ?/ [& P+ v7 l' w3 V: T7 B

  18. ' A* x: X3 w( h( O7 o$ x: V
  19. /***********************************************************************/
    $ }6 ?; c8 C. C' `% i3 r
  20. % X4 i4 g" Y* n% |
  21. int  EQ_is_gt (double s, double t)
    & v( s+ t. o3 D3 G+ T0 j

  22. 4 @+ b- ^; l* k7 P2 K0 r
  23. {
    3 q( H$ z6 R1 v, n, T8 k4 a
  24. 1 b' X5 }) X$ R9 }  E! }1 l
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }! X. g: i( U" y. s$ h
  26.   n+ j5 H6 A$ _0 U: N+ b+ ?( a
  27. }
    / A. B/ t8 g' I: O
  28. % j9 ?' D. j7 v5 ]3 R
  29. /***********************************************************************// m6 }4 u  C! P! O
  30. 0 [& l0 o- L2 D3 Y
  31. int  EQ_is_le (double s, double t)2 B( H1 G+ X  W% E8 H9 H

  32. 9 o$ l4 I. x7 `% d( k) ]: _
  33. {8 B" b. f: ~( r* u" J

  34. * V; z* f1 ]3 ?
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }* U2 m9 \. e# p  c

  36. ! y( n" U, B: A
  37. }
    ) [! r; D) x4 [  U/ C8 E
  38. ; E; e8 ]2 v: s" p/ U8 b: ]
  39. /***********************************************************************/
    4 j* |: {! Z" V5 y+ s/ N" N8 d
  40. 0 P- n& k" M- V- ?1 [% k6 L
  41. int  EQ_is_lt (double s, double t)& @2 h5 Z4 {7 y! R7 c$ X7 ?( {
  42. % h) Q6 [, G* y$ E9 T8 U0 [
  43. {6 {' i( ^4 D8 o1 A& Y

  44.   r& o) j2 C: r) }: g4 e" U
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    + B+ l4 s) [6 c2 ^" S
  46. ( s3 ?7 ^( D: N; J7 W/ f
  47. }
    6 p8 j! A' ?2 O( w: I* P
  48. ( d2 V# G( D/ Q* A) Q/ p
  49. /***********************************************************************/
    7 E2 g( l, Z/ |  y+ `
  50. 3 D9 ^( u/ e) i0 H
  51. int  EQ_is_zero (double s)2 E2 k( n4 ?0 @" p1 ^$ o
  52. # ?9 ^# D2 Y0 p! T, r3 u5 @
  53. {  r" M4 Z8 `4 e# i" `$ D
  54. : W3 }: @& C  z% S# I. F5 k. I
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }: @6 }0 w. F) v0 @

  56. 3 l7 \5 m" O( e
  57. }
    ( S: x3 q4 n+ f, a0 W

  58. 1 J5 m3 C/ b- }
  59. //=============================================================
    8 v0 @; ?& D3 q, O2 N! V

  60. : u* l, u! y3 b5 b+ }+ M0 u
  61. double ARCTAN1 (double y, double x ); Z, C) f, ~$ C" w  b5 n. B

  62. $ h+ J3 A/ S6 Z7 D7 ?
  63. //#=============================================================5 L3 @# B7 N0 M/ F! [3 `9 s9 V0 p

  64. . q  j4 d0 R  S+ O
  65. {
    + e4 W+ B, O' S) ~+ N# [
  66. & l+ l! l4 b. A* X$ V
  67.    double ang;
    ! O, c0 C. I3 l3 B' ?/ q. E

  68. * U% _6 O, F: [, x2 F" M
  69.    if (EQ_is_zero(y)) { y=0; }9 ^5 a, F9 L, B6 F( x& z
  70. ' `6 `- U3 Q3 n, Z
  71.    if (EQ_is_zero(x)) { x=0; }
    , H5 T& E& B# c) h5 H. {

  72. / e1 a! e& R5 f, a% u% |0 V
  73.    if (y == 0 && x == 0) { return(0); }
    + e' ^( T, w4 Z

  74. 5 {+ L. ?* a5 l% i4 [
  75.    ang=atan2(y,x);
    / M5 L2 A' e" {4 G3 _/ y* r
  76. + g9 I/ n5 }' O, K
  77.    if (ang < 0 ) {# P% E9 r. c: f4 p+ L

  78. , f1 Q+ e( T$ f7 t
  79.       return(ang + PI*2);& U/ C; j9 K' u% b2 O" q( F
  80. * C% O: [* h  Y& @0 ^4 \
  81.    }2 z+ B$ ^; D% i% F7 W$ r; M
  82. 1 `) F$ o; E0 ~5 m: t! J1 T* m' u
  83.    return(ang);4 A* m, ?4 O+ s, I! v0 T# [' c  j

  84. ; n6 S6 g7 r- L* q
  85. }7 T7 f2 ~& K& [
  86. * E& I6 p- n* E! _  I
  87. //#=============================================================
    8 J3 f- H; l% a2 y
  88.   t4 ]& Q) y4 {3 q5 }
  89. double ARCTAN2 (double y, double x )
    1 S# @: P: H! @# T& @( q$ j0 |
  90. / v  X" C1 n+ ^. w! B' X
  91. //#=============================================================
    # d, _6 H1 l& e- i7 e9 ^, v# Q# ~5 v

  92. ' {0 G4 p: s& o, ^
  93. {
    . k( M% ?5 z/ m
  94.   S2 c; j7 A( Q- E5 i
  95.    double ang;
    4 l+ B8 h2 m! ~# A* q3 `

  96. ; {: F9 s+ I- A1 k. ]
  97.    if (EQ_is_zero(y)) {
    8 a1 [/ ?! G- ]' Q/ J. m

  98. : p% G9 t) k0 e0 w
  99.       if (x < 0.0) { return (PI); }
    ; W; [1 a0 g4 G; E2 S" R' x

  100. 8 F! e6 w; R1 m: l4 j8 |0 M4 n
  101.       return (0.0);) s3 q) Z! ?& j- ~4 x& s
  102. 7 m' X2 ]6 P$ h# u0 ?
  103.    }
    & `% I6 [5 V7 e

  104. 4 L( v) ~9 h- y8 k' {9 n# E1 l
  105.    if (EQ_is_zero(x)) {
    " o8 c; u6 \2 V8 R9 V4 G

  106. , Z1 Q1 N# P4 O
  107.       if (y < 0.0) { return(PI*1.5); }5 L7 O/ N4 A! w9 D& V$ k) t3 O3 y
  108. + S( R3 y) x) m7 K" x7 N% K' c
  109.       return(PI*.5);
    : ]% z, c5 R* k/ b5 i0 b
  110. # Y; C! Z* C- K! O3 d! U
  111.    }
    4 `. y: Y/ j( \' F2 p

  112.   |; m1 A( ^5 S7 y$ T
  113.    ang=atan(y/x);
    1 b$ x! C2 m" ?

  114. 8 V' l5 g4 |3 K
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    # W' f( o% ~- H8 N0 Z& `' ^

  116. + ^- t4 m* ?- B7 [9 S
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }: ?- w; G7 Q$ H1 a

  118. 6 j  q: F8 T: x, C$ ?; c) t0 }
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    3 u$ X: i8 _7 v9 F. v6 i) _% C# d2 P
  120. , ?4 Q. H. O9 |
  121.    return(ang);6 A% w7 f* x( v/ E) o4 M

  122. 5 J7 g. _( F5 G
  123. }
    ' m" Y; Z2 F6 P: I
  124. 7 o; C' [6 T2 @( B* V
  125. //#=============================================================
    ( G( i, U- o3 P# W$ }9 W  j5 z8 P

  126. ' d: b' s8 D8 O. o2 P$ z
  127. double CheckConst ( double angle, double constvar  ); p, H/ |: B2 Z( [9 G- q# `% z/ j3 l
  128. % Q) W& ?# \( H2 h5 u
  129. //#=============================================================: w. a2 A( i5 j. ^: I/ s8 a4 R
  130. 4 F6 ~" L" n+ Y% ]1 E
  131. {. `' s6 D  h2 ^  v0 U, C

  132. ! Z5 H' f( y7 K1 F4 ~
  133.    while (angle < -constvar) { angle+=constvar ; }/ T  m& @* T5 b, _2 }
  134.   a" ?' e! m4 j% f2 d/ J
  135.    while (angle >= constvar) { angle-=constvar ; }# `  e/ e5 T% Q9 [' {8 Y% V

  136. 5 t0 X2 X. R8 A8 m* X% ~
  137.    return (angle) ;8 Y% Q; j- L& \. ?

  138. # Y8 K/ }* D5 }5 _) ?
  139. }' V9 l% Q$ o. L5 G3 m! p6 k

  140. 2 X7 s- [4 T  r( I
  141. //#=============================================================
    $ n; t& h0 [- Q

  142. - }5 C! E# I; _' D; r! n: Z
  143. double Check360 ( double angle )
    7 b3 Q- N8 i6 B

  144. ! L- i) Z: i* ~2 V; W, X- i; c
  145. //#=============================================================1 |5 t$ U1 J8 {! X, t( ?. T
  146. ' D# x& U- H  i4 b
  147. {  `8 O8 H6 L1 a! W) j

  148. & t- _% C3 c- `+ m( |, Z2 Z. D
  149.    while (angle < -360.) { angle+=360. ; }
    7 S+ M) H+ Y  ^- t% w$ P
  150. * x4 T7 E5 @" h
  151.    while (angle >= 360.) { angle-=360. ; }
    . ?; p9 i. Q% V
  152. $ u. ]& K% d8 v
  153.    return (angle) ;: J) p1 ]- _; k" y& g

  154. # e4 o/ @7 M# @" e% \! ?
  155. }
    7 N* ?, }  A8 W( E
  156. $ ?# Z' f# ^; S1 S- C9 T% L5 _
  157. //#=============================================================
    3 t# `$ P2 A2 h" }' c
  158. / E  S* o6 d  @5 u4 F% K
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ( G5 O& _! O3 q* G8 T) P+ ~+ A
  160. . @* `# n9 ?# `+ d; k5 u3 N$ q
  161. //#=============================================================6 a; m/ {: \' l9 l8 i  [
  162. 4 N1 }, z1 ?5 I9 @; l  F2 u0 e
  163. {
    . J9 l: r/ e# v3 p# a; y9 w

  164. ! a, J3 _5 _, w' I$ M5 n7 W* i
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }! B5 |, ]% _4 N
  166. ( q% X5 Y# _' @& V! e8 L5 T, x
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }3 ^8 w( W1 F& V. {' F$ B
  168. 1 q: E$ U( l. j* J- p8 j7 D$ {
  169.    return (angle) ;
    ( S9 ]3 j# n* m" k
  170. * n# m" X/ c: F
  171. }
复制代码
$ ^5 `, M/ Y. O8 X( I
以下为摇篮5轴计算过程代码9 ^( \2 l# v: G0 W3 p( b
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);" |8 p# B' b! p8 q+ g

  2. + X" ?) i6 l- R  s0 a" _
  3.          j=0.; B1=0.; B0=0.;
    ; M/ E' s: ?2 P# K2 }7 |! m5 S) @

  4. $ d2 O: n9 ~* I
  5.           if (EQ_is_ge(i,0.)) {
    $ y; _" m/ y3 }* I+ B; F! ^

  6. 4 \, I! @1 N+ A/ B8 A: X
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    2 u) _& ]5 m1 ], p  O5 d4 H

  8. 7 @; Z( |8 t8 ?: N
  9.           }: w) J1 m" U- u! i

  10. + ~% z' ?* d" Z$ z5 K9 H
  11.           if (EQ_is_lt(i,0.)) {- R9 o+ e; J, y8 F

  12. 3 @- N6 d" k( K0 h5 f0 i( o# g$ L& D
  13.              if (EQ_is_lt(k,0.)) {: T9 m9 d8 W0 J+ }0 v
  14. ! \% e. G" f" W# ]7 z/ r" _
  15.                 B0=atan(i/k); B1=B0+PI ;0 L+ w! z' P( }, e! Y8 g

  16. - L) ]$ m0 {  T* [! c! Y) n
  17.              } else {9 y9 [. w# G# A( `, g2 m
  18. 8 }' ]  L6 R0 L1 K2 V
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    4 s7 C8 z5 m4 H' h
  20. * E, U0 |+ {3 B6 Y" w
  21.               B1=2.*PI+B0 ;1 }3 |* a6 e4 M

  22. + c1 W+ V+ k4 Y5 u: S
  23.              }* Q8 ~) |8 f- K5 B% T9 N

  24. 6 }3 [9 n" g* d& P
  25.           }
    3 X: I" ^* }8 `, x4 N) H5 d* b' {

  26. ) E4 A1 B  W+ J2 o: n" O% u
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    % h$ X" {, p/ `1 P9 v5 h- I

  28. / s$ |2 f6 a1 G; o) C  D2 P& z
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    + X* a* V- F, B8 C; U
  30. & ^1 D8 E  ?6 B+ s4 V
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;( r5 r: ^+ N1 c

  32. , G) ^4 S1 [+ N( `* h
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
+ Z2 L. R& {8 `
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
" [, M* n$ [" r" a& i) R. T! k- n) W- v  H& D/ D7 I! F
640.png 1 d3 I" t/ c- _- u" O
测试结果:
4 ?/ X# ?4 l; o5 q/ J8 n. |7 Y) v 6420.png
( Y  ]2 d% Y4 c* K$ f8 O& E9 _
, |; O: E% S* g8 C反向测试结果 6410.png
- N. M0 F( d" `8 z: a" n6 h; R+ o

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

157

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-10-29 11:11 , Processed in 0.262263 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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