找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11248|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);( w- [# ~( [4 H5 |
  2. int  EQ_is_ge (double s, double t);
    * c6 w+ G$ H  p" z; k
  3. int  EQ_is_gt (double s, double t);
    5 _/ ]+ m& n1 W( `8 k
  4. int  EQ_is_le (double s, double t);8 M/ \# {2 _$ I, |
  5. int  EQ_is_lt (double s, double t);
    & [4 e1 o" ~$ G# w
  6. int  EQ_is_zero (double s);5 e6 r5 Y- x5 X( L0 \
  7. //=============================================================( v* N1 H; l, J! f
  8. double ARCTAN1 (double y, double x );4 s$ r& O3 `1 L! |5 T
  9. //#=============================================================2 W' q6 X: }% S  u( c& ?
  10. double ARCTAN2 (double y, double x );) o: X+ @" P- a" j
  11. //#=============================================================* T$ l) S1 V& `& r! U9 w- a$ Z, w
  12. double CheckConst ( double angle, double constvar  );) B' a3 l$ w& G  Q2 I
  13. //#=============================================================
    ( ^4 v1 ]$ W! M. |1 I
  14. double Check360 ( double angle );
    , n9 ~+ Y( ?4 h" w# c6 `) P
  15. //#=============================================================
    3 ^; K: ?4 p) a1 m$ X8 b6 e/ `# V
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    / D3 Q2 I3 C' g/ E9 `
  17. //#=============================================================
