找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5377|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);! S0 J+ g, R4 w8 m, [
  2. int  EQ_is_ge (double s, double t);" p& e* L. T% g: E& x
  3. int  EQ_is_gt (double s, double t);0 }  i+ d+ b' e
  4. int  EQ_is_le (double s, double t);3 F/ v1 ?& M$ K
  5. int  EQ_is_lt (double s, double t);
      i) J" e0 {! V! |/ E9 G3 O
  6. int  EQ_is_zero (double s);9 j) ?. m! W$ k! ^
  7. //=============================================================
    ) H+ a  p" X6 ?4 s
  8. double ARCTAN1 (double y, double x );
    9 J+ f1 I, ?/ m
  9. //#=============================================================
    1 c8 M& C: q' c' O. H
  10. double ARCTAN2 (double y, double x );/ ?4 _$ Z& r9 d
  11. //#=============================================================
    . Y% X# j% X4 x5 F; X8 M
  12. double CheckConst ( double angle, double constvar  );8 G9 A1 U" s% B  ]; D# s, t
  13. //#=============================================================" y6 ]- o' N' Y6 D# X/ X) Y, M# R
  14. double Check360 ( double angle );, Z* b3 P$ G  y6 l! a( f
  15. //#=============================================================
    : }* K% |7 H, `2 Y: h
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    8 S5 \( w$ R- d4 f5 b- m. |; a! V
  17. //#=============================================================
复制代码

0 e# M2 ~6 }$ p( S以下为部分源代码,用于判断,计算角度等3 f. d4 V7 T: g6 ]
  1. int  EQ_is_equal (double s, double t); f9 p& }2 s3 L4 @

  2. + j* t* C& I; U1 Y9 f1 ]  S
  3. {6 b. Z8 _, Q- ~

  4. + W* Z3 H/ S' @+ @
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }3 I+ u# W0 A/ Q) W

  6. 1 x7 j6 j- U3 ^4 N. D
  7. }
    + m5 q( e$ t9 q  c$ w% p, O+ }" ^) [

  8. 9 X: z$ n2 k. Q6 G" m' x
  9. /***********************************************************************/& {7 D8 X& e0 [6 ]3 K0 ]
  10. ) S" M+ D3 z1 U+ J. _% m
  11. int  EQ_is_ge (double s, double t)( U' r: c: u6 w

  12. 2 [3 a: f9 z+ U, D, q
  13. {  ^+ L# p5 o, c! d2 }

  14. 3 n2 N. @1 g0 [$ P  w0 @5 _
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    , q) A7 K' L/ M& ]  B
  16. ! [. f' X7 s/ U+ k
  17. }0 Q; a5 M- V/ o: I) l

  18. 1 f3 i  h' }# y+ H
  19. /***********************************************************************/
    + ]8 g2 V) N" u/ O7 o0 l% O6 H
  20. ; ]# l# K% Z- B5 t9 |# L/ B; T
  21. int  EQ_is_gt (double s, double t)
    ' u: Z& t" H9 f& A+ }: N; F
  22. - |3 v7 j1 d) n; h4 F. f
  23. {& D3 Y) n. J: K2 `
  24. # _& G) n( Y: ?2 ~7 e$ N
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }" ?! n) w* V& w

  26. 8 L7 \6 g( J; e1 A
  27. }' P2 l" b# H% A6 P" o
  28. 4 |/ T0 ?( `5 f: U& F  K4 q
  29. /***********************************************************************/
    7 q# d  r- T% E2 M- w: y
  30. - O1 ?# T$ n$ X% t" ]; R6 u( |# E
  31. int  EQ_is_le (double s, double t)
    & `# c. c  A! e& b- a$ x

  32. / }/ ]" ]/ i6 U9 M( X0 O
  33. {2 S6 q$ G9 k% P% n/ Q# E1 N) v
  34. $ F7 ]0 J9 ?6 m$ B4 O  c
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    6 Z" p9 D1 @9 N9 G) l4 }) u

  36. 2 h- l4 X. l* _8 X2 [2 U9 t
  37. }8 W% F' [; q( |/ W4 `" i- z5 [) t
  38. ! _( R, N) \- z+ i
  39. /***********************************************************************/
    5 E7 Q; n- j3 ~) J2 B$ r# X0 Y

  40. " \7 ?" y$ z( H" y' @7 v6 `
  41. int  EQ_is_lt (double s, double t)! b3 @3 E% {7 Q% N$ H& S# S) b) S

  42. , E; k6 C& b# p& r
  43. {8 J7 S9 `2 m# K2 r+ e7 v0 [9 w

  44. 3 F- }; ?: d: f' k+ `2 F* P
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    0 v" X0 g% T7 K' ~; n
  46. : q3 ~, K( T  g. X* Q3 P* r
  47. }
    ( {& n, \/ t- A8 m

  48. ( i* M9 `7 C  n
  49. /***********************************************************************/0 B& V# T/ r& j! G/ Z! H% W/ p; E

  50. & _6 j  t' P* P* r% {9 u
  51. int  EQ_is_zero (double s)
    8 D$ m6 t  s# B, h4 T
  52. 8 D. Y& F; g0 J0 u* S
  53. {4 {2 P+ T- g3 d
  54. + |% Z" ?6 |, Y+ a5 X
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }; f: f& J/ R) t0 E! n$ F, ^

  56. : z( M! c' }2 m3 E5 @1 z
  57. }3 J' X7 x7 ]# r( K2 c( J
  58. 4 ]8 k8 O" f, b# h2 v
  59. //=============================================================
    ! x5 m% _- _/ Y7 h  h) P

  60. ! w6 q+ j( R  o+ a* v0 q
  61. double ARCTAN1 (double y, double x )8 w0 f2 Z6 _4 D) y

  62. 5 S( h& d# X; A* L
  63. //#=============================================================" D) I7 o, ^$ O

  64. / W( [6 N9 n  p7 N% K
  65. {1 U/ G, l4 w, l

  66. # l' ~7 C5 {% W/ o! C; @
  67.    double ang;
    , l" A5 g4 b: w) C1 W% S+ m
  68. ' e1 j" e: ?/ y4 T. t
  69.    if (EQ_is_zero(y)) { y=0; }% I2 O8 S: Q4 U" B0 f  W

  70. + R6 }8 C0 c( S' |" Z
  71.    if (EQ_is_zero(x)) { x=0; }
    3 n, X4 x7 t+ @( m, [- S

  72.   Z8 I! b: F3 ~! f
  73.    if (y == 0 && x == 0) { return(0); }
    . O1 {( v9 H4 v" S- _
  74. % H: o- L) ^% N
  75.    ang=atan2(y,x);) U! z9 |1 G/ j

  76. * N& @9 v' a( |# W/ v9 b9 v5 c
  77.    if (ang < 0 ) {
    ) @+ m/ ?' }/ ?4 k

  78. - U! I  G8 D8 U2 J8 ?- d. b' F
  79.       return(ang + PI*2);
    ( h% E5 z7 s+ Q$ P9 K
  80. 6 b! V5 |4 @, `4 l2 @. |9 ]
  81.    }$ V7 }7 V$ W2 i/ m2 q: _- {
  82. 6 c4 D  y* L) c! ^7 ~; B# }9 i
  83.    return(ang);
    1 z& \$ q9 c: y
  84. " s$ O$ F, U/ [0 s
  85. }* y# w, n* i! D  p" k

  86. 6 l$ u. w( N1 c7 _! n8 g. w
  87. //#=============================================================
    " z9 m: E" o" c; N

  88. ) ^9 a; {$ [4 E0 t0 W
  89. double ARCTAN2 (double y, double x )
    1 }+ D9 b0 R5 L$ y
  90. 8 J( m% E3 u' F) c( p6 ~- }
  91. //#=============================================================
    ; {- V5 U; P: z* F) T& [" j$ }
  92. 2 B- k2 s9 F: O2 v
  93. {/ p( W+ e+ k. ]! T! c
  94. 7 Q; n2 ]+ A. v( u$ S
  95.    double ang;
    ' Y4 i! P+ L4 h3 v( N3 J

  96. * z9 q% p+ _- K! n0 J; w7 F) u3 p! Y
  97.    if (EQ_is_zero(y)) {# d( C# p8 D" a2 b" M3 i

  98. " S/ }  d5 Z2 V! u3 Q! i1 U/ v
  99.       if (x < 0.0) { return (PI); }
    * T; [) t$ l! o* ^, p( N
  100. 5 y  T9 j8 n# J5 i7 L2 V) ?+ D, K
  101.       return (0.0);" A: l2 V6 n3 j

  102. " G4 ?5 I% H# ]% X& `* s  a
  103.    }
    $ [5 Y& @& C; _1 Y$ d& p5 U
  104. 5 E3 W3 C% H5 s2 a3 [9 W9 L% ^+ y
  105.    if (EQ_is_zero(x)) {
    2 `, G6 t4 r. d- `8 Y3 }. f

  106. : E# ]- s0 Q1 o
  107.       if (y < 0.0) { return(PI*1.5); }0 _- @$ N1 l0 c/ H- P, m& c6 m2 H

  108. . i! ~; f# u+ s$ p7 I1 A
  109.       return(PI*.5);5 w1 [# E$ ^& B  y+ {

  110. * ?6 t+ z3 x& Z( A
  111.    }8 \4 p8 F4 b: T: G% K0 u: ?) v

  112. - d- J- W: F8 \% l2 s
  113.    ang=atan(y/x);7 u% [1 o5 ?) j5 z( M
  114. 0 z2 u3 Y$ i1 D" Z3 S+ B
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    0 T8 D) j( N* d2 k' o8 ]1 a9 U

  116. ' R. c1 h# o+ {  V% o# O, p
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }8 K" w- Q4 R) q+ m' O7 D. d
  118. 5 c5 Y3 K& {# c" y* U
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }0 @* ^; ~& w, ?% {$ v( M# e
  120. ' b+ u/ n+ V+ i# v0 F. k
  121.    return(ang);
    0 a+ ]9 K$ y4 a4 t$ ?
  122. 1 p1 s8 o2 B, S: B
  123. }
    & o' n8 N+ D5 H: V. T1 A; C! x( D  d
  124. 3 Z% h* O) M% {4 z- j; Y
  125. //#=============================================================2 }" K( [; ~6 O0 W* C6 p! r

  126. ; L+ @8 A& f5 o: S. }$ J2 [
  127. double CheckConst ( double angle, double constvar  ): C$ r; W5 i) P5 Z

  128. 0 w+ a% f1 T7 w  D: F8 L' q+ I5 A
  129. //#=============================================================
    9 ?* y: [$ }& J; c6 r: h

  130. / j/ k( w- _0 w8 ]  r
  131. {0 Q' ~1 D. e8 ^' l

  132. 8 _# e+ |/ ]2 c" d
  133.    while (angle < -constvar) { angle+=constvar ; }
    1 A  G* D9 s6 _; O/ g
  134. ! A9 u1 A( z( Z/ L
  135.    while (angle >= constvar) { angle-=constvar ; }
    ( v& h, ]; ?4 R4 ?. G7 k, v
  136. 4 X! L+ k! R9 o$ l3 i, m( H
  137.    return (angle) ;. m* a& P* u7 A% g4 v

  138. 2 j4 {) \6 Z) J; D; ]7 z, b
  139. }0 b9 z' Q$ y# [! |

  140. 2 C1 `4 A- S7 q! J+ |
  141. //#=============================================================" {) r+ P/ ~7 X* ]0 B; i
  142. 6 D7 v2 @. `8 Y6 w8 P
  143. double Check360 ( double angle )" `  q* E- B2 H+ T
  144. , _  B4 R6 z- c! a7 K' o1 B
  145. //#=============================================================2 S9 ^! h- X& q$ X4 h0 |+ l0 @
  146. ! h, b4 p8 b- C' q
  147. {
    8 ?' U! I; j9 G; ^/ [2 o

  148. 2 ?$ `4 f8 x4 A2 }" s
  149.    while (angle < -360.) { angle+=360. ; }! R  E/ {2 f  P% ~
  150. ' g9 Q) P2 K0 D8 r* k1 z+ N
  151.    while (angle >= 360.) { angle-=360. ; }  j7 z8 k' ~* o8 K0 J! L

  152. 9 E1 Y; K& s4 m6 H% E7 I' t5 m
  153.    return (angle) ;. B% R& r0 P8 d. T7 z/ [  X! X

  154. - j3 a1 J" V: s6 x# W, x3 p
  155. }8 |' p/ i. ^. @; n3 f1 z
  156. 7 b$ h  H$ _. t- D. Q
  157. //#=============================================================
    + i+ u; B4 o, x

  158. . n1 k; u% q7 y+ |9 u2 t# T
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ) m7 C, ?' I5 ?

  160. & H* ?; s. d# \8 S
  161. //#=============================================================
    # ?) C- ?& t' [% F+ C
  162. 3 N& }) ^1 o7 u9 H! l9 ]
  163. {" I, Z1 @9 [* d+ i

  164. . b! W/ D) `9 Y# m& ]9 g
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }) v- F9 d: k: _

  166. # Z6 r# A9 t8 S* g2 M7 A
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }5 S& H+ S( r; p6 @7 ?
  168. 3 l6 B# n( o) H, u- T+ {8 F
  169.    return (angle) ;
    # @1 o3 j" W" I) ?; [- l

  170. 8 C0 u9 X1 ^0 ~
  171. }
复制代码

9 ]4 ], G8 N+ b( L3 d以下为摇篮5轴计算过程代码
! O( U) m; i3 e6 p; Q' Y( i
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    7 V3 \4 \' ^0 V0 V3 j  R/ j
  2. ; W- S- L" _; ~6 w5 p
  3.          j=0.; B1=0.; B0=0.;( h0 w* l& k0 |3 |* h
  4. $ p+ w  k6 g  M$ ?* O
  5.           if (EQ_is_ge(i,0.)) {- T9 J8 o1 R5 z; s; q- B, M6 S3 K# [
  6. 2 `5 i+ V) N4 \# _5 I" _
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }3 Q! {1 h: P6 _( ^# C7 T

  8. ! F2 C( g" M- K8 ?. q
  9.           }
    7 S' U6 \3 x; w0 g/ L# w

  10. 1 G. z0 m  a2 V3 C2 l9 q/ V( v
  11.           if (EQ_is_lt(i,0.)) {
    : _  g+ J8 J' s3 R8 A' }" h1 b9 t* Z2 Z
  12. 7 t) {" k1 C- |
  13.              if (EQ_is_lt(k,0.)) {
    8 W% y+ m! e- w* [1 \8 n

  14. * T+ w1 }+ H! K( D5 T/ X7 d
  15.                 B0=atan(i/k); B1=B0+PI ;
    ; F9 I, _$ i) a3 J* ]; }

  16. ; w- e( ]2 b9 l: k8 L
  17.              } else {7 z0 l9 J  s( k  |

  18. : j5 a# s6 Y# i) T
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }3 P( E" w; g' d! g8 [3 ~: [
  20. 7 J$ p; h! D0 `0 ]+ N  H; Z' p& \
  21.               B1=2.*PI+B0 ;
    $ R7 P" t& W$ s  Z( j
  22. * b% h2 W9 k! c% G
  23.              }* k' Q3 Y" d  |( Y+ X, L1 O2 I" \5 @4 [

  24. 6 z" c: z' J7 W3 }
  25.           }& @6 J6 c" \" }9 Y/ E8 y

  26. $ ~% L$ @/ M. D  e0 f1 c. ]
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    - j) n0 A. @% w! w

  28. 1 i5 Z. X9 J% H$ t. g9 P2 l  ?
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));3 W% a0 a/ G! d& `+ Z

  30. * V$ i  w8 x" k6 u  e" C
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    8 q# _& D! a) [1 V# R
  32. & V: F9 G5 v) c5 Z5 p; @
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
, O+ l0 y1 Y* t6 s( q: D
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
; f4 b% g6 K( q$ A+ D3 F8 ~( q: g# E/ l8 X6 ^: N, w2 i: P
640.png : q# H4 J" \* @0 M0 Z1 a9 E
测试结果:
  O7 P: y3 K2 J. w 6420.png ' M! d- a  Y/ B& p
6 f' ^) |, B7 j  O/ P
反向测试结果 6410.png : s  z. @! @, s3 u

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

158

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-11-1 20:31 , Processed in 0.519875 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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