找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7475|回复: 3

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

[复制链接]

433

主题

5758

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);! V* A! i4 P$ M, h  z, ^" T
  2. int  EQ_is_ge (double s, double t);
    2 ~1 T+ q3 h5 i4 B2 p+ o5 k" k
  3. int  EQ_is_gt (double s, double t);3 \; l+ ?4 u# r
  4. int  EQ_is_le (double s, double t);
    4 ^: S" r0 u$ U2 E7 j! B% B. o6 j3 m
  5. int  EQ_is_lt (double s, double t);/ o- _' N3 h0 U& t. z$ C& ^+ K5 G6 O
  6. int  EQ_is_zero (double s);
    % a- }$ h# Q( @4 G5 D% `4 }, w
  7. //=============================================================
    / Q; _7 \6 N; A' Y
  8. double ARCTAN1 (double y, double x );5 |& Q2 o0 w/ I6 C' i* R
  9. //#=============================================================
    2 Y) Z0 Z/ a) a6 \: a
  10. double ARCTAN2 (double y, double x );
    4 z" S9 |' {9 u  g8 J* I! r2 W  q
  11. //#=============================================================) Q2 E+ T4 E% ^3 i+ F$ N& `. j( l0 I
  12. double CheckConst ( double angle, double constvar  );
    6 S" `) p$ g$ _6 N  a
  13. //#=============================================================% v, L5 k0 q- x4 x2 z: z
  14. double Check360 ( double angle );
    " E$ N1 l8 k/ z( b+ J
  15. //#=============================================================
    . `( _0 f  l' p
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ! [: P6 d, r/ w" r) u" z; Z+ b
  17. //#=============================================================
复制代码
  Z8 Z; v' Z, M/ B/ Z* l
以下为部分源代码,用于判断,计算角度等3 A' z2 ~: V5 w% Y  ?$ \7 _
  1. int  EQ_is_equal (double s, double t)( L5 @1 S6 h/ I, {

  2. # {) o+ O3 N7 K
  3. {9 v& p* b7 r* B
  4. ) S" R1 J5 t9 r% G0 e& W5 o; g: ~
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    7 L6 S, e$ s# G& p, B9 \/ A) O+ l2 h

  6. ( i9 L* }  I/ I* C' Y+ R. X
  7. }; m! W9 ~# e& q' p; D, A

  8.   g% w7 z6 W1 p& f: K: `
  9. /***********************************************************************/
    ; R, ~. ^$ I  V0 I7 V
  10. ) ]& f+ p& }$ k6 F- g! \& E
  11. int  EQ_is_ge (double s, double t)
    ) f$ K6 T- X- Z! f& r2 O- e

  12. ! @/ g* l2 L7 y! Q) V# c6 A) ^
  13. {
    4 `% n0 C; {9 e4 W5 d' n
  14. . z$ S6 f% R1 j
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    , R' s: c* l5 G8 e
  16. , Y+ x% d; y! P
  17. }) f! @5 ~7 j# Z  T, R7 E7 f

  18. ) V# P- P" |7 E5 o( k0 p
  19. /***********************************************************************/3 J# D/ i# b) G9 D$ w. T

  20. 2 W% t2 v( x2 R' l' p$ Q
  21. int  EQ_is_gt (double s, double t)
      K/ o2 |3 z( m, j& k7 g

  22. & W; T3 W9 L, p% x7 B
  23. {, t& m+ H) L9 M# B3 D( H7 b3 R. n
  24. 9 E& ?/ |% {& A' X3 a0 i
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; I; ?$ B& \2 U# W

  26. ( S9 H" K7 K5 l$ |1 Y4 b' f0 i
  27. }
    1 r6 ?  k7 [5 ]$ V

  28. : E8 b' l: X$ q# N7 m
  29. /***********************************************************************/
    , x; t) v0 U  ?, ~) O8 \

  30. ( ^- y3 {1 q3 y' `7 a
  31. int  EQ_is_le (double s, double t)/ B+ [: F5 c  i3 B
  32.   s9 t5 H, \0 q4 b. E
  33. {
    # R0 }# G6 D* w! v& ]

  34. 1 Q3 L# ?3 E( {* w* c
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }% Z+ v$ y1 _; r6 B* I" g
  36. 4 ~$ z4 A8 |, v) u
  37. }  P! I* j! R! E2 q9 z

  38. & s/ l: `! B4 k9 P) n
  39. /***********************************************************************/9 @1 l% t( L6 G1 q& `; J
  40. 6 t& P3 o% Q2 i5 K) _  ~* `( `0 o- |
  41. int  EQ_is_lt (double s, double t)
    ( |; l; h5 g. g6 M% d+ G

  42. 5 ^7 g' e. w7 C6 ?: y5 e+ r2 c8 t% @
  43. {5 i6 k# x! \4 K

  44. - b7 r: `7 @* M; G7 u
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    8 D0 N4 x* k5 h
  46. 6 O  |) {$ P% X3 _7 M
  47. }, w9 ?# |6 B! T) @1 v

  48. ; N. G. p5 f+ m( _: b: R6 O
  49. /***********************************************************************/8 A. e6 w" `+ }" M
  50. 5 w8 g5 q. K: S$ r
  51. int  EQ_is_zero (double s)
    4 u6 B) h# |' l; R3 k! A

  52. 5 ^2 I( u% r. b' t! U& |, v
  53. {; ~% ^2 \6 t5 X1 H
  54. ( R  `: x/ e! @4 G0 C) i
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ( w& u! x* w8 X
  56. , W$ }  b2 ?* p
  57. }" d8 p1 s" O' z$ F+ V$ @9 y
  58. % X4 b- r* ^; v# N$ u; \& o6 n
  59. //=============================================================
    6 [% G2 k0 q& z$ R0 j
  60. ! g) `- ^7 o1 J. a: h$ b6 k8 b
  61. double ARCTAN1 (double y, double x )
    7 e( t# N2 @; }

  62. 1 D- b" k& i( N# h0 G: \
  63. //#=============================================================: C0 D" A% }( B6 D
  64. ' }( a$ X  t( S5 G5 T0 E6 i
  65. {
    % d: m9 V4 ~, m

  66. * k' U- b! k8 }" q  D2 Z: A9 |
  67.    double ang;
    ) d; G. R. z/ T$ O! ?8 N" H4 E

  68. ( N, u/ x) E! `
  69.    if (EQ_is_zero(y)) { y=0; }
    " Y( @- ?2 [% z" F

  70. % I8 j$ G) B2 A' R. D( J3 A, W
  71.    if (EQ_is_zero(x)) { x=0; }* e7 H8 ?: n' v6 C
  72. + k$ h) {6 |1 `- ?2 d9 P+ b6 j
  73.    if (y == 0 && x == 0) { return(0); }
    ( _- F- A) Z" r! O8 G

  74. 4 x3 g2 m0 n9 j/ d( g8 ~  L+ N$ Z
  75.    ang=atan2(y,x);
    7 V, S  H- C" {1 r9 t6 [

  76. - }' i" F  ~# _0 d
  77.    if (ang < 0 ) {
    & U4 b( F1 Y/ Y0 @8 d: U% N, Q
  78. 0 U- P1 W4 P7 C7 D8 K
  79.       return(ang + PI*2);# Z; B! Y; D; g6 w$ d

  80. 5 i9 x4 H: N! \8 U' w) E" B4 L
  81.    }4 r; |1 c. Q  V* ?$ }4 |
  82. ! O: N$ x5 x+ T4 G. Z
  83.    return(ang);
    $ D1 o9 y  V# k. e8 s3 L

  84. 4 l, A- A( b  D! l) ?" O
  85. }' X9 w  g1 ~# O0 j( C% @
  86. + q# C' J* \( V: Q5 v3 b
  87. //#=============================================================9 Z7 X0 J+ |2 N1 l9 ?  m3 w
  88. ! w# r  Z) }4 p  r3 u$ l9 J
  89. double ARCTAN2 (double y, double x )* T' p' G7 _  Y( d* L) n: s
  90. ; X" \9 v$ X+ s! l
  91. //#=============================================================% c& E% L6 A2 `
  92.   T4 y; a+ C* G2 ~+ r. _9 K
  93. {2 s8 b. N# V/ @; T/ i0 U6 E: a
  94. 4 [( O- n# {  u8 r7 Y) I" l
  95.    double ang;+ k- x* P5 \* r

  96. ; e& ^  s( @; A% O
  97.    if (EQ_is_zero(y)) {
    ( Z3 |) U) z& y' X+ P( i( I
  98. 6 w- M4 M( }6 H( v8 @3 |. X  m# [2 o
  99.       if (x < 0.0) { return (PI); }
    + `  f5 K! `' D* _* g- v

  100. ! r* B7 k. k# I# R0 H
  101.       return (0.0);
    " M- m$ F7 K- v! K  X. q9 s
  102. ( m: P# T, f1 O. E' G: @5 r
  103.    }; k: ^+ }% I3 d% x3 a

  104. ' W; s" o4 i$ P
  105.    if (EQ_is_zero(x)) {
      A) l( ]& Y! K  w. D9 w! H
  106. ! Q$ b8 B" v, |3 Q
  107.       if (y < 0.0) { return(PI*1.5); }1 x& T$ j' K! S
  108. 1 m, w; l$ J* i+ W
  109.       return(PI*.5);6 A, k2 v( d1 u# e* _
  110. ; d3 D6 G  r3 s/ g: ]% I
  111.    }
    - }, M' Y- l& k- \
  112. ! a" ]0 ]/ N, o( O8 g# m9 k
  113.    ang=atan(y/x);( q2 N) c; F2 h2 d$ N$ N" G& A- C1 W
  114. - g, n4 u* I0 j1 p1 R1 N  f% }
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }+ }3 ?) q  g- j" W- X0 _4 E9 n
  116. 4 n* y1 U" g, y0 y. ]; \) ^
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }! \5 k( G1 \6 p9 t; [4 v
  118. 6 Z: D" Q- h* q6 \7 H2 ?
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }3 \/ j# y$ o" [4 K

  120. 7 h4 o$ j* p7 h% N7 |
  121.    return(ang);
    + e$ U! }: P& ?  `, r

  122. 4 M7 F5 _9 H8 |/ a
  123. }
    8 l6 n) r: x0 h
  124. ' o% p6 _: f, I  t: z
  125. //#=============================================================7 f) \. A$ B& P6 o1 r* Q

  126. . i( \3 O# X7 g. `5 \+ B( A
  127. double CheckConst ( double angle, double constvar  )
    & I# K' I3 I: @2 U% x/ }

  128. & |( j$ J# Y8 A) d5 [; j  D* y
  129. //#=============================================================# u; T+ X; M8 Y, T
  130. ; |9 W, K. S* G# [8 M  L
  131. {- _. C9 m6 H$ d$ g' b2 o$ ]
  132. , g/ `) Q9 j* _  d. e, L! q
  133.    while (angle < -constvar) { angle+=constvar ; }+ h+ O+ h" d9 G4 a* A3 [2 H3 a
  134. : B) l/ d* v, W& z3 O) G$ f6 k
  135.    while (angle >= constvar) { angle-=constvar ; }% d9 s/ \* ~- {

  136. ( f0 m7 n$ J5 i. B+ Q
  137.    return (angle) ;7 K0 u( R$ n" D1 F

  138. 6 Q8 _8 q6 c! j- g
  139. }, B! O5 b. v) [2 N
  140. , d' ^) T9 |/ ~
  141. //#=============================================================
    " ?% ~0 M3 `: f# f. f

  142. 4 I9 f% G1 V( s3 O: _2 H
  143. double Check360 ( double angle )
    - X1 S) Q7 P( i: V: v( |! ?2 t) `
  144. ' W$ m: C, A4 K1 \& q
  145. //#=============================================================
    0 {# s: q4 P, g4 w8 [! C% k$ K
  146. % |+ T' m/ p( Q5 G) i6 y9 D
  147. {
    1 a8 M9 H/ `& S: q  Y- u1 ^: c
  148. . O9 I. W( N/ Z* h2 n$ L, r
  149.    while (angle < -360.) { angle+=360. ; }3 N: \2 K% o; N
  150. : B# x/ C4 F9 i3 S5 l) e: E
  151.    while (angle >= 360.) { angle-=360. ; }
    7 s# q  P8 o0 `) h
  152. 0 d2 D" V1 C! T1 H2 A; z& Y
  153.    return (angle) ;# P5 m5 x( e2 L' c6 a( s
  154. , s; ~7 u* r4 |5 D7 Z) `
  155. }
    ( a5 f5 m0 H- L+ H

  156. $ S6 P( S. Y7 F/ o" Y# s
  157. //#=============================================================
    - g& i# o! X) x) ?3 ?# i4 b
  158. % c3 W  e/ g/ g( q
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )2 m# ^6 c, T- j3 R$ j
  160. 4 O% S, S' I5 a4 H' x! A0 p
  161. //#=============================================================/ x0 t7 H' j% I; L* r/ z9 e5 S6 ?% p
  162. " v9 w; ~! ]$ e: m5 Q! R% a
  163. {2 S8 P7 A8 i+ A, n* J
  164. ! b9 N, n: }4 J9 P+ O) F
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }/ W% N# j5 i8 n+ @- ^) o! q

  166. 0 H3 j1 i( v2 W" f
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }: C2 F* {& }1 i: T
  168. 9 q! ]5 h& a& `) C& G
  169.    return (angle) ;( S! |/ P" O) @( q, D( a
  170. : M+ w9 Z/ b0 a1 Y  z7 |5 q
  171. }
复制代码
+ U3 A3 X( F: h0 C
以下为摇篮5轴计算过程代码" G1 l+ n5 t$ [+ h
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);* C* r' R  g' q) |- R

  2. . f5 w+ q! C# T9 U
  3.          j=0.; B1=0.; B0=0.;
    " y, C+ {% [0 x" @- H& s
  4. / ^! B" y1 g% j0 t* h
  5.           if (EQ_is_ge(i,0.)) {6 U; p! `  t3 E2 G, }' [7 `
  6. - L: X4 w5 W$ M$ k* C
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }% A5 s+ Q2 y3 t- M2 @0 ], E

  8. , F' `* P3 v7 r; {! S4 A* {
  9.           }' ~% _7 _; W- G+ \+ G' Q) Y1 z( S2 `

  10.   u" y1 ]$ E, {. v
  11.           if (EQ_is_lt(i,0.)) {, V4 g: m; K5 q& ]) L
  12. ( b3 \" q4 K6 V' @, O, p# W) d+ |
  13.              if (EQ_is_lt(k,0.)) {4 L6 \. W& F& g0 H/ l
  14. ) g6 }4 r2 H  F1 q
  15.                 B0=atan(i/k); B1=B0+PI ;
    ' J3 C: ~, v) ^, A/ l( V1 l  M

  16. ' M9 c# r. o# S  J9 r
  17.              } else {
    3 s8 R! W0 l+ }2 w% X! }
  18. ; l. Z. u' t2 C8 M$ r$ h6 {: p
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
      S' b5 R6 E, r& z, e3 ]  X" c

  20.   m4 @5 [1 x% b3 t
  21.               B1=2.*PI+B0 ;! x* s( |8 K9 b, n

  22. 1 k( z& ~5 i9 W( i
  23.              }
    - b, P! h3 V. Q5 G
  24. 9 q' O" P& f9 T7 y% C
  25.           }
    6 C% O; u" |! I9 M0 ^. r( T# W8 k( S
  26. / V2 o: s6 F) ]. P) o* d0 o0 H
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    0 P2 T# R( c# V1 @9 u

  28. , Z: ?' `& ]8 N# `, s2 n. M
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    7 p9 e# D+ H# a8 V8 }
  30. * N' u4 y" L, M, ]- P
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;5 S9 _, t4 c5 W- V4 ^

  32. 1 [5 J$ n2 L! X/ c9 h& ?/ U6 ]2 }
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
. o9 s4 f! P( C- ], d: ~3 B' {
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。6 H9 J" l3 r2 Q6 `6 g9 n% X& T2 {
# Q+ }/ c9 X6 A' B6 l
640.png ; o( o: @' J8 m& D
测试结果:
1 s1 I' e; E- g% y9 Y8 D 6420.png
9 G1 F+ r9 a* H4 Y
% X" b/ K* t+ U, W( M$ [8 ^' X: O反向测试结果 6410.png 1 o$ K& b7 a' v" \2 w! N0 w6 n

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

237

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-5-6 00:01 , Processed in 0.553852 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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