找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13910|回复: 3

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

[复制链接]

434

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    - O! R1 D  M5 v0 k8 b
  2. int  EQ_is_ge (double s, double t);
    ; \$ Z  m7 j& X, W
  3. int  EQ_is_gt (double s, double t);
    0 s! A) b4 m, `5 |. y; i2 M
  4. int  EQ_is_le (double s, double t);
    : z9 Z: \8 w$ X! a6 c1 F5 F( c$ a1 m
  5. int  EQ_is_lt (double s, double t);
    9 Q$ n) h# l" E" u
  6. int  EQ_is_zero (double s);
    * C4 z% z! n" z; p1 b4 P
  7. //=============================================================
    2 d0 {  A5 M8 V8 e# R
  8. double ARCTAN1 (double y, double x );' c0 V( f+ }" h" K/ j
  9. //#=============================================================
    - q% {/ z& X! }0 V8 P
  10. double ARCTAN2 (double y, double x );4 g9 j0 i* ^( h  ]- ?2 o
  11. //#=============================================================( U  n9 L: _3 D2 V9 y
  12. double CheckConst ( double angle, double constvar  );; Y, {6 U9 O5 H
  13. //#=============================================================6 i$ i+ v; |& W" ]7 D4 c3 ]
  14. double Check360 ( double angle );' b) X9 q' _1 G$ E6 D; h8 F
  15. //#=============================================================0 e8 V1 N( M3 j* |1 h: c* T: o
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
      _4 q1 {: ~& `( ~0 _% t
  17. //#=============================================================
复制代码

1 i5 ~( Y9 h# f, D2 L* v& [! J6 M, y. B以下为部分源代码,用于判断,计算角度等
" K: S& N% Y: T
  1. int  EQ_is_equal (double s, double t)
    , ?9 g8 n' K- A$ G

  2. % `- L3 I7 F1 N& _+ `
  3. {
    5 J1 Q0 j  f6 T: ?

  4. - S1 y: u8 j0 u
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }( z4 \" J0 [* A8 [+ E
  6. " R6 P. ^0 G  h7 w# Y6 l
  7. }
      _  C& E4 \$ l: M6 i

  8. " C2 l8 N7 T& n% M
  9. /***********************************************************************/- Z0 P2 f; R3 o8 E) w  K9 ^

  10. ) u- Y0 F5 U( |6 a, F$ t
  11. int  EQ_is_ge (double s, double t)
      C) p% T4 _7 }4 R+ [

  12. 2 {2 {- l! P) ?2 l
  13. {
    2 M, }) R5 @! J( P. N5 ^
  14. ; @4 P# z5 g6 ]4 ~: Q/ U
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }" Q' n9 r& }3 _) {

  16. ! }; `5 i+ o/ m4 B. I+ Y: X
  17. }0 z5 n& ~; O* S& n1 U6 N

  18. 9 R1 z; j# x8 F  R7 o
  19. /***********************************************************************/
    ! f/ h9 s* J$ N, P0 W! F' Z

  20. , ]9 H/ g7 }5 C8 @/ j2 g& _" U: C/ E
  21. int  EQ_is_gt (double s, double t)
    . A: ]$ B1 E/ K: u+ _8 F1 S9 n  ?
  22. * ]: B) [% g( F1 Z# C
  23. {
    6 Y' |$ b6 J! }0 u5 e/ s+ q8 P# |
  24. - @8 Z4 |: c/ C" _! ]# L7 T
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    3 Y' }- x; [5 G7 Y7 B" E
  26. $ a. b9 z' A0 q& i$ a0 c
  27. }
    7 j% ^3 L3 B; G" b

  28. $ \: k4 a7 N2 X' }
  29. /***********************************************************************/
      e2 J, O. h* x! Y# b

  30. / T2 X8 L0 @" Y- n" K
  31. int  EQ_is_le (double s, double t); W& x0 j+ s7 A1 o0 @
  32. + s9 R# l  u2 _* l% a. @
  33. {
    6 ^4 o) w" g. U0 W) d

  34. 2 i  J* q4 ^' |! u# `- e6 n* e
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ; a+ _% w& Y# o
  36. ' h- N- z  M) k
  37. }
    3 |5 n8 x' Z# N3 M' C4 l

  38. ) h' w' ~- Q! H* a/ c+ p  B# m
  39. /***********************************************************************/8 r" ~$ h$ C: A" P0 C/ [

  40. 5 T! ?4 I8 m6 r; j; r1 f
  41. int  EQ_is_lt (double s, double t)
    9 q4 ]  D% E! M) w

  42. & Z4 D& F9 S& J
  43. {
    % u3 T  Z  S' _1 u

  44. 2 y/ Y& P% Z/ e% ]
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ) v! X( s7 P3 B

  46. 4 Z0 B8 [  B5 S) I) u8 e: k
  47. }
    1 I/ O" ^' R0 F; S

  48. : g4 o: G* ]8 g8 |: k
  49. /***********************************************************************/
    * f5 M$ O7 Z* K2 j5 l$ ~1 i; k7 d

  50. ( G! b: @" u1 a$ L  C! k0 B
  51. int  EQ_is_zero (double s)) {, W4 k2 _( D' ^9 ~1 {0 {
  52. + a0 u, v$ c; |# Y  L% q
  53. {  L' g! r: l; Q2 j4 ~1 x- H

  54. " b( x$ x& o1 P) m, V, W2 `
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    : m8 q! w8 b5 H1 m1 j, W+ Z: ?

  56. 4 d. _! T; b3 a. b8 u5 m: i
  57. }
    $ D  a- [3 ~  \9 c9 p& X/ C. W

  58. ; j. @" \) W& [
  59. //=============================================================2 \2 @6 x# i1 u+ }# {  ?9 J
  60. ) x3 j3 p  Y! {
  61. double ARCTAN1 (double y, double x )9 p0 v/ ]. X0 {9 W

  62. + S, C7 I. y# t1 o( G, J
  63. //#=============================================================
    4 [0 `2 n& k0 F+ \
  64. 2 w& j" h9 y  @6 a" _$ q, @
  65. {9 l' A; ]. u0 F) L. w
  66. 1 y4 L- h0 Y* ?+ Z9 p2 T+ C
  67.    double ang;; q+ D, U2 k/ e" C$ d& M
  68. 4 G# O( g/ Z. _5 o: u& z
  69.    if (EQ_is_zero(y)) { y=0; }3 @/ g" Y) w* b. ], i" h
  70. 7 L# ^) O- i/ ~+ ~4 n
  71.    if (EQ_is_zero(x)) { x=0; }
    4 D! O; X6 p4 t& k

  72. : c. D& K$ b9 C: g! v; Z1 |! {# F/ h
  73.    if (y == 0 && x == 0) { return(0); }- V/ d( d& l9 d; ]5 C2 j( \

  74. : P! [0 F; _! d4 s
  75.    ang=atan2(y,x);( l  L8 @3 C) j1 ?

  76. + x3 d$ K! n. X/ C8 v
  77.    if (ang < 0 ) {
    8 z5 f8 A- V5 V! W0 U4 o; ~- ~
  78. # r9 x  @0 n* ?$ M6 U0 n& p  m
  79.       return(ang + PI*2);
    $ J) k% p0 g% D& n! j' X
  80. ) M: B9 m6 D: H1 k. E
  81.    }& [' o& N8 M* o# e
  82. 9 `: j" \% p6 i
  83.    return(ang);! m$ C: i4 c& K$ }( o& L
  84. 9 o% B& w" i# U& j' e5 L6 w
  85. }
    0 K# Y5 w' @$ [+ J0 ^. C

  86. * ^9 o- ?9 L% A) L% m: |5 y0 p' z
  87. //#=============================================================
    ) L' A) E% _  i
  88. 4 O1 A9 {7 p1 o2 H# t8 F8 x
  89. double ARCTAN2 (double y, double x ). ^7 f- L! e" @
  90. 5 Q4 e1 t% M4 L' P2 r+ }
  91. //#=============================================================, b1 t  K/ _8 Q  G2 w: F/ h

  92.   ?6 z2 A8 {5 G4 I9 m, b2 Z4 D
  93. {
    ) a" P+ E/ D1 j; Y0 h* l4 n
  94. ) b* v0 G$ q: ^; C
  95.    double ang;  `( x( n& @% f1 ?  T" j

  96. / R4 d9 o1 J, r0 T
  97.    if (EQ_is_zero(y)) {
    " G& O& `: D+ q. o  K

  98. % |3 y4 J& a9 P8 w! u4 B& R
  99.       if (x < 0.0) { return (PI); }* B3 j2 V  Y5 T
  100. 9 f4 g3 \  l1 i
  101.       return (0.0);
    9 }- E3 b  n  T3 b7 J6 b- b
  102. 1 M5 e- p6 \5 z
  103.    }
    - O7 [. D! }7 P  G( P, ?& i- }( y; Q
  104. # C  B4 s$ m8 ?5 B
  105.    if (EQ_is_zero(x)) {3 ~1 m" H3 N7 z+ k$ m( ]
  106. 8 E0 x* ~6 r) Y9 B, D9 F. ?+ [8 S
  107.       if (y < 0.0) { return(PI*1.5); }. l# h5 l, @. }# g9 M: }* p

  108. : Q$ k* _" F9 f6 h0 w
  109.       return(PI*.5);
    " N, r1 N$ c5 h8 G) d8 Q% W0 ^

  110. ! P: T7 ?# ]5 l! y  ]4 n
  111.    }
    # u1 d1 M4 w8 }) d! w

  112. ; X$ y6 ?1 H! c/ R
  113.    ang=atan(y/x);
    6 }5 b  h, v7 K; O3 h
  114. 3 }- h, m9 @/ t' ]0 I8 x3 d3 |
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ' I: [5 O) @6 ^, c3 m+ b" g
  116. & J, a! P1 `) C. g  ?
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }1 V3 H+ ~/ C9 s

  118. . Q, |4 y) r/ a; p1 S/ U/ e
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    , k% b( K; b8 w' O5 _

  120. 0 }3 p$ ^) y" l9 r' V% e
  121.    return(ang);8 J! k( q$ @7 Z" L- h- i9 {; t5 I% I1 |

  122. & p4 h4 C6 q# S  ?' \7 {
  123. }
    ; a/ _% a! }1 S1 [6 d- k
  124. 6 g. i8 g% h) s- t: s
  125. //#=============================================================
    " y- z  V- _. l7 e1 e5 r' l8 \

  126. : E1 n2 N8 }: B
  127. double CheckConst ( double angle, double constvar  )
    $ J3 z0 M6 Q6 r

  128. - G, c6 h% x5 R3 s6 h
  129. //#=============================================================
    ) a& k6 |, u, r

  130. 5 |1 F' g2 p& H" a- t! F  [
  131. {
    ! I+ S* g8 \& ]8 z6 W: r: G

  132. 0 ]- n% W( L6 X8 K& }# H
  133.    while (angle < -constvar) { angle+=constvar ; }8 Y+ q' g/ `- Y( j  p- x7 Y  G2 l

  134. 8 B2 g6 M7 ~, a; c  ]- \8 a, \
  135.    while (angle >= constvar) { angle-=constvar ; }
    ( _( H, z6 l" J; V

  136. % W7 o4 j! z- R8 p8 c1 R" ^
  137.    return (angle) ;
    $ D: F$ ~& c* c; o0 W6 B
  138. / h  p4 j' B. H, t  C
  139. }
    2 |" a" Y& `- w

  140. ! g- v8 s5 l9 L7 H7 {
  141. //#=============================================================9 C' w" T4 E7 P4 P: T' ~

  142. 0 B/ u- \$ f6 x
  143. double Check360 ( double angle )
    3 o( M4 Q6 ?# o( @7 m( J* n

  144. ! i# ]# a/ h+ o- L& L- j
  145. //#=============================================================
    ! N/ e5 U  T* H5 I$ W

  146.   h- R4 e3 q" V
  147. {* f1 T: k  c; j2 a( n$ A
  148. " D9 v. W5 J1 H; m8 Y. Z
  149.    while (angle < -360.) { angle+=360. ; }" E; u1 W0 `: w* u. p

  150. 0 c, p) s, J/ l1 e4 a6 y
  151.    while (angle >= 360.) { angle-=360. ; }
    9 ~  B! ^8 D  ?

  152. 7 E  u3 o# a* b2 O. G
  153.    return (angle) ;/ J, m2 o7 }& S* W; m; A

  154. + c( F8 @2 n3 {/ X9 ?7 y2 ]$ m
  155. }
    9 \6 {0 p6 ^+ _" Y5 E! ?/ i
  156. . ]" A1 [5 g. d  B% [* z6 x& [# H
  157. //#=============================================================
    / O+ c) L# C0 @. u2 E5 m$ j
  158. 9 x; r6 U1 `' r
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
      I1 M, T" `/ j* \
  160. 4 ?2 d% V' h3 Y# Q3 Y. u. |+ U& ]7 N
  161. //#=============================================================3 K9 z& l% a/ Y& I5 J) n) m

  162. 5 t! {) {5 w9 E4 _' [
  163. {- o  M2 L- V# U& e! J: v

  164. 3 F% K* f5 Y' p: i
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    3 K1 A0 ~9 f, O: {8 \: R
  166.   \& y/ n. d$ J: |
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ) L$ r- C+ D! ^( x& ?7 Y

  168. ' F, {; }! u( M+ H2 _
  169.    return (angle) ;
    & W. G+ P7 A2 e0 \. v- p( a
  170. 8 `4 C  g+ q; l! M
  171. }
复制代码
$ q( g7 Q/ ]" k9 {0 ?# z  Z
以下为摇篮5轴计算过程代码' d9 k; N# I4 ]& F2 \( b) x
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);; T( C( U( H# Y" t% X2 n- o
  2. 7 O* O/ L4 `' o
  3.          j=0.; B1=0.; B0=0.;/ B4 @9 Q/ O, G' o

  4. . Y* w* G: h- N4 s$ V" L5 _, A
  5.           if (EQ_is_ge(i,0.)) {
    ' i' v. g/ T( L& z
  6. . h9 y! R# S$ L7 O. |% x
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }9 s* {. _5 B& O7 D7 e. A9 Z, c

  8. 3 a% u5 K, f# F- ^+ H7 W9 [+ N! O1 L
  9.           }
    0 B; d) N* X# y8 e% S' [

  10. 6 l& g9 y$ P# ~$ h  h- v' k3 R9 N) c
  11.           if (EQ_is_lt(i,0.)) {
    ( ]1 L  H2 |- b0 T8 x
  12. . |, d8 j: v- [( O  y
  13.              if (EQ_is_lt(k,0.)) {# S& L' L; r' A7 l% c9 Q

  14. . v. s- g. N+ Q+ k/ B
  15.                 B0=atan(i/k); B1=B0+PI ;
    ) H* Y% B# }& a% A; X6 z/ _% ]

  16. 0 C& E, d) v7 [7 b2 k
  17.              } else {/ K) U7 @3 D1 j" t7 ?8 c
  18. % o* @2 h" U- I7 z4 O7 C3 t1 e- I
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }, O5 x% P2 P/ g0 Y8 \4 R

  20. / W$ ^6 M1 I) t+ Y) ^9 m# Q
  21.               B1=2.*PI+B0 ;
    % P$ Q* U3 `$ z. e7 {

  22. 0 Z/ n1 D8 C% A4 |0 Z& G! M2 Y
  23.              }4 V5 V, a4 N) {" u3 h( v8 b
  24. 7 W( w: Z: d0 u* _3 a
  25.           }
    : H4 i6 x: p& y$ n

  26. ( r6 h! h- P# Z$ e: L2 {0 S, v9 C
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;% C+ I$ Q3 B1 f' O, V" P# S; S$ G

  28. & b" u, _: c5 \
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));9 z6 W8 k3 x, @6 P
  30. 4 P+ N; s0 _/ z$ D0 ]
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    , v$ ~6 P; i8 Y5 Z* s. g2 b
  32. 6 G: W2 F( I! k* ~5 r1 T6 n
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

/ Q) }$ E* g% _通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。: i! S1 H) |5 p. w$ w5 ~- l

  h8 ^% P5 j% u% N1 X, s4 b$ M8 q 640.png / y# V9 |8 N$ Y& U- V# h9 j6 o' ?
测试结果:1 ~$ h1 t& c1 w  k: k. f# ]
6420.png
9 X1 ]+ C4 O' B" y  C! z  x, |7 x9 K; @0 h# ^
反向测试结果 6410.png
' v& G4 ^4 v; R- C( K

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

378

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-11-8 01:29 , Processed in 0.250036 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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