找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11250|回复: 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);& a; _" Y! G8 q  z) d2 ?4 N
  2. int  EQ_is_ge (double s, double t);3 k7 ~, z( h' r# R1 q
  3. int  EQ_is_gt (double s, double t);
    2 a; ^6 \2 T5 v! m- W6 @
  4. int  EQ_is_le (double s, double t);; P% v' y& Y" f" y
  5. int  EQ_is_lt (double s, double t);- w* R' ^" J, l3 r. W, ]% A
  6. int  EQ_is_zero (double s);3 p& R+ O( |$ N' A
  7. //=============================================================
    * N, h2 ?! K1 }+ P! u9 E
  8. double ARCTAN1 (double y, double x );
    ) ]4 x  v6 F* ~3 I, m8 m
  9. //#=============================================================+ r( b, G; c4 j
  10. double ARCTAN2 (double y, double x );  y* L9 g  R& W) c9 u
  11. //#=============================================================+ d+ L) a+ ^% B' m: t
  12. double CheckConst ( double angle, double constvar  );
    ! z  I5 t; T: A9 u; S0 W  ^6 P
  13. //#=============================================================/ H9 p( |5 W" r
  14. double Check360 ( double angle );3 X% @+ q: h  s1 g
  15. //#=============================================================
    ) ]. @' S6 t' G3 H3 x
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ( d, x0 k1 w) t/ b  S- o2 O" i# s* e/ N  ]
  17. //#=============================================================
复制代码

