找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6759|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);( x8 X4 S7 {0 f" I
  2. int  EQ_is_ge (double s, double t);# c- e2 I, Y4 ^) X& u
  3. int  EQ_is_gt (double s, double t);( f+ L! j+ w- Z4 x3 ?( n- F
  4. int  EQ_is_le (double s, double t);
    2 ~5 A% ^5 d/ z" s9 _* z% e
  5. int  EQ_is_lt (double s, double t);
    ; u) {, ~. I* B" W7 w
  6. int  EQ_is_zero (double s);
    ; C- C5 ^2 X" j
  7. //=============================================================( N/ v7 w* q" ?$ ?* ~7 K
  8. double ARCTAN1 (double y, double x );
    ; h. }( z) L- Q0 @6 N6 A, ~4 }; n0 P
  9. //#=============================================================. x  b( [$ Y0 K/ ?$ X! B
  10. double ARCTAN2 (double y, double x );
    ' q8 C4 H. k) M' X, _3 x" t
  11. //#=============================================================. t  d5 q- J- J: ^& ]5 h+ u
  12. double CheckConst ( double angle, double constvar  );
    3 x( `1 f  _- v; \" n) @, G2 E$ [- x
  13. //#=============================================================
    ! W$ r( G+ D: @6 A. P/ H
  14. double Check360 ( double angle );5 i, l1 k5 _6 D( b+ {; D
  15. //#=============================================================# f6 S. k& U4 M
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );5 d  u0 v8 C+ i( H: H4 I/ ^2 p
  17. //#=============================================================
复制代码
+ }9 w( g5 Z3 A0 w  o. ~# F: }
以下为部分源代码,用于判断,计算角度等0 M) Z) V3 Z% v, a
  1. int  EQ_is_equal (double s, double t)
    - f, g* n  c/ c
  2. ! @) w' A; E7 l9 Z1 ?
  3. {9 s2 j9 p. p) g

  4. 6 [1 B/ i. I$ `
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    + i. B/ |/ H; H0 M0 r9 H
  6. 4 e- y# c8 w! a  V& [
  7. }) q, L9 M8 x; `# a) s$ `

  8. ' R4 C7 x3 Q$ p$ {- B/ U# x$ W% U
  9. /***********************************************************************/) X9 v! u! O9 p- B' w8 c2 p

  10. " |9 E6 p8 k3 ~8 E6 u
  11. int  EQ_is_ge (double s, double t)4 p9 J; T3 l/ m6 |6 v
  12. . w( b- g  T1 K0 w2 e
  13. {
    7 ?. e$ Z0 M/ l2 H
  14. ) s& g- k5 @8 m( b
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    9 ^  a2 @1 \4 R7 N) M  x  d/ X
  16. 9 n$ Y- P4 l5 c) X0 G) G
  17. }7 J( a0 R$ a1 }9 K
  18. . |; A1 e( I7 q0 ?  @5 q1 i9 W
  19. /***********************************************************************/
    5 V! r9 ]0 |: I7 ]7 \$ ]! U/ H+ E6 P2 r+ _2 L

  20. 1 ~" e' y% l1 E+ n& a) h
  21. int  EQ_is_gt (double s, double t)$ a7 h+ w. O! J1 ?' U9 H8 {' ~! [

  22. 9 t8 V- m$ L& U
  23. {
    " d& `8 p1 Z7 Z! ~4 O+ Q
  24. / A4 Q1 `% V* `# k% {, z2 |
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }- ]6 T/ m+ a% a- J' q9 f

  26. - {. t4 r2 X. j
  27. }
    % y) }4 p$ L9 A" s
  28. ) \& c5 H; Y; X0 e& r3 t
  29. /***********************************************************************/
    0 H5 B2 c0 d6 D% Q- ^
  30. - _& R8 x! i  Y" g' w* C- F
  31. int  EQ_is_le (double s, double t)2 x! Y; V) P/ N, x4 y! _
  32. 3 }- V9 \1 g. ~9 G5 A0 W0 G
  33. {" A  b; `1 _8 r

  34. 2 `; r, {# n4 D# W" }+ S" L
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }4 d8 ?( Q& p' q  Z9 F

  36.   a/ p9 [4 @. `5 [
  37. }
    7 I7 X' }, G4 d" x3 v% [
  38. 7 b4 `7 Z9 I( I" b9 p" Y
  39. /***********************************************************************/
    6 z# f/ g/ ^- O" |

  40. ! P' U/ r: ~( m8 t& _
  41. int  EQ_is_lt (double s, double t); V, m" z: F5 t

  42. 1 f, U( L9 b5 z  j( ^& u
  43. {
    9 e( [7 x' b! d5 k) F* h8 }# w
  44. % p( _2 N; ~0 d
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    3 p) W$ G! A$ a3 j$ e0 n

  46. # H/ c; `4 d8 s# ^- G& w$ C5 R
  47. }
    6 X, W9 o0 a* m% [1 @

  48. ; P4 j$ Q- Z( s- F* Q" `( [
  49. /***********************************************************************/
    , S/ m& n& m4 e

  50. ! O2 X) J3 m% n6 V- _
  51. int  EQ_is_zero (double s)
    , i6 T, @# H+ E8 I; W6 B) A8 j# ~
  52. 4 i# e# Q$ \, z1 D
  53. {+ B+ |; [3 a. c+ ~; S7 K2 v0 e
  54. " ^9 [) k2 c2 p; U6 j  W
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) l- l+ P. `- U( H/ o

  56. ( ]5 m+ ?' c; \* @
  57. }
    2 ^5 l/ m( s# s, a2 d! F" j
  58. 1 k9 H8 D# Y/ m+ `3 W, q8 U, r4 |' n
  59. //=============================================================9 m8 @' `3 k; A3 U# u: u: I( L$ n6 v5 f
  60. : u/ @  |# ^. x# k! h
  61. double ARCTAN1 (double y, double x )
    + O3 N4 M; ]! M; x( N- N/ t- f

  62. 5 M3 r5 ]4 s! ~6 K' L  h
  63. //#=============================================================
    0 Z' }3 I+ T+ W! B3 z' _
  64. ) }0 |8 i: W+ x1 z. b4 |
  65. {
    5 M! v+ [# C& Y, l: B: j) z3 y9 n
  66. 8 f% M6 S9 [/ k' f6 t0 V$ T9 G) T) v
  67.    double ang;
    0 I) ~+ N0 M% M1 |( o8 M7 U  L

  68. # Q8 I# R- b& P. G7 c# G/ x$ _+ q
  69.    if (EQ_is_zero(y)) { y=0; }
    / `) A% M" x* x. N
  70. 1 s3 g( i' g& R/ Y. o8 Z) w# \2 M
  71.    if (EQ_is_zero(x)) { x=0; }
    ( e( T: u' u+ l5 B: x) z8 i* c

  72. ! X2 q# B3 U* {+ O  r
  73.    if (y == 0 && x == 0) { return(0); }
    9 [9 K: D$ ^: ]

  74. + ~% S% `! l, c$ @% g# M- @" G! S
  75.    ang=atan2(y,x);4 l2 m" x9 c" N0 z

  76. 5 U6 S0 O! t; n
  77.    if (ang < 0 ) {3 c) y$ U7 m6 g8 u  s+ i3 R% v
  78. , w& p9 a3 C) a- f
  79.       return(ang + PI*2);
    7 Z5 j: d7 o! G$ r7 ~
  80. 9 c  P  n% Q- t
  81.    }2 n, Z- e" r: w% E

  82. : n! \6 k9 t( L
  83.    return(ang);2 ~! f  c* ~0 P' c6 U' @6 v

  84. 7 i7 s+ d+ w* u* M  P
  85. }7 ?: ^7 L" }" M; \, A
  86. - `4 M' I( Y( Z+ n
  87. //#=============================================================' u4 p2 o: U* E* M
  88. ) D' [# d2 F+ r, M& `' h5 B
  89. double ARCTAN2 (double y, double x )) F& ?' z  B6 c( \, N# h+ p. d1 x, a
  90. ! s2 M: z. i$ u0 l4 a
  91. //#=============================================================
    ' {" K) _  W: I: y

  92. + }( M! a1 w  V7 p
  93. {3 {2 W4 N; d8 D. T& A5 R: C

  94. 8 g8 v9 B( `' P" r2 i) u) ~
  95.    double ang;8 A' w/ X  j. `2 h+ _

  96. . f+ l1 H0 U! W( E- ~
  97.    if (EQ_is_zero(y)) {
    + M  `# @' @3 p! q5 R& k. R; w2 U
  98. 4 ^2 s/ _5 W8 i; i* h
  99.       if (x < 0.0) { return (PI); }6 i6 F! q6 V9 x5 [- ]

  100. * z/ W3 h4 ?3 y7 _1 t* \$ ^1 c
  101.       return (0.0);/ i+ p9 h# n" a/ X, _0 e* o1 E
  102. 3 P& c. ^. G0 w# D
  103.    }1 C# S! v4 g: F8 P

  104. + {- V. Z: _( K0 [2 _
  105.    if (EQ_is_zero(x)) {
    1 U. M1 F% C1 r5 a  m8 _

  106. 5 y$ o( r( W2 @( g7 p. h
  107.       if (y < 0.0) { return(PI*1.5); }! M+ J  e7 h; Z
  108. ) {+ V; W* v' S+ n+ L( ~
  109.       return(PI*.5);. X+ o; i8 o) X6 j3 p
  110. , E. q& E% @& m% P2 u1 v1 ]
  111.    }
    + w* e! r+ X# f6 L5 |
  112. ) U% J9 I) T1 _' F7 ?$ \) a
  113.    ang=atan(y/x);
    ) d- I( f/ ], c  V
  114. 5 f+ y( R) G4 v* W& b+ f
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    8 e& R" ^6 _- J" o

  116. 4 I2 i( d" d1 C0 v
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    9 a4 e7 h( i# y8 g4 o' K% H3 \
  118. 8 n/ s/ b: r8 ~# S0 Z
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ; P- r5 T6 F2 |; |9 W( W- j/ f
  120. , ~3 @8 k$ U5 z) C$ L) |
  121.    return(ang);$ {* R: M/ l* X& j0 \: Q
  122. ' t2 M: D; Z/ f2 x6 x; R
  123. }! ~( t! T& H2 k& b4 p' o. P$ u4 `5 ^

  124. 4 p1 Z1 r* w" d5 w) b8 {
  125. //#=============================================================; O  W. Z/ K1 Z" w1 b* e
  126. * i' y% P1 p# ?% d- G. R
  127. double CheckConst ( double angle, double constvar  )
    , H2 G) t$ H* I" z9 |7 o' h7 o

  128. 5 V( c& R) W& f5 n9 Z+ f
  129. //#=============================================================
    9 O3 `7 H  l( Z, }
  130. 6 y- F5 y2 a! _- m) H6 N( _
  131. {9 y" \1 d) H4 Z% L

  132. 9 Z) `9 `. L- S: T* D
  133.    while (angle < -constvar) { angle+=constvar ; }0 b& _1 E$ |5 r0 Q1 d
  134. ) X8 q4 |7 o  b/ ~7 T
  135.    while (angle >= constvar) { angle-=constvar ; }
    : T9 C  `7 h9 y+ e) q
  136. ; I; ?3 X9 W) V) b
  137.    return (angle) ;
    + ~/ V  g5 I2 S' }* O
  138. ( X, R& M9 E4 O( ?0 N
  139. }$ }, O0 r8 }4 \$ T1 j' }2 `# Q
  140. & O/ ?& C6 T) [! y7 C2 _
  141. //#=============================================================  l5 R; L5 @5 g' k0 d

  142. 4 k6 e" \  ?  X" @) {4 g" Q/ M
  143. double Check360 ( double angle )% r( i1 `, q2 U& g9 b$ ?
  144. ; |5 x. A$ I, D9 `
  145. //#=============================================================
    + i3 {$ z% E' A# p7 _8 e6 h; R; z

  146. ! u2 W  ^' C* f  |; d
  147. {
    7 `, x* c$ S, j  Q" I

  148. + {4 c: ~7 E, N" X
  149.    while (angle < -360.) { angle+=360. ; }5 B; D2 m: f  X7 i" U. A0 d$ A

  150. 1 n( ]9 j& P* `* ]; H! q
  151.    while (angle >= 360.) { angle-=360. ; }* I$ `% j" @* i$ |0 L9 i: n$ D

  152. - }' g; J) q3 a: p, e/ V
  153.    return (angle) ;& X  Y" d/ K( p; Q
  154. 2 B: u; L. d  F: q- a/ r7 H0 L& i
  155. }! m! g5 R' W2 l
  156. $ i% z. j, {  E9 {3 Y/ O
  157. //#=============================================================+ W: ~9 J6 z2 O

  158. 5 s3 G. M! [* H7 l; c
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )% [; G6 x" F5 S3 f- e0 [9 t5 p. E# B
  160. 1 B8 T7 \; l. v- ]1 U
  161. //#=============================================================
    5 _3 d: l5 h! h$ Z2 o8 t# S

  162. ( U# h; t3 l5 r5 x- s$ [3 o
  163. {9 W4 ^8 F0 B+ Z. E/ W
  164. 7 h* ^( L/ L- Z
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    9 P. \" y6 y* U

  166. ) [; H( @, M& F5 i8 G' e) ^
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }2 Q3 i/ {+ Y( `) E/ T

  168. 0 b5 N# e. ?, g
  169.    return (angle) ;+ H% U* m3 F8 l( J

  170. " J  g6 |1 P- i+ s  s3 Q5 Y* C8 P
  171. }
复制代码

! h  S$ w" C5 O" ?5 s' h以下为摇篮5轴计算过程代码
0 z* }' o7 U- j& u
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    ; _. k2 T3 Y( Y& D0 l5 i
  2. 3 V1 k5 K& X; n- x% g
  3.          j=0.; B1=0.; B0=0.;
    3 U2 M0 k5 V1 c- C+ ~: w
  4. 8 j5 J. x# b1 L, S" r- b4 z6 _9 `1 `# j
  5.           if (EQ_is_ge(i,0.)) {
    % v. m% Q& R7 t: |

  6. 0 y; j6 w8 }' \2 s8 q0 b
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    $ s/ Q# a0 Q9 {8 u0 |4 S

  8. 8 k1 p8 P0 @. t! L" @( ?
  9.           }
    8 s+ d( i/ o& l; z
  10. / e. c7 T' e4 m5 ^% t! [; u) c( c
  11.           if (EQ_is_lt(i,0.)) {
    # W1 j) ^, L( n( O8 D

  12. 0 `' E" |4 v' v. y6 O; K% H/ d
  13.              if (EQ_is_lt(k,0.)) {- H( I5 t$ k' O* H2 Q- _5 x

  14. % _8 H+ Q! w) b- v
  15.                 B0=atan(i/k); B1=B0+PI ;. c% E, M, K6 q. |7 m5 e  q2 f4 Q
  16. : c3 E, K( C2 x# U
  17.              } else {4 F: G/ |3 c: H& b$ [$ p; S7 [. D

  18. 1 g1 k* Q1 a$ A" Z( z4 K
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    6 `4 G& H: `6 P/ P$ C$ b6 i

  20. ; K# g9 d2 g4 r" g
  21.               B1=2.*PI+B0 ;
    / K+ u3 z! D6 b6 l6 o4 B3 G

  22. , e3 [" |% E2 U( r' T$ x6 ^6 g
  23.              }
    0 J9 d2 J* Q( R, \9 e

  24. + T9 {. b/ R* i4 d" Z3 ~5 T" Q
  25.           }( k! S& b( w. |  N0 d; Z
  26. # t0 Z& N' A- n! [! _" P; v
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ) s- b. ^2 p0 N: Z$ Y1 M
  28. : D- ~' N: c3 ?, z8 u+ f5 R+ R
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    3 k: Q. [2 M5 G- R2 c. A! q  q: O! [

  30. + D$ F7 K- c! c! Q; S  _3 e' C
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;' |8 `: M- {: a4 I* F! M7 B% c, \
  32. 5 y' v( v' R$ `, A
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

. u. H( P) E0 A. M0 [通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
" ?3 l; y+ F* @' X! F6 w, i' y$ z, t! d3 _" r
640.png
6 a6 ^! k" j- ]% F  t  a测试结果:* P8 W" i% F( h( `7 Z7 P
6420.png 1 j2 j9 \% d: {" x: F$ g1 G

" \; n9 D7 H2 m反向测试结果 6410.png
2 _) b, z7 P& h2 v, A; c1 f: Q. I

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

193

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-26 02:45 , Processed in 0.273349 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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