复制代码

  k' c  Q, O! a6 m! ]以下为部分源代码,用于判断,计算角度等2 ^. |( ?  Q6 f5 x1 N- d" z7 A
  1. int  EQ_is_equal (double s, double t)* g) ^# _* L; d! k6 J$ J
  2. + h% e$ e" K; e5 A
  3. {/ a2 |0 ?! Z: V# a' @
  4. 3 Z) E' Y; |3 i! P6 m+ ~1 u7 N, @
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    # N% f: ?: X/ K5 I& S

  6. $ H8 X0 X) ]$ Z9 L, ]
  7. }
    ) }" m# v7 P, b& H
  8. . O! X% x+ U) A$ l# M# O
  9. /***********************************************************************/0 V1 m. ~9 y; g8 e
  10. 3 U& _: T; j+ _" K: ^
  11. int  EQ_is_ge (double s, double t)
    , V6 k5 }. {; g( k+ a7 V

  12. 0 d* M* j4 V6 n& A% ]; Y" D2 D
  13. {
    2 ~2 v; Z; k* u$ [& ?: y7 r

  14. ; v) @2 j" x( C- U+ U
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }8 B! Z+ J9 i5 {* O- ~( K

  16. $ y5 ~) l0 r4 \8 k
  17. }) J# R. d7 p1 i* @
  18. & W; H& I+ c; @3 A
  19. /***********************************************************************/. Z# s. z6 |& w, j6 s

  20. : e, F4 M3 I! J/ q6 Y
  21. int  EQ_is_gt (double s, double t)
    ) ]! o9 G& |* b

  22. ! `7 i* g# r9 M2 x4 Z0 z+ ?4 e
  23. {
    ( J. }1 S" U1 T

  24. * y8 u' c; y; f; \4 @- @
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }* |; D( d9 Q3 Z! M/ u
  26. . m9 F( z# |" {# q; o. s. S
  27. }! z9 U* S6 j+ [7 l  a
  28. , ~) O0 j% p9 Y0 `7 h( M: N6 i, l1 W
  29. /***********************************************************************/: J7 s$ p% k$ Z! L3 X  m
  30. 7 m) u% Z% D& g0 C) f! \+ A" F
  31. int  EQ_is_le (double s, double t)
      L# s' L( s1 S/ L9 z' C6 J

  32. 8 B9 c) j+ U6 n) q# c  t
  33. {
    ; u8 G% \* ~. v% z0 t$ |& O+ [+ G% p
  34. 7 U) A* m0 ?2 ]7 F. S8 o
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    * ^; k' ?/ I& w9 E' _/ h  y  e

  36. * ?: g- o! P( a4 f
  37. }5 w2 Y' M7 p- T0 f/ G% @) O
  38. ) r. r7 M! u0 u8 j* i; B) c
  39. /***********************************************************************/0 @" Y  h" C+ u7 c7 I/ f7 h+ K3 K
  40. 2 F  Y2 A, ?7 v
  41. int  EQ_is_lt (double s, double t)
    8 L; q  y* v  r" P% A% j

  42. ) H& y0 G* D. i, h' o! Q5 H* F. ?
  43. {$ s- x( w. K9 e+ ]% K' M" b
  44. * p, f9 L2 G/ o/ g
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }0 d( ]( s8 S' t4 o

  46. # ^& Z+ n- F" J* {
  47. }" T% o- y8 W* Z3 Q4 i) h/ N) F

  48. 6 ~% f2 S6 R1 f! j  S
  49. /***********************************************************************/- k3 M3 Z6 \" {1 ^4 H, p% `6 I% _
  50. & `2 A( Y! v) f  e
  51. int  EQ_is_zero (double s)0 v3 X$ y: N; K( @& r) E: a/ b
  52. ; D  G5 G/ M% E
  53. {
    ( |: }  e4 {* \* K7 p
  54. 0 I6 h  S! J9 I: f: V
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }: \' m$ ?" N" ^. y  P/ v1 I) R
  56. 2 Q$ i: e* ^" {$ d
  57. }* R" V5 c' ]% Q& w

  58. 2 W, |& F- S0 _. {* @/ X5 L( [
  59. //=============================================================
    + m% v- X3 w2 M; L& a) u
  60.   |* _  C3 b) n+ j
  61. double ARCTAN1 (double y, double x )
    " m' A* i/ U% E7 D

  62. , B  \0 i5 E# `6 z$ U0 m7 O
  63. //#=============================================================% A" h" W7 G; f7 ^+ g$ ^7 ?' F, ]
  64. 6 K& G0 x7 V* `) ?6 K
  65. {
    + c0 E; ^2 y( r/ b$ d0 M6 F# I

  66. * X; Y: N" t/ O# B, v
  67.    double ang;+ A, ]* }* K4 d8 Y# G; |$ X
  68. & F0 D; Y  _$ Q" K
  69.    if (EQ_is_zero(y)) { y=0; }
    ; `, K' k5 h, }: q/ c- C
  70. , u5 ~6 f8 _; F
  71.    if (EQ_is_zero(x)) { x=0; }' p& s* e5 j; B  y; s

  72. , l( J5 W! ^2 L+ |' b3 J" G
  73.    if (y == 0 && x == 0) { return(0); }
    - g4 A# Y. m: k) l4 Q9 Y  B
  74. % @3 b+ I1 u1 @4 I* W7 B  q
  75.    ang=atan2(y,x);
    & \5 r! t. U6 M, k- m% Z1 _
  76. : A& `- g+ m- R0 F/ Q3 B1 b
  77.    if (ang < 0 ) {
    " T: \/ m7 p% ^* I+ |- t7 L

  78. # J4 x& W7 Z& g
  79.       return(ang + PI*2);0 W% q+ X7 h5 _  I9 v: @6 N
  80. % f) ]& a, v  N4 t) f. p# i
  81.    }
    , t6 \- _3 `: n+ M- Z  R
  82. 5 `& V/ Y* W' S( p2 ]
  83.    return(ang);
    6 [! N2 ]9 L  t. f
  84. 4 I& }1 Z: S3 F( {8 }) ?" g
  85. }# w& Y- Y, e& \( K/ H0 V

  86. 5 ?/ ~3 }' A1 R) ^5 y" z. x' N5 r
  87. //#=============================================================% d0 j  o9 v  }7 ~0 r: Y+ E; [
  88. & R8 K2 T2 S4 k9 C& k5 i2 A; ~
  89. double ARCTAN2 (double y, double x )) s5 d+ Z- l+ z/ Y1 q, j# {7 x

  90. $ d6 L+ r! W- c) `" }% N: H1 c2 i* T
  91. //#=============================================================
    / p. W1 ?3 M& ^# ?5 r" f) h% i

  92. 3 z; C# |! W, Q
  93. {) Y; y$ B) X: }7 m8 |) n

  94. + Q0 X& X1 i' {3 O
  95.    double ang;
    , R: r& g- H' T( t+ O

  96. 4 U4 [( \* b* D$ R. ]
  97.    if (EQ_is_zero(y)) {" b) [7 T# [: `1 I- M  D) u6 b

  98. : x6 _9 I8 s) W" _
  99.       if (x < 0.0) { return (PI); }
    # a" B; B9 s% j# F( O, k) J

  100. 8 O' k4 r5 ~- l
  101.       return (0.0);3 M) |+ T1 Q# k) h
  102. + @" |& @3 }$ {2 [6 T- R  h- I
  103.    }2 z8 p- k2 o6 l* `0 y
  104. ; n, M6 T8 @7 H7 l* }& n
  105.    if (EQ_is_zero(x)) {- y$ A/ U# k  [/ Z* c8 Q

  106. / {1 O2 d3 a% C
  107.       if (y < 0.0) { return(PI*1.5); }
    ) V( k+ Z/ u# B9 M0 b/ T
  108. ( z0 B2 s; U3 h* a, i7 C
  109.       return(PI*.5);
    & X' q+ ]8 R/ Q& z6 V
  110. + L. L' Y+ s' V8 u. t' {8 ~0 ]- H
  111.    }0 M$ R% t! C1 a1 R* B1 B; l8 w

  112. / u# L, c8 K2 T) _; f
  113.    ang=atan(y/x);
      M$ p4 b  @6 y/ q1 W9 m0 Q

  114. % q" b. ]# E* U' ]6 y, c
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }, g8 p, c9 Y1 F2 O8 h

  116. : V" j. `  P( b/ u3 c3 ]9 }9 p
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ! H3 C& b+ V9 e& M! V7 `0 K

  118. ; V% X0 W/ q: O: I
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    8 X- A3 E* g3 O$ f8 d* ?6 l

  120. 5 m5 O( [# P: I7 O
  121.    return(ang);* s" h8 f. C# @2 A0 X2 w9 V! ]! v

  122.   l7 ~' G: b* x6 U+ o/ i- ^$ ?
  123. }$ J* v2 ^4 n9 d3 \! n1 Q, ~# {

  124. . c" o& q$ w3 U6 B3 A
  125. //#=============================================================
    7 p5 t1 u0 u  u! R, d1 U

  126. 0 _" _$ O/ I/ x5 y; ?4 @
  127. double CheckConst ( double angle, double constvar  ); W* d' }- F3 W$ S1 E  p* N+ l+ Y

  128. 6 g( o& ~9 B2 D( y, D3 b( u( \
  129. //#=============================================================
    ! e: x& V: L/ }" R& P. X

  130. , W" [+ T! |8 v. r
  131. {
    7 p9 ]$ o0 l  v% {0 p1 N' S, o, s

  132. ) V% h3 d/ \9 S
  133.    while (angle < -constvar) { angle+=constvar ; }
    * a9 M8 Y$ ~$ W0 R3 q
  134. % G' W3 r, A4 ~: |0 \: j0 k$ V4 c
  135.    while (angle >= constvar) { angle-=constvar ; }
    - T& `0 z8 ^% ?+ ]+ a

  136. ! L( s9 @( \1 X) a. b
  137.    return (angle) ;
    9 m1 H! L6 @8 u) H9 [3 D
  138. 9 X! O/ A2 t2 ~* F: M; y
  139. }
    2 d0 I. v( q0 l8 V6 o8 r

  140. ; W/ U- v( F: d1 E; J8 @) Q# d1 ]
  141. //#=============================================================
    7 ]$ R- B, ~& [- R
  142. 1 W! q) V: f8 P$ v
  143. double Check360 ( double angle )
      Q' Z3 v. p1 V) P2 D! e

  144. ' S6 i1 \6 e# M( u
  145. //#=============================================================
    6 p! ~' L6 _1 P% m& @/ D
  146. 9 l: o1 Q. v" X9 x( }
  147. {* p" e5 }* Y) m$ c0 w' k
  148.   E2 U* E/ Y1 L- U
  149.    while (angle < -360.) { angle+=360. ; }; h( z" e5 o# k7 O
  150. 4 d$ `5 `. L  s" c% h# A! g
  151.    while (angle >= 360.) { angle-=360. ; }# D5 d+ a6 X8 p5 R% n. \/ C

  152. % n  Q# y% H7 ^, ]1 _
  153.    return (angle) ;
    , ?8 `1 L+ \, a* @
  154. ' B, [# B! g% Q2 [, Q6 B$ x
  155. }9 ?6 d! Q  p) O  Z5 f9 R5 a) \
  156. ( g3 a+ m# f5 z. y: x* [
  157. //#=============================================================$ E6 m6 S5 k) Q
  158. 0 X$ y1 v' @" y+ `8 L8 x
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )+ V) a! s! L8 G( r
  160. 1 A) H7 T7 v- O8 W; q$ L! W
  161. //#=============================================================/ ~+ p7 o& V  k* j) o# \; M' L
  162. 9 D: h. x% G, S% ]( Q) b4 w8 U
  163. {
    3 a' K7 f% g! f- A$ Z2 ?% C; Y

  164. 9 Y" Y+ e& H- c# p0 ]4 F
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }: d3 B1 a( `' p, }) O/ }& z8 l7 b
  166. 8 f% b/ K+ a! @* i1 q/ ^. V2 p" N
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }- M  ^7 y6 U! h$ L) w: _0 ^/ ^/ E5 I
  168. 5 K8 [9 k7 O3 r
  169.    return (angle) ;( c- m! U( h( n/ v6 X! L) `- y1 E% @7 T

  170. % }# e8 k% f( s5 [' n% e5 g3 b
  171. }