: y' R0 z' X% u# m% N以下为部分源代码,用于判断,计算角度等& K% x$ ~9 ^: S, |6 S! D
  1. int  EQ_is_equal (double s, double t)
    , K  s( g9 W/ z+ G: M
  2. ' t% c/ Z: v" A' f# M
  3. {
    8 X, Z8 g, b0 W$ j! C: k2 W: l

  4.   G1 F8 w2 Z/ o& U
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    3 _3 m3 K0 m3 f* ~
  6. 5 q! W  Z" B! }: f% a) Q
  7. }
    $ H- |" h1 s  r  t4 L) X

  8. ; Q; R6 N7 S. s7 k7 P5 U2 ?* \
  9. /***********************************************************************/
    ' x+ S% C: o5 }2 [7 x5 t8 t! H

  10.   G* \; v# B; a* h- W& i: o
  11. int  EQ_is_ge (double s, double t)0 \7 j. a7 a6 Z

  12. * e: H; D, l  ?3 k; @
  13. {
    4 M9 k4 O- z& f+ Y( `3 T" f

  14. $ \, ?' H& B: D) \
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    # J& j4 O  f) q( w! u1 ~

  16. 3 C4 p; X% _* c$ R- h) U" E) P
  17. }# l# w9 P& D- H" W6 u

  18. " O5 Z& F6 _" P/ u+ v5 V6 t- ^
  19. /***********************************************************************/5 E9 C6 ?6 U& a" O- R
  20. 4 Y. v0 X8 [7 D; s# K% ^
  21. int  EQ_is_gt (double s, double t)
    3 O3 M4 r1 Y6 L$ {, N5 w

  22. ! _. _7 X  {" f! n/ Q$ U
  23. {
    ' F: B) X5 A) K: h3 C

  24. 1 `+ y& Q9 R: X$ L! w2 g
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }+ `# H  j; I2 X  G
  26. 6 a) [" S1 z5 ?0 w6 Q& G% i, i
  27. }' ]7 \8 u- G" J/ }! n, K, ~6 |4 x

  28. % F) K( q' `: B5 J5 J* e
  29. /***********************************************************************/
    2 U7 s! d* A+ w" l( C* X9 G) ]6 W

  30. 4 k* t  z" J' o9 Q0 y* G+ |7 E" ]1 ^
  31. int  EQ_is_le (double s, double t)+ U% u& p5 n5 [  R2 ]$ z
  32. ) y# o( E# s% q% |( N( ^
  33. {
    ! Y* p9 |1 j7 h
  34. . l9 i/ B: a2 ?/ _; ?
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    / V( o2 s8 C1 M: D% o
  36. % f+ V3 y" A) O" ^5 x) [* f6 P( t
  37. }
    ( r! [+ `0 {+ W1 E% t* `5 X
  38. " X* Z0 p% J0 ?/ e
  39. /***********************************************************************/2 b' v" W# y: T6 J
  40. ) n. N- q& s2 [* g
  41. int  EQ_is_lt (double s, double t)1 f3 m- F" K- r0 j
  42. * c9 X% }0 B7 z2 q1 g2 z: B
  43. {
    9 V5 F' N0 ]: l
  44. # J  A+ h9 P$ ?% B
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    0 R: G' z3 M& f# F) R0 }

  46. - P% A3 G6 _6 w2 i* J- F
  47. }% Y+ d" d. s0 M$ k
  48. 2 F5 g. |1 ]4 h. i$ P( i" j
  49. /***********************************************************************/9 S- c8 m, x  F

  50. 9 E+ h: v) ?6 d" v
  51. int  EQ_is_zero (double s)" i' o! z8 ?/ f3 y

  52. / ]; }9 L3 {' ^$ k% L4 W
  53. {0 N* A2 ~; H! l3 r. ^1 I5 @

  54. . d2 ?& _1 c; U. I7 C! _7 D
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    0 \* f/ m' o4 [; s: V

  56. 3 B5 n5 E, v; [, C, b' Y! A* C
  57. }3 ?+ d- g3 a7 i, Y; `
  58. 0 K4 c0 u: n! q6 z' X
  59. //=============================================================; T0 N* a8 F, l2 n# j* x

  60. 8 r% a3 e& @) @$ Y# c/ {- S
  61. double ARCTAN1 (double y, double x ): c7 R$ g& U- d8 m, r. A9 N
  62. 2 t. [. e' R8 v; n2 x
  63. //#=============================================================
    1 y! @! C" O+ u2 O3 J, @0 q! D: |
  64. " t) {/ e% h3 L" |+ s
  65. {
    . y, x5 v* {. n0 f$ f6 E

  66. , n- F3 f1 E) g+ K: h7 s
  67.    double ang;
    & A) U. V; M, H6 C% U; g) o

  68. , D+ l$ _* i' K
  69.    if (EQ_is_zero(y)) { y=0; }
    % \0 g$ e3 d& b; w1 l
  70. ( R0 P0 j- ~# S- u5 L
  71.    if (EQ_is_zero(x)) { x=0; }
    # D7 v  G4 Q* u. @" S
  72. + r( G5 R6 X, A) o) O. L) D4 }
  73.    if (y == 0 && x == 0) { return(0); }
    * Z# C/ U7 n0 s( U4 _) ^
  74. / a: ?; S/ H: v7 T! c; I! j
  75.    ang=atan2(y,x);
      E) J4 l+ l+ k# I+ O6 {
  76. " Y2 r8 i/ W; {( W% R' F- `
  77.    if (ang < 0 ) {
    / v* o! _$ W5 n1 J8 c0 t+ p( o
  78. * C+ J) X/ U/ {$ l( j
  79.       return(ang + PI*2);% f( I' e7 q4 ?
  80. # b; v$ K/ g* D% g- x3 y" ]
  81.    }4 Y# \( Q- A3 C5 Q9 r' g# p4 X

  82. 4 D) m. d% L' W$ Y
  83.    return(ang);9 g% Q% y0 @3 ], Z1 B; y6 p7 D
  84. ( W" M* k! ~5 J3 X  J. l8 _" h
  85. }$ Q! \) E% y: o* Q, e' l1 m" I

  86. 3 X; H; T$ P3 u; B1 e; t# E9 Z
  87. //#=============================================================1 K$ f$ C, \  }! @, v

  88. 6 l* _" S" `/ h: I- W
  89. double ARCTAN2 (double y, double x )
    ) v! o& k4 \, j' E+ Q6 s

  90. ( `; N, B* S9 Q; q" k6 L; \
  91. //#=============================================================
    , a* V: h1 N; ?3 Z5 m

  92. ; d4 B+ V$ ?, l
  93. {5 H4 s$ f/ [- z  q; N% w) ]( q: O( z
  94. 9 P) K- l4 t1 S! S$ R1 |' n3 ?
  95.    double ang;+ o% m! c" ^/ P8 V9 d
  96. 9 a, ]- ^1 b. B' y' s+ T) O
  97.    if (EQ_is_zero(y)) {2 `+ H) j' K  R4 e

  98. 1 Y) t4 T4 ^/ D4 J7 E
  99.       if (x < 0.0) { return (PI); }
    . h+ Q2 R7 {5 V9 X' o
  100. " h5 N) k# i) D2 s2 E* a
  101.       return (0.0);: C9 ?( i9 G+ r8 M
  102. 6 L- y: h8 d  ^( r
  103.    }
    . `0 F% t1 G3 `8 b7 v7 E4 j' _
  104. % O8 V5 @9 f; R
  105.    if (EQ_is_zero(x)) {
    7 P8 {1 h7 S) I; A& F

  106. ! J) t2 r, p0 j& ?2 K- x% [0 b
  107.       if (y < 0.0) { return(PI*1.5); }
    - L* ^9 O/ |6 `* A! r2 h# u. v4 M5 H

  108. 9 `8 S5 A& D$ Q, w, I4 f- F
  109.       return(PI*.5);  ~4 N4 N0 b5 O# Z
  110. , u2 R* O5 b4 @9 k0 Q6 K- I5 ^% E% I
  111.    }
    & j- E: s, q/ Z

  112. 0 }' U; g/ k6 K# N$ X, ?4 A
  113.    ang=atan(y/x);; U* ^. j# O$ v4 o6 a; k

  114. . ?$ H/ D+ `. L: N  R  _$ A8 Y
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }) v" Z8 l: ^" q% B& `3 \6 r8 P

  116. 7 Q  n9 q7 X- C4 G) y! B
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }. I! W; O! h  ~/ }7 T9 |; l, X5 N0 ?- M
  118. 6 n8 q8 J3 @; N6 D  T/ r
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    * }. j, {8 V  Z! B1 a" W2 V% j
  120. - \' }/ g" J0 V& y+ z3 k5 X
  121.    return(ang);8 X0 O5 g- }8 `
  122. ' O% l* c1 V: R  {
  123. }# s" \0 u/ d$ i/ a. ?4 l
  124. $ ]( W1 i- S4 j* A& s; F
  125. //#=============================================================/ q. k) Z( [, M* n9 F

  126. 1 Y2 K5 O* e5 `6 I3 T9 O
  127. double CheckConst ( double angle, double constvar  )
    8 C( A' x) J% I2 e$ [

  128. ( F9 k: Q7 W& K2 J! y
  129. //#=============================================================
    5 t* j6 f3 {. E# _

  130. ! }) z& R5 e# o
  131. {1 L8 h7 e0 Y4 T3 k: x# Y, \
  132. " |- c: [) j' P8 q) Q2 p; _- b
  133.    while (angle < -constvar) { angle+=constvar ; }
    3 w# v+ T( u9 o6 i7 H* k
  134. - J) b9 ~: l; e9 v9 j0 U2 _0 B
  135.    while (angle >= constvar) { angle-=constvar ; }6 Y+ [" E4 r4 L

  136. 7 y1 @& ?0 [2 G& N; F% }8 ~
  137.    return (angle) ;. C9 }- @2 J* i5 F, r% B

  138. 5 y0 i1 ?$ e8 D
  139. }6 L% R6 F1 U4 R, d4 J( R: U
  140. ' U6 _/ q5 s3 H6 ^( Z/ S
  141. //#=============================================================
    8 n4 s: ~. c% M% c
  142. ' L6 K0 b- g, t. O
  143. double Check360 ( double angle )0 a: e; s/ P* E6 k/ j- R8 R% r
  144. 9 W6 Y: X' I$ s* Y
  145. //#=============================================================. ~) @6 h5 K2 Z# W7 [9 k& k  D1 ?

  146. : H3 {+ R9 c% k/ n5 w( a% {$ l* x
  147. {5 i" I" G9 n/ Y5 v/ l) D. R$ V' Y
  148. ; m! ?+ {/ k: y2 J5 S$ l3 ~' G
  149.    while (angle < -360.) { angle+=360. ; }: O2 b1 w* i: y

  150. ' {6 y8 b% V; I
  151.    while (angle >= 360.) { angle-=360. ; }
    9 @( Z& ^4 K1 D. D8 ^; }* n
  152. ! _' B% k8 S+ B
  153.    return (angle) ;
    . k4 T% X" p+ L( C9 W

  154. ) E7 j5 D! u3 e7 S: c: B3 j
  155. }
    4 b  J3 Y# ?/ |' Z

  156. ! X  g: ~$ d- y& \
  157. //#=============================================================( d' c! i" v/ `3 p, v! I
  158. % g6 P: j" ~0 q" j' h$ v
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )" f' p, U/ g+ T1 z6 P4 T5 `" f
  160. ) e6 l+ x  F( m# P
  161. //#=============================================================) U0 K( h. `  R
  162. ) |4 d0 I4 ^" r. p+ P4 `0 \
  163. {
    # d' _6 g2 F4 u7 m* H: I, Z

  164. 0 O0 ?+ \, ?+ u1 R6 D4 V# `
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }7 Z6 F/ [+ W3 E
  166. & O; C% @8 b0 B9 U1 V* r) x7 I) b
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }6 ^5 U- F" c  T6 B& {8 G' J& v3 m

  168. $ d4 k, h& q- X. l! {7 M. z0 S
  169.    return (angle) ;, s% f4 K4 m/ u, ]' ^- E* P! b- Z

  170. : n7 |- X! e9 f2 A  n. c
  171. }
