找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8037|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);# Y( H' {7 M+ M! q' e
  2. int  EQ_is_ge (double s, double t);
    ; z6 n6 z. I$ t4 U
  3. int  EQ_is_gt (double s, double t);9 m; J4 s) f( C
  4. int  EQ_is_le (double s, double t);3 p. h7 ^4 R5 t8 L
  5. int  EQ_is_lt (double s, double t);/ g- E( Y8 b7 [* e- E+ z
  6. int  EQ_is_zero (double s);* ]/ C! ~8 A# u, f& }
  7. //=============================================================" t0 A' x0 _# p  T9 m
  8. double ARCTAN1 (double y, double x );2 m7 ~+ i, C! k; r0 c
  9. //#=============================================================
    ( C4 W& j2 ?5 [7 \0 Q  n
  10. double ARCTAN2 (double y, double x );
    ) a7 G* p9 D( M- W
  11. //#=============================================================
      S" ?$ d: b# y# P
  12. double CheckConst ( double angle, double constvar  );$ i. O2 b' H5 A( [* x! F& l: Q
  13. //#=============================================================: |% e" u4 O. W- U+ \; N5 y9 ?
  14. double Check360 ( double angle );
    % ?; A% h; c/ W3 o" j6 ~
  15. //#=============================================================5 U# d9 C3 e3 m- V  Y: e/ n/ x1 `
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );! \' P3 s6 V: M% u$ \) b
  17. //#=============================================================
复制代码

% `* \+ d+ r5 U! s) D" i+ @+ z$ G/ T以下为部分源代码,用于判断,计算角度等8 x7 f2 [" V: z0 o2 Y$ Q
  1. int  EQ_is_equal (double s, double t)
    % Z& J6 o" C% G( i: N5 y. W

  2. % {5 T/ q( l7 ?/ ~9 d, s" ]
  3. {0 E9 G" c6 G* X6 e) I' I' @5 p

  4. ( L. q+ J0 |  n( x4 l
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    1 F; n0 @3 ]# s- |; P& y
  6. 6 \: T' H# L3 N& D" k- Q5 p
  7. }
    1 d6 M( Q1 G1 _2 E" x
  8. 0 \: i. B. T* d8 J5 A, ]
  9. /***********************************************************************/
    ; ]- `5 H/ }3 t- L8 w# f
  10. " V& R" M+ O  V( R
  11. int  EQ_is_ge (double s, double t)
    4 a/ w/ x) |# g; b: i
  12. ( j/ y% w- K9 L* i
  13. {
    ( w# o" ^( ?+ }+ S2 a; j* l
  14. 8 c: W8 j/ _( Z" ?: x* _4 _5 }
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    3 [: `; m' l2 K0 b+ T9 ]1 [
  16. 0 z4 |9 U# A. b* ]
  17. }: T7 t: W" A& o6 C
  18. # z6 |4 o$ R4 C9 T
  19. /***********************************************************************/
    : ^& }$ C, T" o1 \  W1 I( z. P5 q

  20. 8 b# n, z# h7 [
  21. int  EQ_is_gt (double s, double t)
    1 }" |7 r. C2 g9 Q) b4 Y6 m

  22. , |4 S: k' q0 S6 D5 t6 U
  23. {
    8 r$ E8 @# e2 o# l8 B

  24. % f3 O! A9 J, F3 ^. G
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ( A3 \8 K- {$ q( @
  26. 4 \# Y1 q9 n# r( i
  27. }
    : r. t6 ]5 I- b5 Y, h  L
  28. " w  T; R: R7 o5 t
  29. /***********************************************************************/
    7 S; B& `9 x. ?1 Q

  30. 6 T; Q# B: r3 l2 ]* ]7 E
  31. int  EQ_is_le (double s, double t)) p5 }/ h8 q" Y! o! k

  32. 7 S) q: B* u3 }
  33. {5 m6 c6 J! Z' x( z

  34. * z. t: v2 D3 z% y' h7 Q7 B$ n5 D
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    9 z: a4 b5 l' o6 H. |1 ~1 d5 [
  36. & j( e4 ]- f, I; e, q
  37. }
    3 n( c. Q) T: d( Q- M4 A

  38. ! L  C) `* c% c
  39. /***********************************************************************/
    6 m4 Q. S$ X0 b7 _' ]6 e3 ]3 `# f
  40. ' b9 v  [$ I" s4 c* Q! a7 p3 N
  41. int  EQ_is_lt (double s, double t)6 a. S& T! _2 j3 ~# r9 K0 E$ M
  42. * V2 M8 ?3 H3 z7 [* z) ^
  43. {& M5 I, ~* W/ d+ @

  44. # T1 Y- {4 ]& y, ^" d
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    8 Z  J7 ]2 [8 [) a# E# b& N. x! \% Q
  46. , ^! L+ z; n' g, U4 v' |
  47. }
    , N+ z$ w; t2 {5 A# b2 q
  48. " [5 c7 R' l' _+ M
  49. /***********************************************************************/" c7 J$ d& i) b7 F8 v4 y
  50. 7 P: J7 M; Y: D0 `
  51. int  EQ_is_zero (double s)0 j2 D! O) f8 S  w

  52. + ^, z2 R, D" k/ h
  53. {2 g: s: v; O8 D; |/ ~; F- z
  54.   P4 v4 S, E3 J; Z( j
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }: f- L4 P9 a. o. D' P) M
  56. 5 h7 O# @! T* }4 n- S& D
  57. }$ P* i5 O# i. L0 p! s

  58. $ E: y8 v% A; c9 ]
  59. //=============================================================3 B6 ?+ v- v( l3 i9 Z' i: e
  60. 4 F  h: Y+ H& L; Q5 z
  61. double ARCTAN1 (double y, double x )" v- b6 W, n: V3 G4 n; Q

  62. 5 e8 O) `8 P* D: v7 J' w
  63. //#=============================================================
    ) K4 B0 a, v! o0 j3 \
  64. 9 n0 u5 v% P; m& t, k5 i/ V
  65. {
    / O+ p  \) [  j1 x1 i

  66. : J) L+ ]9 l# \
  67.    double ang;! \5 i* j# p. n

  68. 7 C2 G. a# u. `  J' Y+ e% E- J/ N+ c
  69.    if (EQ_is_zero(y)) { y=0; }
    5 S( ~# W7 m% f8 p7 T, c

  70. & F" X: H0 T/ K' R) s1 M, F+ m( J, l
  71.    if (EQ_is_zero(x)) { x=0; }8 }! n9 |, d$ c# g. o, S2 }. M2 U
  72. ! `) w4 _5 f/ R/ f
  73.    if (y == 0 && x == 0) { return(0); }
    : `& d4 F' l8 Y) D$ u; {: ~
  74. 1 d, `/ R! q& D( r+ F# v7 f7 V7 ]
  75.    ang=atan2(y,x);
    ) ?9 p# I7 Q  [( Z* T! E: F! P4 n
  76.   p% R" y, d: o
  77.    if (ang < 0 ) {
    ; n1 s2 m. ~3 s9 T$ [

  78. % M& k! s" p2 I( h" ^5 Z: C
  79.       return(ang + PI*2);
    4 x$ |% c. n  e
  80. 0 r- L) n: `9 x2 @. U, Z
  81.    }
    3 V) L. @0 F1 H
  82. ! r. T! {' U. D8 S
  83.    return(ang);, a% f, Y# A- f# F7 K
  84. ! K& {$ H9 V2 b. R' ^
  85. }
    & s8 ?4 I; D1 v) p  C2 ^8 I3 d/ |

  86. ( f7 u# e/ _/ b# \
  87. //#=============================================================
    9 R3 y/ T/ \5 e, }& Z! k" Z& B* L

  88. ( \4 n) I# B( \- B  }& Z
  89. double ARCTAN2 (double y, double x )
    ! d2 j9 c) k' I

  90. $ B8 P$ x* l0 W  o+ V
  91. //#=============================================================2 N' ~$ \" |9 ^* S9 m% i+ o
  92. 8 F0 x+ s1 q5 c" H  Z' T. @! l" U& d' V
  93. {4 H- ~. l. I: D- |0 P' H

  94. 1 T' _9 p; u0 R2 I
  95.    double ang;3 ]; g$ V2 F9 N  {3 j
  96. 2 @, ^- U+ Z, {" \# Y
  97.    if (EQ_is_zero(y)) {
    " ], D  I; i( _0 O6 A( j

  98.   c) n9 f( ~7 l: E/ m" C# i
  99.       if (x < 0.0) { return (PI); }
    5 _" Z1 B! r" j& y& ?

  100. ! V! }" i- |0 J# Q7 ^5 A5 i
  101.       return (0.0);
    0 E6 V0 n) w8 }2 H
  102. : p% l" g* v, L) a2 Z
  103.    }. v& W' n( N/ A! f# m. N
  104. , d' ]' w% Y$ q( z
  105.    if (EQ_is_zero(x)) {$ r" G. a5 ^4 k7 z+ H( ]

  106. 7 w# p. v8 H; v$ k7 ~$ n5 n
  107.       if (y < 0.0) { return(PI*1.5); }
    . R2 W" @$ ^- l6 d$ p. J& F0 R9 R3 Z
  108. * {; e$ Z' C$ D: O
  109.       return(PI*.5);
    6 p$ X7 @0 K4 |" E, j
  110. ! E! B6 I, }0 E  Y, F2 G; g
  111.    }
    ' I' m5 Q1 n' N# w* M
  112. ) w8 [, p. K9 ]- i
  113.    ang=atan(y/x);5 E& b1 o' u) T9 }2 K- L9 n, C
  114. % a) K. |, j4 c  ~
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
      Q: v, I9 s) B# ^( B
  116. 5 r1 r- G+ h. u5 ]; A( Y
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    1 U6 N9 Y# L- P
  118. : n& D( W6 E* t# b0 e! V, }* F
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }* t+ F3 f: O( F" V1 J  y9 d) H; d

  120. % H* ]2 l: V0 F9 }# }
  121.    return(ang);
    * R0 v' W! ?5 T3 v1 X! r- a
  122. & C6 F: U+ Y" v3 J1 L$ l. ?# `
  123. }
    3 N6 X2 V, k/ H) I& E, \9 A, X

  124. % K: G' w7 P2 v) x! K6 x  {9 Z0 p
  125. //#=============================================================( `9 ?' [  _) T# ?5 i, ]
  126. ) a+ {6 Q' }' `- j
  127. double CheckConst ( double angle, double constvar  )
    ! Q6 }9 M7 u& h0 i" [# ^( }" m

  128. $ P, j, ^$ @, N3 f; y, C( N5 u
  129. //#=============================================================7 s5 B5 D. q  A0 M$ ~

  130. / l  O# i/ `2 U& q. Y" @
  131. {' J' o/ m/ l2 q* J" t0 x0 G! F6 r
  132. ' n2 c6 [, A: A8 D0 n
  133.    while (angle < -constvar) { angle+=constvar ; }
    . e+ D$ E; q/ Q1 l( o# E' s2 R
  134. ) Z0 D5 g  J" e4 N: x# \$ L; c
  135.    while (angle >= constvar) { angle-=constvar ; }
    5 j; V6 _4 ]) E! z) s# V& {

  136. & r$ q5 \7 o% D& m- h
  137.    return (angle) ;# r6 s) G* x& t
  138. ' a9 b7 j9 ~% ~) l% U+ a( D' I
  139. }
    3 v0 q0 E$ s1 l7 S4 C
  140. 9 {6 L. `( c4 q& u& g4 d8 a# G
  141. //#=============================================================
    . t, Z* m0 T; Q/ L" e* s
  142. 2 k9 Z, U* ?5 c
  143. double Check360 ( double angle )- ^7 P% N0 Q4 f3 E8 q0 h) I

  144. 0 K  O  G' a! \4 Q
  145. //#=============================================================
    # R8 Q/ ?2 }  _! G4 d) S& t

  146. 5 c3 c4 P! u% M! T+ Y6 J( E8 o3 u
  147. {
    - Y; s' p! C' [* d1 k  `8 l

  148. 6 ]% J# r/ ^% E- d# t2 l& Z/ l
  149.    while (angle < -360.) { angle+=360. ; }
    / C* P* P( M* K
  150. * K3 a" K' ]! s
  151.    while (angle >= 360.) { angle-=360. ; }
    5 ~" J$ k" T. `/ n/ K  k

  152. 9 `6 R2 H3 o0 `3 M# M4 b% C, r6 N
  153.    return (angle) ;) ?2 t4 N; R; |) \" o7 Z1 X" b2 X
  154. . |4 Z& P* `& t+ l
  155. }
    4 s! Y' K- E3 F% G

  156. & C7 g, O" `2 l7 E1 L
  157. //#=============================================================8 R. \* v& S, Y
  158. 7 o1 |* e: V  F- p
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ' ?( t+ D) O' C9 c- x6 M: ]
  160. ' ^$ A. R, q6 ?1 W9 U
  161. //#=============================================================
    9 E( O9 I" b7 ~
  162. 0 g0 a0 ]5 @2 C4 \4 d
  163. {3 F, e0 j2 [, {3 B, ?! t3 [/ s( }* \
  164.   d3 D6 H$ Q+ i8 P1 ?. ^
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    " `8 C9 d/ r8 \9 z3 A. p1 |

  166. - f* x1 }4 M; X5 h
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }8 e5 t, Q; q: S! u) C; p
  168. 2 k# C9 o6 v" [+ W# a$ p( ^$ f; o
  169.    return (angle) ;$ L' \( y4 R: z, q" g. \: F. Q/ G/ S1 }
  170. " c( H7 R( |. D+ h2 T- K
  171. }
