找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6516|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    0 K% L  c: n3 f$ e2 x3 X/ a
  2. int  EQ_is_ge (double s, double t);8 v* n$ \& T7 ]$ k
  3. int  EQ_is_gt (double s, double t);2 U, D; C! D+ R, U: B
  4. int  EQ_is_le (double s, double t);
    - @* }2 z! z! w. r$ o
  5. int  EQ_is_lt (double s, double t);
    $ b; q1 P) M& E( ~2 q8 Z. `
  6. int  EQ_is_zero (double s);5 w+ w7 o  H2 ~% a1 H
  7. //=============================================================! W$ {: k( F! C4 V! J7 G1 J3 @
  8. double ARCTAN1 (double y, double x );3 b5 ~* n" g' r" V
  9. //#=============================================================/ V0 x& I7 r/ e- W; e- D
  10. double ARCTAN2 (double y, double x );
      \/ J. t5 i, l. J, `
  11. //#=============================================================
    1 c- D0 H+ q! b& n
  12. double CheckConst ( double angle, double constvar  );0 F6 _( O; d: w* q& T: P! a
  13. //#=============================================================
    4 ]$ j0 V/ r8 y7 r' E" c/ }
  14. double Check360 ( double angle );2 i5 v2 g0 r( M4 u
  15. //#=============================================================' }- b7 }: B9 c* o) v
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ) {( [7 O) M* j8 U1 s
  17. //#=============================================================
复制代码
4 [* ]7 R+ Z% L% l
以下为部分源代码,用于判断,计算角度等2 n. v, L+ Y" n; H4 I/ c0 v
  1. int  EQ_is_equal (double s, double t)* W0 u# s* T( M8 v8 k
  2. 7 Z5 }+ @* f0 D+ }6 f0 v8 z
  3. {% N; b( f6 [1 l, n6 c  o
  4. , e, F5 z4 J& o& u: R
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    - X( \4 Q( t! |/ G3 |: l

  6. 8 f) I$ ?% Z! `. N% Q5 A' R0 v% B  n
  7. }
    : Q- o/ @4 z: p8 X' r" X
  8. , i$ ~7 P# f" `( h. C+ ^7 J( z/ h7 @
  9. /***********************************************************************/
    6 ?0 H9 i" `4 }' {! Y$ v
  10. 3 @! A% M+ j1 C, }) G
  11. int  EQ_is_ge (double s, double t), d+ O6 h+ V4 v3 t" k

  12. ) N6 ?, r! y1 n% H9 i/ {! D2 r
  13. {0 X7 o% F4 q" B* D4 U! F

  14. 3 K, y9 O' T. x. j
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    # [/ Z# B/ M5 S! j; B3 d

  16. + X# R2 h) U; S- J& A
  17. }9 {+ ^+ y% \1 m% h7 i

  18. ; Q  r9 J" z# x1 N6 b
  19. /***********************************************************************/
    3 _, V( g: @% E! K1 f( k' x' ~

  20. + I7 }! l+ [" d( `/ {1 `
  21. int  EQ_is_gt (double s, double t)
    + R; T2 y  n5 o9 \. j+ }

  22. # a: e6 R1 [& \  _1 V& p
  23. {
    & M& S4 r0 W$ L# }0 @
  24. : j% W7 G* p9 f; v
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }3 p. q% d  Z1 ?' ~7 B  l3 \

  26. 2 u' F4 T- u6 H5 b& K- @
  27. }1 `" D8 N9 @9 B2 {9 ?5 i
  28.   y) j2 i  K7 [6 S- v  G
  29. /***********************************************************************/
    2 c8 f& Z# R8 M! k9 I
  30. % Y* Z0 ?$ I, ^9 P- k
  31. int  EQ_is_le (double s, double t)
    7 U) u  b2 \  Q

  32. . A  {9 C$ {& u! v
  33. {2 S# y8 e' Z4 q+ x. b

  34. 0 m- ]4 R$ P. L3 R! N0 ]
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }$ m6 ]; M* s$ \' l: O% _( Y

  36. # i* ?1 p6 _6 W8 u2 Y8 }
  37. }
    , N& J% ^: ?) T) x' I: B) ]

  38. ) ^) t/ z6 U+ e9 P* e1 W! U
  39. /***********************************************************************/
    3 M! O2 w# g; P4 ^' \9 r# a
  40.   h1 T' o3 w1 A) M5 q
  41. int  EQ_is_lt (double s, double t)
    . ]$ z) |. c8 J* \
  42. 1 h" |( s7 Z9 h2 \) z$ S! _
  43. {
    - p% e% U1 b* W4 {
  44. / s& p( g4 `, I" Q7 N2 v4 m
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    % b& D2 o) ?) N: A. @8 |( O

  46. 2 y% V) k  Z) ?$ j
  47. }
    & t9 p9 n: M  R7 q7 f/ `: l

  48. 0 a) F" H1 I2 J/ x8 Z( W
  49. /***********************************************************************/6 e% y0 j4 |9 Y

  50. / u: V+ v5 K' P% z, W: a+ t6 Q
  51. int  EQ_is_zero (double s)
    # m, J1 M" g. l1 y& `  ]8 B# B

  52. 7 m$ y+ R' I5 Q2 f4 x5 H/ O
  53. {
    1 t0 k5 Y- j6 m" P  ]3 R

  54. , F- Q; ~# U/ Q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }4 ?: P: A5 }. A$ a- c- e& j5 j2 b9 n
  56. ; L; U$ u+ b* T) \: L* @- o
  57. }
    7 X: w' ~; _! ^3 ~  ~6 X

  58. ! y" ]5 w, O. E0 H
  59. //=============================================================1 R) r( V+ a$ e7 n! z

  60. # h: F; w% T# L! e' s
  61. double ARCTAN1 (double y, double x )" C" }% k5 r  Z& @

  62. 0 ?9 b9 X5 K; Z0 ~/ c) F) _9 \
  63. //#=============================================================- l4 W3 n& g, R. Y$ [
  64. " J8 }* ]2 }2 v7 \1 f0 O/ |
  65. {* _( |: G; U7 s) K2 R% q8 o* `

  66. ) D  T0 I7 {3 N& `7 ?
  67.    double ang;* @* e$ u2 m3 H0 `4 B1 n) K  K

  68. 4 l4 C, p$ T9 ]0 ^8 W; V; |' o
  69.    if (EQ_is_zero(y)) { y=0; }2 k) t% |9 L1 ^# }; f# S) [

  70. 3 b# h) z- a# g  q4 M1 d
  71.    if (EQ_is_zero(x)) { x=0; }, o  D; ~4 w. y: X3 b
  72. % X! O8 G0 F: j7 N0 h9 P! J
  73.    if (y == 0 && x == 0) { return(0); }
    $ M+ p1 K5 M; n7 h& k0 B

  74. % s: q8 {/ G3 a4 M$ g4 O( K
  75.    ang=atan2(y,x);$ P, g$ S8 R. `$ h" @1 }

  76. 7 s( v' \% ?6 _) `0 M, Q0 L3 N. y; ^
  77.    if (ang < 0 ) {
    6 K) F. `: S8 a$ p  `0 f. p; A
  78. ' ^5 V5 q2 r# o: f4 W
  79.       return(ang + PI*2);# p) \  y& F5 P7 |$ M! F

  80. & ^  i- ~& V- D/ K4 \7 T
  81.    }9 z% j& `/ z6 L6 ?. X

  82. 9 H& B# D6 T+ ?  B, e5 b" F
  83.    return(ang);- v. u) i  y$ U; W( v* B; K( Q

  84. ( K; z6 h) i( l2 J
  85. }
    8 V( Q0 b7 f7 p0 Y1 E
  86. ! _, @  j) c, J1 Q0 K$ Y
  87. //#=============================================================4 ~* x. q) b" k0 @. Q

  88.   @$ Z) l, `7 `# y3 a5 \. d
  89. double ARCTAN2 (double y, double x ); I) |! H$ ~7 r" H
  90. , i* a- t% ~0 L
  91. //#=============================================================
    . x5 }# X6 y" L: O, X& C$ ?3 p9 S; E

  92. ' E4 k5 O" x6 d( h& Q4 Z
  93. {# e9 P6 G) n+ [' ?' K! ]

  94. 0 \8 O$ a0 w5 v# R) B
  95.    double ang;* R  H" m" b5 Y+ E( d4 z" H

  96. 4 N9 f) G0 J: s0 l! M- \: Q3 A
  97.    if (EQ_is_zero(y)) {
    , z; G' ?0 m2 b# m7 ^1 J* u
  98. + s. H+ d! b1 r& H6 S
  99.       if (x < 0.0) { return (PI); }6 |1 O3 [2 U' J) }4 Q6 ]9 Q

  100. ( T5 ^* w0 N! o& g
  101.       return (0.0);
      y/ `+ k% y. b

  102. 5 u2 R1 x2 J- x6 D: c7 ?0 B, _
  103.    }
    0 B9 w( R' a4 U2 P' V" @- `# ]
  104. ! C  K7 ]/ N8 f  y* u4 b
  105.    if (EQ_is_zero(x)) {- m3 _4 F* U5 r# x: B
  106. 5 w& T% M3 [9 Z1 z; F
  107.       if (y < 0.0) { return(PI*1.5); }
    # `' H  c( [" k8 H4 `
  108. 1 F, A. N3 s% E5 k: f) h3 `
  109.       return(PI*.5);
    3 a, h7 {  k$ z0 H1 v

  110. 9 U+ ?( M& z) W- h& p8 V& D
  111.    }
    / @/ Y1 G5 n" C4 q" n+ r0 x+ @- J6 O

  112. ) r# F. g. o2 V8 A- f
  113.    ang=atan(y/x);
    1 U9 U1 q& M6 s: ]6 a( \  D7 {  ^2 I0 }

  114. * }# X& s  R+ y: t2 e
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    , ]+ Q) S  z9 ?) l) j

  116. ! P4 T% \$ h$ _9 u" d4 p
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }! Y3 K+ E5 [( ?* T

  118. # ^. q" v9 x" ]+ o
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ' b1 q8 ]" C1 K( y) o# x; T$ D

  120. 9 i  B% S( n5 K
  121.    return(ang);: q* n1 _3 E3 i  `. p( |8 Q

  122. & j( _6 W* y7 I& ?
  123. }
    ' w* T" |0 g& ^
  124. + t9 V5 k, j$ P5 i( H. q0 u1 p+ f
  125. //#=============================================================
    7 C2 c4 H: A+ D. P$ ]7 I

  126. 3 S! k3 ?1 k  _$ J; ]
  127. double CheckConst ( double angle, double constvar  )& g' E: J4 P4 R/ x) q7 w

  128.   B6 k& Y5 `& y! z( K( K
  129. //#=============================================================2 q( ?- O& [4 p5 N

  130. / H6 |7 l% P& i5 i- B
  131. {3 x3 e9 W" r3 ~5 q

  132. / d% `7 Z5 P1 ]' i: D' Y+ k7 c
  133.    while (angle < -constvar) { angle+=constvar ; }5 w! S0 D( v6 R
  134. ) C8 K4 R6 a) j' v7 [
  135.    while (angle >= constvar) { angle-=constvar ; }/ U+ X: M4 R2 B: _
  136. - ~6 E6 l! k$ V- E
  137.    return (angle) ;* G: `+ D9 h& I1 O

  138. 6 d8 C/ E2 _2 r) `% [$ H3 A
  139. }# M: r$ D; x1 _
  140. & F: U3 [0 G% I2 i7 _8 Y
  141. //#=============================================================
    ! |9 T1 z- B# z. n+ P4 x1 {, s1 T
  142. . _$ d( _' V7 }5 v& L& ^1 L
  143. double Check360 ( double angle )
    4 i: Z2 I( S# k. Q, G) e
  144. . a- n! o1 g. ]# t
  145. //#=============================================================
    ) l, M+ ?; G, `9 z, |/ B+ [
  146. 5 ]% W& b$ r: f0 n  L8 Z
  147. {
    . C8 ~4 w; J) E/ K& K9 v& r

  148. ' ^$ P! |$ U. l  e& h2 w) U
  149.    while (angle < -360.) { angle+=360. ; }
    / W- A" I$ O. D6 {* @
  150. & i! e- X, |: j% I* ~( X
  151.    while (angle >= 360.) { angle-=360. ; }  z5 G# F) O  I% S

  152. : G  U  ?, G5 r) S% d
  153.    return (angle) ;- [4 |7 L/ U" u& x! ^6 \5 X

  154. 1 l) J3 S& a- L) }6 A7 N
  155. }) r1 \1 G3 s$ z6 u/ P7 x6 H
  156. - l/ ]7 H8 V3 Q8 a- g
  157. //#=============================================================! c7 q8 l. B/ ~2 }' U, T

  158. & P$ {- D# H: J1 s4 B2 V4 T
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- W& k- x9 E9 ?7 G( j' U
  160. & M. g8 a  J" f4 ^; k/ m8 w
  161. //#=============================================================8 g) F3 m: L$ h

  162. & a6 P6 s8 ~2 x' \5 Q7 A; v; E
  163. {5 @4 n+ ~% O/ ~# J  N
  164. 9 P8 ]; O5 w+ p8 u1 A: [* I
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    5 `- V- J! Y4 d9 q) B/ a3 _  D
  166. 7 Z$ r( _% o# e  @7 K$ f0 S0 g/ E
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    * G1 U" g/ R+ p0 r& C. X( B" f# k' c

  168. 8 G9 d& S, A: J) _
  169.    return (angle) ;
    6 Z' d4 w3 D2 m7 m

  170. ; U* t) v6 p, p9 h. f9 h
  171. }