复制代码

4 A* g7 g0 a7 j2 a0 h9 `以下为摇篮5轴计算过程代码
" g# ^9 D9 T# L
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);8 f6 P7 J. f/ [

  2. 1 \+ [. K& ?4 r* m# S' i
  3.          j=0.; B1=0.; B0=0.;. ^" {) ~4 D9 H# d

  4. ; o8 n# l6 N8 j! P) V" \
  5.           if (EQ_is_ge(i,0.)) {" e4 h6 v; `% o4 L* O
  6. ; D  V6 k8 e( V$ ^5 x
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }1 e8 V) }* \3 L% S( i. V2 N

  8. 2 E# ~( ~+ P, w6 e2 @
  9.           }
    + Y. F2 [# N6 T- j/ K8 g8 M( h( @

  10. , A8 a6 `" e$ \9 k8 I6 Z' f
  11.           if (EQ_is_lt(i,0.)) {
    " o9 r- W9 c" O* ^
  12. ; z3 `2 M! e' D, B& K& W
  13.              if (EQ_is_lt(k,0.)) {* q% C& E8 z$ @( K" S0 |1 R
  14. 9 [5 x, y) b+ v8 K3 B
  15.                 B0=atan(i/k); B1=B0+PI ;
    & O+ G6 v8 L. f2 D1 ^3 E4 `

  16. 3 N, ?4 x; W5 A8 _  [' {
  17.              } else {  ]9 b& @2 M7 H' |- Y  T

  18. ' S4 R( ~' w- X
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    9 g/ m6 y+ L  g1 q$ s3 @

  20. % O; R! W; P$ t. a8 K0 v) Y
  21.               B1=2.*PI+B0 ;1 M7 R9 Q6 E8 H4 V0 w/ r
  22. 6 P* Y* l, R4 [/ @$ h* p0 {
  23.              }
    7 n9 A+ k& ^& ~

  24.   E- K% M  E8 J! B+ E
  25.           }+ A/ m& h; C# \7 w1 V
  26. % B. a$ C/ n4 Q  W) S4 v
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ) `) m& S6 x( U5 T. A4 G- H
  28. ( `  w! I9 C" X1 @
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    1 w+ u$ Z  g8 ^' K" X  w

  30. ) k% j& k: ^! b
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    * l$ [! Y0 }& e' N- c

  32. / L3 K3 v' M5 h4 _
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
/ }9 q/ J$ W: F2 G
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。0 |. f# v  _7 E) F. r
9 i% W2 r2 }, y5 U
640.png 2 S& p5 o" l2 }, P# w" {* c
测试结果:# _) B6 @: g( ^, s- ]% `
6420.png 6 o' [; R, _2 ?/ y5 L; ]  L5 c
# ]: g9 Q' c5 h# D% g8 f, ]9 o
反向测试结果 6410.png
+ D* g/ Q2 H) B. q+ 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 04:30 , Processed in 0.171526 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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