找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5312|回复: 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);
    8 i7 F! ^: q; O( N/ H
  2. int  EQ_is_ge (double s, double t);* Q, p* m+ l; l8 ^& k9 \7 o
  3. int  EQ_is_gt (double s, double t);
    / h5 I/ B8 o4 T* p$ \9 Z
  4. int  EQ_is_le (double s, double t);% B8 {8 p( k; e5 R/ s" e7 g6 K
  5. int  EQ_is_lt (double s, double t);0 ^- l6 \; S8 j8 O3 w( Y; o1 Q: }
  6. int  EQ_is_zero (double s);
    * R1 c- U( n8 n2 k( m) l
  7. //=============================================================  r* K. D4 N' J# {! u6 f
  8. double ARCTAN1 (double y, double x );* R. [! e" y; p# I
  9. //#=============================================================8 }5 F, Q( k6 G6 h( S. o7 w
  10. double ARCTAN2 (double y, double x );+ X/ E' U/ y0 j; D) U
  11. //#=============================================================& |: f" z& L. i. M0 U
  12. double CheckConst ( double angle, double constvar  );
    " V0 |4 c4 ?3 r) ^6 R  k6 O7 z
  13. //#=============================================================6 y0 r: z+ B2 O) h$ n6 R
  14. double Check360 ( double angle );, X' q3 v* E+ B
  15. //#=============================================================
    1 t0 K  G; p0 f: s  G6 K. Q% _
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );% _( d% s" [) y* _" M/ T
  17. //#=============================================================
复制代码
3 e2 I/ @4 X; g+ E% _, o
以下为部分源代码,用于判断,计算角度等) }1 M* L; Q' M& E9 o: V
  1. int  EQ_is_equal (double s, double t)
    . B; ?% F6 K' E7 B3 Y: m9 R" E

  2. $ _2 d5 ^3 b: I. M+ B% T
  3. {; U/ d" n+ N! e. B1 b. X5 y
  4. $ F4 E5 q. z8 O3 W  l' w$ I# {- G
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }1 `: E% L7 N9 F$ }

  6. % W, U; [' F. d* Z
  7. }9 I4 C6 x/ F: P9 \

  8. ' |3 K( v" v! i: g  l& F4 t
  9. /***********************************************************************/0 ~4 J% k+ Q, Z7 g

  10. , ?. @) r" a, D0 G& q% Q
  11. int  EQ_is_ge (double s, double t)
    ! N/ k, T$ Q1 g: q9 a% a0 N- M

  12. 8 [- O$ j- D+ u" d1 w
  13. {
    " d7 X$ B. K# m6 a1 [6 K

  14. % _2 Y- S1 f) x; S! ]" \# Z
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }, u( }- t" E  h; ^* I8 g9 t

  16.   J9 H: y/ M* l" e
  17. }: x1 r5 `2 S# ~" Q) P; f9 F( n

  18. ' C- t/ t4 k2 g5 p$ ]; W7 M
  19. /***********************************************************************/1 d. X; [! D( A" }3 w8 K
  20. * b$ [7 s7 u% S* f. M: Y! S4 @
  21. int  EQ_is_gt (double s, double t)
    - V. X* F+ u  S* v$ U4 p
  22. 8 \: u2 B0 e. b9 }7 v5 w0 H; X
  23. {8 h/ c3 M  S2 v$ f' h+ @
  24. 1 n, _6 ?# _- B1 k: p
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    0 L8 e9 V+ J( P# ~  L+ }% {
  26. . `6 r, b* x% [" X: a
  27. }
    ' V% @1 B+ e/ h3 Q9 Q: l0 D+ j

  28. * Z) l/ r2 b3 S( Y$ ~
  29. /***********************************************************************/
    # ~) B, {9 m7 R) I, w
  30. # e8 ~4 _8 p4 F' j" r* T. K# X4 h1 Z, c
  31. int  EQ_is_le (double s, double t)7 ?1 e0 `; m+ {# Z( b6 p

  32. , Z7 V- J$ R+ ~# p# ^
  33. {
    " Y% ?/ v+ }- v4 F/ ~# L

  34. 6 d4 D5 K0 W/ C1 O$ x, V6 v  q) b
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    3 s) g, E; h# [- F/ F; r; W+ N

  36. / o+ N/ E6 U7 ]* Q
  37. }- O( o3 G! N+ O  u

  38. ; w$ Y) j  `$ |: i. C0 X
  39. /***********************************************************************/  g8 B: }, H. u% y/ B0 S

  40. 5 z: L7 Z3 e: S1 N  Q$ s
  41. int  EQ_is_lt (double s, double t)$ C4 F1 C$ d- J7 n' i

  42. 9 i# Z3 p7 I0 C8 H; w
  43. {
    2 ~+ }2 j, N4 M
  44. : L  {" ~( K/ m# M* `
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }% q; I7 S6 b0 M2 o
  46. 5 f6 m! V$ p1 j! ^+ J. R
  47. }
    ' k- D# ]4 b2 S: T) }+ ~
  48. , B7 p; W% R9 \
  49. /***********************************************************************/
    3 x4 g4 e+ n& C/ K9 ]$ D- Q
  50. 3 ~+ J* o5 U+ a9 Y3 c/ u
  51. int  EQ_is_zero (double s)! v% G& K: \' V9 ~/ S4 G$ f

  52. 7 {; a( v! w* W& T% {# [
  53. {
    / w" Z9 m: M9 C& }4 P

  54. 0 c8 b. A" U# h9 `+ z- Z0 N6 G
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }: y! ^* e2 Z2 v7 v6 W/ H

  56. 0 T9 j2 s# H- ?9 T+ c# R5 }: `  n5 f6 Z
  57. }& Q! \5 T/ i) D9 w1 d, f  P
  58. 3 X2 B5 Y. [0 p2 S
  59. //=============================================================: w7 h  p- ^" X1 w# c3 I* {9 j* R
  60. 8 b" h  y6 h7 M7 K4 ^! p! K+ }
  61. double ARCTAN1 (double y, double x )# }$ J5 W3 B& a: d! x' Y
  62. 9 p' v9 C' d3 D- c. w2 O
  63. //#=============================================================  O  j' L0 V% y0 ]

  64. * X3 J. B% r' Z' Z+ l# M
  65. {- }4 n& j) e, r6 y; s

  66. : w6 Y& e, S% d" X
  67.    double ang;2 n6 _$ E# M+ U- L, @

  68. . B- Q& H: T  Q+ o' H$ k' Q! }
  69.    if (EQ_is_zero(y)) { y=0; }; P8 d+ V8 p  [' S; V9 K
  70. 4 `! S9 ], u2 c3 k) b
  71.    if (EQ_is_zero(x)) { x=0; }
    7 U( }( K/ M9 n" c) O2 s
  72. ; D* |: f) K+ e6 Q
  73.    if (y == 0 && x == 0) { return(0); }
    / N7 Z. _- H. V7 Y4 V( V& r- I
  74. , |6 N6 ?8 W; K- m+ D
  75.    ang=atan2(y,x);/ y. f+ c( f5 r8 ?- v6 c
  76. 9 O- T$ J( C$ M# u9 I$ q( A
  77.    if (ang < 0 ) {+ j8 I+ v5 F; p4 Y) _- u
  78. ) d6 c+ V; q) R6 R/ N" P1 R
  79.       return(ang + PI*2);
    & ]5 y# @' R2 i3 _0 Z9 {8 F
  80. 7 k6 r+ g0 P1 x6 Q+ D
  81.    }
    2 R2 j' h9 T) g* o6 D

  82. ' k& O1 @! |2 T& S
  83.    return(ang);. s! G. O1 l" _" U# V! Z  u0 P6 o* X
  84. ! s* n: T* d! `1 }, b3 K( F: D
  85. }3 s1 a3 p; v- _( \/ b5 Z) M6 o9 L& p
  86. & ^  @8 c& L, {# a. e6 l, `7 ~8 W
  87. //#=============================================================
    & ~: q% E; x- W8 x& [: u& ^0 |
  88. ' r7 c$ `9 n: n
  89. double ARCTAN2 (double y, double x )$ V8 U, V  K) W( I+ W
  90. . @3 W4 \2 p) {! l  [0 Z% ?
  91. //#=============================================================6 }: C4 f( i! {; W
  92. / j6 Z' @6 Q; ~2 q; c5 T! y
  93. {  [0 z0 ]  m. u' I9 \, `" L/ V4 X4 V
  94. + ^5 ]( g; N# }
  95.    double ang;/ H# G5 a/ V0 q# \8 _1 P  L

  96. 4 M" V# E* B5 D% ?; E
  97.    if (EQ_is_zero(y)) {. v: t8 I/ F+ ^9 a  r  h) I
  98. * ?( b' i. B8 u  l8 m# \5 ]! ^
  99.       if (x < 0.0) { return (PI); }9 E0 b0 f* O8 k5 t8 x
  100. 1 {  |9 p7 I* S$ [' \5 A/ N% W5 e
  101.       return (0.0);2 Y( T/ ]$ v0 z/ @: I3 W1 C

  102. 1 Q# Q$ a, ]" y
  103.    }- d4 W+ f0 z! G1 ?2 u
  104. 1 g* l3 ]- h5 V5 v% O
  105.    if (EQ_is_zero(x)) {
    ' G3 W5 N+ I0 O, L
  106. . I( d7 F/ P5 M' ~4 o" M! A/ @
  107.       if (y < 0.0) { return(PI*1.5); }
    / W' \3 Y1 n) J, D& v
  108. ( S0 ]2 t. @8 _1 c- n. W/ R
  109.       return(PI*.5);
    8 C3 T$ z7 E6 h$ Z, R# L
  110. 3 H5 u$ n1 P4 n* {( o
  111.    }2 }+ h" t* W0 I6 t9 ?! z( f

  112. * ^% I0 y) J7 P5 |9 R; ]) @
  113.    ang=atan(y/x);
    % E/ ?2 i% e' C4 Q% z  W
  114. 6 J! j* ^6 H" v
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }' c* @$ v; E& O5 d0 e5 S5 ~
  116. & G& h2 B) H1 d# p
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }9 q: w% m) Y9 \, `) T) ]

  118. ( F7 `% }. z( a
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }$ u2 Z- ]1 G2 u" h* E2 m

  120. 0 L: [8 n+ I. g  X2 G0 A% ^( H6 q
  121.    return(ang);
    , G7 f4 \8 c$ Q0 H, [$ ]" w+ h  G
  122. 1 C9 H  Z6 }; {: \, Q& J
  123. }, i9 b/ L* @* l% j& ^4 g7 \2 W
  124. / x7 X) F6 @4 S/ D# r
  125. //#=============================================================
    6 J! _- m+ n2 t- K0 F' ?4 _
  126. , P; d* C& r( a$ s
  127. double CheckConst ( double angle, double constvar  )
    3 h; ]/ ^+ {0 ~9 h
  128. ; `* i5 J! u% B; \, S( L/ m- d
  129. //#=============================================================
    , ], E" g9 Q" t6 F% n

  130. : r  s& h4 X$ g) \$ |
  131. {
    / i7 ^, x6 a/ c, W  F% ^/ x
  132. 2 p8 C- P- [7 [: N% _4 U5 E
  133.    while (angle < -constvar) { angle+=constvar ; }
    $ `# o! i8 X8 S$ K+ D  N

  134. # s% D8 _/ R! _/ O1 @' i
  135.    while (angle >= constvar) { angle-=constvar ; }! B) i( P  c9 \- H9 Q5 }9 Y- C

  136. / W5 ?/ w/ d2 F1 r; b
  137.    return (angle) ;
    1 L, t8 @% D. d- F+ g% T
  138. # z3 r# r2 L  ~
  139. }$ z6 I; ^  I& N
  140. 0 F9 A6 @# ~* L0 z
  141. //#=============================================================
    . o# S. S% i1 d. t2 t& V

  142. 7 B6 n+ R# y3 d
  143. double Check360 ( double angle )# [6 Q2 d+ i- ~6 R3 s& Y
  144. 9 ~# }9 O. C! b: [' K* m0 A
  145. //#=============================================================: ~5 |$ {( {& M3 c. G/ L2 ^

  146. : `* U/ U' U6 S
  147. {
    . c8 Q+ A& X, R& T# m3 T
  148. 6 P$ |) C5 a; I0 I  p3 }" k
  149.    while (angle < -360.) { angle+=360. ; }8 g- K' s. J$ t& o

  150. 4 n: X3 g* q# B. w) z6 K
  151.    while (angle >= 360.) { angle-=360. ; }
    6 ~' V1 Y5 a' z# l
  152. 7 Q! e  [* Z9 V$ a
  153.    return (angle) ;8 Z1 p" D# }  h0 j9 o7 v, q/ e7 f
  154. 4 X/ z* Q- I; ?4 I4 X4 m
  155. }
    & _! }8 E* x0 B
  156. 3 ?( |- r4 y" C# N5 i
  157. //#=============================================================6 C0 Q" L8 E( c! Q7 T' B

  158. ' R: h8 t, T& K
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ; R) [& \5 x" h- ]; W; d
  160. 0 s3 z8 u# P. r2 |5 w  T9 Y6 {% {
  161. //#=============================================================5 q& D( Y* h  k* Q: x; ?

  162. 3 @" D9 z% c7 `: }6 m9 E5 a4 ^1 u
  163. {
    . \& q) Q/ d) S

  164. / ~$ h; H  Y& b6 v& h* W4 [
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }. @# Y' ?( I4 D/ l& ^, j

  166. , J# R) [4 S9 L. w8 X$ j$ G( G
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ) `3 B6 o2 T2 o; v6 B  P
  168. % L9 X/ n: v2 c
  169.    return (angle) ;: g4 c- x/ S' m- w3 D
  170. 1 W4 E0 R8 Z. a6 ]+ o/ m. G9 R! J  i
  171. }
复制代码

6 m9 g) Y- d6 t以下为摇篮5轴计算过程代码
$ ^9 \9 b8 _4 h; o
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    6 \& G4 z  ~0 c3 r% [

  2. 1 g- X8 ?% ?( E4 r; u* Q7 G3 @
  3.          j=0.; B1=0.; B0=0.;
    4 Q. K; A/ X$ T5 @( c6 v

  4. - O% d0 l$ T. m" z$ ~# m5 P
  5.           if (EQ_is_ge(i,0.)) {
    $ @" i/ V; I/ e$ J

  6. % s0 T0 s' i" ]2 [* s9 M
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }  o% Z8 y2 @! d; L/ s( ?

  8. % W" v5 E: h& e- _: B# @
  9.           }- t, z# R4 s5 O

  10. ! i% l" W, R4 `9 ^8 D
  11.           if (EQ_is_lt(i,0.)) {
    # i3 Y6 m$ H$ p! k  X3 D

  12. , ?, j1 U+ K! S" @: \$ [' W
  13.              if (EQ_is_lt(k,0.)) {1 O. n8 A0 _3 o9 w7 L' D5 ^4 [
  14. ) {+ \2 X% k2 H" j
  15.                 B0=atan(i/k); B1=B0+PI ;
    , l- N4 {5 N  Z+ }
  16. ! _9 @3 |. `+ R/ c9 I9 K% V
  17.              } else {  i( b+ \7 L5 \4 ?, i

  18. 1 T! x( R- m3 y' X+ a
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    2 b/ \2 K& v# c. f
  20. 5 Y) V7 M: w- G- j- v8 i
  21.               B1=2.*PI+B0 ;
    1 Y3 W$ y# S, ~  y

  22. / }1 U% y. y5 x/ w, g6 E
  23.              }- j* I$ ?6 P, l# D
  24. 5 Q" p5 S6 z: F. b
  25.           }
      I3 n) A3 M$ ^& T- c4 W; `0 r
  26. * Z  ~) |9 n; N: A
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;* u7 R# u9 e; K. N! ]
  28. ) g& u) ?' O2 Q- |, ^! J
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ; Y0 k$ T/ M$ @1 V+ T) M, s( \( K1 n
  30. * l6 J2 o1 Y/ O, `0 [- x' C
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    : R/ j0 C  {3 p
  32. + W# B. ^" Y; v
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

( B9 l/ G' b' s: P3 [通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。: t2 R1 f& q3 }& h3 L& d, D: f: F3 m
$ ]4 x! n$ W  M+ X% g
640.png 4 K4 o4 t$ r8 c3 }+ A3 T
测试结果:' T2 Z- |3 q, h# y4 @4 j. K
6420.png
, C0 {* Y: i8 \6 L4 e! t$ d
# \- h% ^/ t  J+ p" t& }5 W' A反向测试结果 6410.png 2 D* U" z1 ^5 `& S: D" s; V

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:09 , Processed in 0.542671 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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