复制代码
- S' N$ V' g, e2 H' H0 y
以下为摇篮5轴计算过程代码
+ T$ _- u$ ^4 S% o
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    3 `& r) J# y9 J$ t: p/ j* C9 {9 g
  2.   `) V7 V- K+ e: ^. `
  3.          j=0.; B1=0.; B0=0.;
    # s7 ~( `4 q  g
  4. 4 ]' m4 i; @4 a- Q
  5.           if (EQ_is_ge(i,0.)) {/ g% [% F4 s2 Z' s0 O
  6. 8 G- f) S5 ]5 q+ h7 U( R
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }1 i* n8 K& _' H) K+ l" L, d0 \5 \5 z6 C

  8. ; ~5 ?4 Z( Z7 c. f
  9.           }
    ; b; ^2 G6 T0 h8 g
  10. ' R/ s& N$ y% E3 T
  11.           if (EQ_is_lt(i,0.)) {# x. E8 U  p' w% [8 Q

  12. $ F: c! F1 F( ]( c* v1 i# M
  13.              if (EQ_is_lt(k,0.)) {6 o0 B* L- S& [

  14. 0 e% D8 L4 \) }! R5 N/ o5 C5 t/ t5 i
  15.                 B0=atan(i/k); B1=B0+PI ;( g( e3 t& Z9 t; h9 m

  16. & K) i7 ?: W9 Y! C8 N* J; R
  17.              } else {
    : K  d! Y: d+ i( a  M' u
  18. / T* O2 X  p, x$ T4 Y* A
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }9 b3 \! p/ X8 C
  20. 0 `) K6 N9 o; l/ p8 ^
  21.               B1=2.*PI+B0 ;
    / h2 W  Y1 d, U3 a( Z& b

  22. 4 j3 }+ G6 s) s$ A! |$ x
  23.              }" k% [/ |* F% u( w( G/ F( ]
  24. , ~4 m1 L; P9 _6 r8 a) c) K* X
  25.           }$ ]/ \8 K: P+ ]; u2 a  I" q' l
  26. * T" B$ J! t8 w8 g
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;( c% W, r+ s- z3 N0 M

  28. : j& E5 ?5 y/ f
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));% V' D! `) W/ s4 K, E
  30. - {, \6 @8 n! K* i# p
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;$ {+ z( ~: t! C& l; P! V6 P, U  E

  32. 5 i* S' B, x& g* x3 F
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
" ]7 a$ G- [3 l/ K+ P, c3 B
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。" D0 J- D# ^; d. L6 s
7 w4 e% M( B, M4 U
640.png + ]4 }* G; n% p  V' k! v% h
测试结果:; H- Y" m2 Y. T1 U2 h2 s- z5 _
6420.png
) V4 d& ?/ V% h
! n6 v! F4 {  O  W, p4 V6 {$ \反向测试结果 6410.png 9 i/ ~! B! i- w( _

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

271

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-21 22:27 , Processed in 0.539271 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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