找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5825|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ) i8 l0 x) H  j4 F* S' D
  2. int  EQ_is_ge (double s, double t);9 e9 o% \. f' m9 d( G) g8 c
  3. int  EQ_is_gt (double s, double t);
    + N2 Q( M) L' {8 E8 t
  4. int  EQ_is_le (double s, double t);. V) s) H+ [6 w8 }* {/ ]
  5. int  EQ_is_lt (double s, double t);  N: k' F9 x4 _* ~$ z9 O; l) v
  6. int  EQ_is_zero (double s);& V: |3 q9 j1 l/ v  [+ q# ]
  7. //=============================================================
    - N4 Z4 \! {" I
  8. double ARCTAN1 (double y, double x );; `/ t5 }4 ?# d3 y% `* J
  9. //#=============================================================" a$ j9 k4 y' Q: }
  10. double ARCTAN2 (double y, double x );& F! X* b7 w, e' h. n
  11. //#=============================================================
    * h( c* n/ Y% N* h
  12. double CheckConst ( double angle, double constvar  );! S5 ?" g+ q, J3 r! U3 c
  13. //#=============================================================+ o8 [+ C/ {* I0 }
  14. double Check360 ( double angle );
    ' E7 Q" m* d2 V# u" J
  15. //#=============================================================, O+ b6 V) c( {/ o- o" B" m% ?- v
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );- l0 K- w' Z7 D5 h' }. H% I
  17. //#=============================================================
复制代码

% T4 g- |3 u. R; n/ D3 ]4 o以下为部分源代码,用于判断,计算角度等$ C# x/ f$ e' j5 C8 w: r
  1. int  EQ_is_equal (double s, double t)
    ) D) F' p: M  |; f$ d
  2. 6 j' k( {! Y0 G6 L' P6 H7 ^' m/ ^
  3. {
    + ~6 x2 k2 d8 S
  4. # L8 T: T- e: Y8 t2 ~  W
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }( f0 W3 x3 e0 c# C6 i2 k9 l1 t

  6. + Q- l" I+ S5 I% \  m
  7. }) V! J8 v: n$ E" V* B

  8. 0 {8 L6 v1 n8 u# N6 s
  9. /***********************************************************************/
    . [5 N4 H# T8 C/ `8 i) k$ u& r

  10. " X$ d& N8 B# k$ O- i
  11. int  EQ_is_ge (double s, double t)
    2 N! a) }8 R  r/ X/ u

  12. & ^, ~& @- Z  s1 [& M4 p1 o# E
  13. {
    4 s7 p' P5 }$ E, N& g- k. F* d6 ~

  14.   `& l. s# S& b# n* f1 _$ m2 M
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    3 ~! A# @* m5 E

  16. 6 }2 K8 u6 j5 ^* r
  17. }
    , s; S2 p2 _; S

  18. . T! R3 r$ [# i# [4 G
  19. /***********************************************************************/7 r8 j$ H3 P. C( s) G
  20. % v8 \- X  A, ~, h8 C  S: _1 W
  21. int  EQ_is_gt (double s, double t)
    ! K: ]- a2 T' h3 a# w& d

  22. " {$ y0 p" m6 e, S) V
  23. {
    4 a4 C  U& G' b( I

  24. # R: {; T$ o: j& s3 T
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ' k1 S5 |" T* K/ L  ?
  26. , e" Q0 D/ _4 j0 ^
  27. }8 L2 D3 \+ y" T# d6 [: m+ a
  28. 6 r0 ~' s2 s& O5 M4 o  ]
  29. /***********************************************************************/
    & X9 e5 G2 V2 {$ n" l

  30. , ~! c- N9 J. y$ X/ h
  31. int  EQ_is_le (double s, double t)
    4 C/ A8 N" G8 W

  32. - _* k# D3 ?& r# o" i7 K
  33. {
    $ C& @+ N9 k+ b* }! L% r
  34. 3 v7 Q- o; I) J3 R9 h
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    " x* q( ?0 G; V" n
  36. - k5 @3 B2 L5 `0 R1 Y5 ]
  37. }1 V* ]( J  R: T' v6 s
  38. ; l' P$ d6 p0 o2 N
  39. /***********************************************************************/
    9 ?$ N# G: C# D" w$ c% G

  40. ! _  T8 f+ v7 {* v
  41. int  EQ_is_lt (double s, double t)9 |- h: v3 k2 I" _" B
  42. + ^1 t1 D& S% S/ Z% l" u
  43. {+ _/ `( s% D6 x

  44. - G+ ^$ [0 _# [
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }/ q8 J/ `1 f4 @
  46. ! j2 M' ^( n5 f; l& _6 y2 o) R0 p& a
  47. }7 g3 d  J. c1 x% g! v3 |+ g; m
  48. % \3 E$ S3 e* O$ s: g
  49. /***********************************************************************/
    9 ^0 x: s( J; h$ v1 Z

  50. 5 e( V; E; v! v/ R  E. m9 `
  51. int  EQ_is_zero (double s)  r& ^3 R5 J& f# k8 z% f, K

  52. 2 a- a* Q) [$ ]% M) H
  53. {( o; e9 i2 F& l) w
  54. ) o4 ]9 n. V% A3 Z- k( |' @$ E
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }9 l  N/ X- l) \
  56. % n+ k, S, V3 K9 Y! G+ ~# ~
  57. }
    . _( x& Y" E8 k) [' D
  58. . L" q9 h+ D# w% `
  59. //=============================================================. h" L3 X! t  ^
  60. 5 q: I& m4 E6 \& d
  61. double ARCTAN1 (double y, double x )$ C( W9 A- [: f; p, j$ k

  62. / a4 R$ b. A# E+ x$ Z* i
  63. //#=============================================================
    . c: T( z1 @4 O4 v# n

  64. 9 {1 ~9 w% y: _0 r; L" {
  65. {
    5 [0 V7 I% e1 u. l2 C

  66. * N9 ^, S% U) Y* o) G) y4 u
  67.    double ang;& m& {3 e" m! z( j& ]# k
  68. % p) o) _* V+ `$ i. j# ?( e: o
  69.    if (EQ_is_zero(y)) { y=0; }
    " S2 x/ |2 L/ G2 z9 n( \2 n, R5 U0 i
  70. 0 j0 x; d9 p+ C0 U
  71.    if (EQ_is_zero(x)) { x=0; }
    & _0 l* F' S6 N

  72. . I" v" G1 O1 P2 B4 R3 C4 W4 ^! Q
  73.    if (y == 0 && x == 0) { return(0); }4 R5 H+ i/ B! x6 u0 R# u
  74. ' Y& D, \# Y% F7 @+ X
  75.    ang=atan2(y,x);
    1 `% E! q1 x+ U. [6 A

  76. * b& l3 \" j! |: T7 N' d
  77.    if (ang < 0 ) {) e! N7 v$ g  Q2 k1 w
  78. 8 N  e. a" e1 Y  T* J
  79.       return(ang + PI*2);9 n) r* Z1 M( N& J5 X0 e( L
  80. / k* x/ C  }  Q5 T
  81.    }- H( K1 I, G8 Q% q" y

  82. , K* b5 ^9 K: E* M3 E
  83.    return(ang);! a; _& n' W0 S5 C
  84. , X! l0 V9 `5 l
  85. }/ {0 f" w& X5 P9 B" w5 H
  86. - u4 t( R# K5 I' X9 `/ s
  87. //#=============================================================
    , `7 w7 K$ y' b7 V* ]2 Z! _2 ~

  88. ( c# e. \' P: E7 Z
  89. double ARCTAN2 (double y, double x )# W7 M. e4 }, l( m6 g$ E& ]4 A+ u
  90. 0 P8 A9 w+ D2 h% l
  91. //#=============================================================( ~4 K1 U2 O9 A, G! `) T3 J

  92. 3 ^/ ?+ V# q5 Z. T& C1 [
  93. {
    ; i: {! _& D, O3 O- a$ I

  94. 1 g. e, L% `2 N2 N
  95.    double ang;4 _# k1 {0 R1 q
  96. * g1 p5 Y8 o1 @0 e. J5 r$ O
  97.    if (EQ_is_zero(y)) {
    9 c9 }0 u3 ^& R/ n: G

  98. % X# N' }# I3 v$ e) u6 M1 D
  99.       if (x < 0.0) { return (PI); }+ |% C' n4 ~# W# g0 n4 ]$ P
  100. / @) M$ |/ C$ q; Q) e
  101.       return (0.0);
    " z0 n* X* Z  ^
  102. ! W' f' `9 L! _% I. f$ G. i
  103.    }
    " p" s3 [2 b; q# r& }% n
  104. 1 ~0 u5 C+ x0 C. F
  105.    if (EQ_is_zero(x)) {9 P& K3 f1 Z$ x: _- E8 H
  106. . [$ n" O  s0 q) B' o2 X
  107.       if (y < 0.0) { return(PI*1.5); }4 P3 c# ^( h, \! p) B' U
  108. " m& ^+ I# D( V7 A; Y$ r* Y
  109.       return(PI*.5);' }. i3 v1 E1 b8 \9 t, s2 j
  110. 1 B* o' V" `* ^6 D# m1 m) q
  111.    }
    7 z* D% b, U: }4 E: B4 d$ W" F/ d3 d
  112. ( ^; _& r7 h& Q+ v; I9 I. I+ e
  113.    ang=atan(y/x);
    % H' J3 Z0 T+ p

  114. " [: w- r1 D/ o
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    * q. T( |, a) t4 x+ [
  116. 8 Z( a% K+ g* I, J* L3 @
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    9 B1 b4 `% t  e; r9 U5 _( Q" u. c

  118. 8 V. N% M/ V& R4 x
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ; `2 c8 z$ E3 \/ n

  120. 2 s' Z/ ^( j6 ]8 S: @
  121.    return(ang);
    6 x: c" f$ }" @2 y! D( c/ F
  122. + g% Z! q8 A. b' S! E( h& G3 m" H
  123. }
    / U2 u% P# Q0 J+ M/ f/ K; W4 i2 }% y

  124. 7 e# g, h# m5 _3 Y3 W
  125. //#=============================================================% W, R6 H+ w' g

  126. % s7 O0 {: X% N. r0 c4 K( x5 w
  127. double CheckConst ( double angle, double constvar  ), O- z+ i9 j; Q) p7 c/ N
  128. 9 i5 l; b+ j: G! u
  129. //#=============================================================6 J: n, o9 C  a7 c
  130. ; p# E+ }. [2 c4 c* E2 ?
  131. {, p: @+ R5 t* ~
  132. ! J! ^, {9 O6 _* Y" O! ]) q
  133.    while (angle < -constvar) { angle+=constvar ; }) j4 m0 D( n5 k/ V5 @4 g6 `

  134. . v- ~; X1 H, n& s) E' s' c$ Z
  135.    while (angle >= constvar) { angle-=constvar ; }) t; c: K+ n7 A/ A3 s1 F1 I

  136. & z, g/ J' s$ e4 O( B
  137.    return (angle) ;
    / r3 |0 J1 t; ^5 _( k
  138. ) f5 b  e4 h* N2 c8 ^' ]% M$ e* W
  139. }
    * Y/ }& G) `  |# P7 x) I% ^

  140. ; P2 p9 C- c, H1 v
  141. //#=============================================================. X1 h  q& s9 P! k4 `0 J9 |  J. D
  142. ; a- u, r, ?% W5 t1 B  ?, c. c. y  O0 Y
  143. double Check360 ( double angle )$ R* @& R# p: m8 x/ ]- A' h: L

  144. ; w; `# j5 y" f# F3 ]- S
  145. //#=============================================================' {/ L! i  w5 H+ c2 Q* k6 J9 W
  146. & H6 i: ~9 s& X# U7 g
  147. {
    & i* T9 Z7 O6 J! M

  148. 1 y; F8 V; ?5 h
  149.    while (angle < -360.) { angle+=360. ; }
    & V" m# Z9 X0 X  r# N

  150. . F) _6 A/ j  h: v& e+ \8 v' G
  151.    while (angle >= 360.) { angle-=360. ; }* d$ s) T$ k0 y

  152. 6 B/ i0 g/ M8 m  y4 T- Z. ?
  153.    return (angle) ;" n  v/ L: r1 x: S# A/ {% Q4 q

  154. 9 Q, W+ d7 R& M1 z  P( t
  155. }' K; Y7 w; B3 v
  156. 7 S- O8 @$ |  @" T" G) w! B" ^
  157. //#=============================================================
    ) c9 y) k* i, @  c+ c* ~
  158. 3 R3 D* S. _5 b5 n
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    " L8 w- p" |" _+ b
  160. ) |) `& \) |1 |6 R- g" o8 \
  161. //#=============================================================
    & w8 n% \! P8 j5 s1 g$ Y+ E
  162. , {/ I7 _4 J4 E% C8 Z6 n- J7 d
  163. {
    ( C0 {! y6 C  K
  164. 6 X8 F2 N) h- Y/ N9 W/ ^' o
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }7 J. K2 ]3 t- [; u! a/ x
  166. " O2 U- _6 O8 L2 e) k
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }& y+ Y/ h& y. _& V' r& ?

  168. 6 p3 u$ k: T# {- x
  169.    return (angle) ;- p" r. p3 m6 P- @+ I; R; v
  170. ! r* b- [8 H" G& V4 |  m
  171. }
复制代码

4 j3 U/ X) `1 k' H0 z0 H( l& n6 h( N以下为摇篮5轴计算过程代码6 }! d7 U1 v3 w5 {' N; x
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);: O, z3 H% O7 v

  2. 4 @( G' a+ b; Q3 L8 H3 J6 A
  3.          j=0.; B1=0.; B0=0.;
    ( v- l( e2 z  h/ N0 n" Q

  4. 2 Z4 S6 Q. B; W7 m9 P+ \* s
  5.           if (EQ_is_ge(i,0.)) {, x! T; k3 b9 W$ |* T! A7 v  w: |
  6. , _; h) m2 ^8 Q" [" `6 ]
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }2 H( s  d* K' u! C( g/ X

  8. 3 i" E: R6 C8 R) }
  9.           }
    / h: a* Y0 x8 G# p( M) y7 B+ @
  10. 6 `: w, `9 G9 g& ~) a2 g
  11.           if (EQ_is_lt(i,0.)) {
    # I+ {# m2 Y0 C# j& ~; H7 k7 ?

  12. " L* o4 [9 r$ v) C
  13.              if (EQ_is_lt(k,0.)) {
    - i$ `6 q  }3 ?

  14. - R3 y* M% x; W0 V0 {! G* W" j9 R# y2 }
  15.                 B0=atan(i/k); B1=B0+PI ;* J9 h2 M3 f( l5 D  P6 m

  16. # Z9 s  {) z& V* d( o* U
  17.              } else {
    ( W" l  j3 X) L. S
  18. / U: M! S$ T( b3 C- ]3 A
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    / t) `. U4 C& b/ w

  20. 2 m4 }7 D$ r8 I
  21.               B1=2.*PI+B0 ;" W) J  z  D$ y, A

  22. ! l8 g, M9 e! M3 U" ?5 w! t& B
  23.              }1 t4 z* H  \: |

  24. # f# c( o4 ~$ X& V8 `  N; Q/ }! w- Q
  25.           }. H! o' Z% f# V0 |7 z
  26. . ~) V1 @, B$ e
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;5 V4 q+ Z, d8 f7 _
  28. ' z) V: F0 }. ?9 p9 z
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    / k# h, k! u5 M7 P" G
  30. ' E; P- r, j( M9 q' T
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;" A8 _! ]! f) x# @5 j; ~
  32. " y5 S, P8 `9 i- N, d! `+ B
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

' C) t- x$ Y& A* `' R1 u4 N通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。3 h% u; J! j# R, x" h# \1 X; f0 G

3 S, y2 d% o& }3 ]. n( M 640.png
7 ]/ T  K( g% x3 f0 M( y* p( A' D测试结果:; Z5 }/ i/ p; X! k$ l
6420.png
9 P% A- c8 M: j, n  z# |, S8 ]/ J- p) L" z7 k- m
反向测试结果 6410.png
/ z7 d5 t6 v5 N6 F

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

170

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-11 00:34 , Processed in 0.493247 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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