复制代码

" a1 J' l4 g/ W& @4 T) c( z以下为摇篮5轴计算过程代码; ^$ i* c, D; r$ M
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    + K% n7 O% h8 F* i( t
  2. / ~/ l) y! g. Z$ P
  3.          j=0.; B1=0.; B0=0.;- w& G% p/ o* H5 L$ M! S
  4. 8 A* w, r( A7 T7 z8 Q% E/ c
  5.           if (EQ_is_ge(i,0.)) {) B$ n+ I% q" ^5 f8 r

  6. 6 e. }8 v  M4 a$ O9 E- }- m
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }2 \% E8 V& G( n5 g: q4 ~

  8. ( ~; y4 n' e# X+ L
  9.           }
      H7 |. B5 |% U5 R  d/ q( Z  A# F( e( E
  10. - r5 S& m5 \: r% K
  11.           if (EQ_is_lt(i,0.)) {
    ) z/ n3 v! W3 G* Q& t

  12. / w! Y7 c/ t9 u; ?5 e% g8 ~1 {* q, \
  13.              if (EQ_is_lt(k,0.)) {
    ( j/ x, `3 L, F% k5 S2 I- k$ _3 d

  14. & G8 D+ W! C  K0 |3 C2 y. i' ^
  15.                 B0=atan(i/k); B1=B0+PI ;# _& E9 G& [' w( `/ ~' ^
  16. # B0 t# g% t) t1 J' v
  17.              } else {0 X' w" M7 P' E  i
  18. 1 }; e# P6 R4 k
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    , ?5 l* d; {' }& q2 ~

  20. 7 ^* F* d! A& X! r9 C, ?! G0 U
  21.               B1=2.*PI+B0 ;+ q! Q# m* r! M8 e+ B
  22. % ?' p2 P7 U6 y/ ^2 [
  23.              }
    6 x9 \! U7 H. G- X5 U8 b
  24. " i) r6 X2 t6 v6 c! ~& T
  25.           }
    * |! E1 A+ y+ z: j1 I- h( U
  26. ! L. K, H: y2 D( l8 N% \
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;/ [6 z% @/ X1 W5 I! z
  28. 6 a, ^1 `% e! H
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    $ p6 }- q$ [/ `6 ?

  30. " r. [1 O; L; @' t- Y* A! U
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    - W6 F- F/ }, p% y
  32. 1 ^7 ^  p* l) b4 f6 H5 Y! z
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

4 X. W9 |6 |( e8 b; n; [6 G通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
1 m! j2 Q0 A: p2 F. d+ [# M: F8 N
2 `2 t: J. C" S8 H* r& A! Y. y# s 640.png 2 ?5 A8 e3 D# S$ B& m
测试结果:/ ]( X( t) f, C2 J
6420.png ) Q5 @! i4 k" R' t7 E" }

" H3 L4 K" a( O反向测试结果 6410.png
6 L7 w1 V& R7 A0 k! h% X3 k

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

343

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-9-20 03:39 , Processed in 0.170973 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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