复制代码

4 l6 U& B2 v# e以下为摇篮5轴计算过程代码
/ @: \4 q9 o0 F0 J
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);9 G! W3 }4 T$ W/ P& y5 m  n0 z. H
  2. - Q2 B5 \/ G+ O" C
  3.          j=0.; B1=0.; B0=0.;2 g8 I9 Y8 I: y7 E% p: j' j
  4. " Z# C0 Q; _; Q: v
  5.           if (EQ_is_ge(i,0.)) {$ X3 g. u# O7 R. D9 I2 y" g

  6. : b$ _! B. w5 P/ H$ w
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    5 i# x- ]1 O6 l" k, |3 s, q3 c

  8. & n5 v2 o' r* P
  9.           }
    ' V) K0 G. `2 t

  10. % x' H' R- r2 |3 d0 G3 t; o5 d
  11.           if (EQ_is_lt(i,0.)) {
      l5 r4 V  D3 e& T9 r" s9 [

  12. ) t6 n2 Z' h# g; U0 T
  13.              if (EQ_is_lt(k,0.)) {
    6 _1 r* Z! N( A5 w

  14. 9 t; O. x8 V+ Q/ ]( ^/ _' D6 E
  15.                 B0=atan(i/k); B1=B0+PI ;( c, f9 v1 s2 u7 d& m) W

  16. : V. K' C& l; [" q; x
  17.              } else {
    1 O7 J( G& {" V

  18. ( o: i# b. r- m  W  T; p- V+ t
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }; O4 s: z" [' H; v; ~

  20. 8 U7 w+ h$ Y  _0 J7 ]6 _( r
  21.               B1=2.*PI+B0 ;
    # [4 |7 S. s& u8 N

  22. / p9 P4 G+ }& H0 ]
  23.              }5 j+ x6 N7 z+ F2 p
  24. ) o4 @, g* X& j! H3 E9 ~: f
  25.           }
    : S" y9 g* C# ?% p
  26. " J$ f5 J# f, }$ T  n0 i
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;* I2 }0 V6 x" [3 n% A0 y1 |

  28. ; R: R8 @6 G3 g4 }2 {
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));4 v8 d/ L: O# I: H
  30. $ C: j8 M! {3 C( Z3 O
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ' g. _3 O9 A- n9 u

  32. 6 S8 I; |7 g* C/ J7 i& ?% i' N% a/ `
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
6 m3 K8 c5 a0 Z; t% w: N8 G" F
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。6 @( @& M) v8 i; v# c

  O) A/ t! v5 @ 640.png 7 {7 y3 `- H8 Q8 |' b" U( N
测试结果:
/ E1 j) k/ i( p8 z) i 6420.png . W, n+ X3 G' d/ J4 ]5 C- Z; k! |
( a; _4 v6 w; p
反向测试结果 6410.png 5 D3 T0 e- i. F( r  d! {6 T

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

188

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-3 19:53 , Processed in 1.509920 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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