找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8040|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);& e8 u- g" z: i. l6 x! a. [
  2. int  EQ_is_ge (double s, double t);
    % K7 I$ _' q6 ?) q$ A; ]; M) n- c
  3. int  EQ_is_gt (double s, double t);. f# g# p% r6 x6 O$ G# `4 e4 n
  4. int  EQ_is_le (double s, double t);- [8 r2 {+ L+ o" ?
  5. int  EQ_is_lt (double s, double t);
    : o- e% _/ d5 Z
  6. int  EQ_is_zero (double s);9 Z. e$ E/ n, x; j) Y
  7. //=============================================================
    1 H8 _! J/ b% [, M& [  p
  8. double ARCTAN1 (double y, double x );
    : m5 M: c' u* B
  9. //#=============================================================) M( |. e9 M) i1 V- Y% z
  10. double ARCTAN2 (double y, double x );5 u+ J) I8 U7 [4 x" h
  11. //#=============================================================: C) r6 Y9 v, T( w+ [1 c- m+ t
  12. double CheckConst ( double angle, double constvar  );8 Z$ D& l8 C7 L
  13. //#=============================================================- H# f8 F! e5 E
  14. double Check360 ( double angle );( i2 g" J" x. g: e
  15. //#=============================================================
    0 t2 u: r, }. g' T! T
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ) L: U0 @+ Z5 X: f' w( Z
  17. //#=============================================================
复制代码

. x/ z4 w; I) z# E% y1 e3 G以下为部分源代码,用于判断,计算角度等
; b5 a& [9 U6 y/ {6 ^. K# @3 N  r
  1. int  EQ_is_equal (double s, double t)1 v7 l% H# m2 @6 h
  2. & m5 P2 R9 c9 s9 n; F9 S: T3 _( l2 W
  3. {
    : Z+ J2 N, Q+ u

  4. 7 f2 H' }0 v8 N& U0 W7 l2 R
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    6 W7 ?0 H, t* |6 t0 b' \. H

  6. % O. n0 y; o" p+ z  g% U
  7. }
    6 ^% t; M# f3 M7 C0 M' i* I( S4 V
  8. 7 F& A2 `; ^7 u) `1 E0 p" W
  9. /***********************************************************************/( a9 d* m. a) D( Z4 D
  10. 5 u  q  z# _( F$ B
  11. int  EQ_is_ge (double s, double t)/ a2 G; E! v- A' w% J
  12. 9 A3 o% ]  P, O  d+ O
  13. {. c7 \: V: j% R1 ^$ `

  14. 2 e( d1 c5 U8 S; u+ n6 M& u4 O
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }: i2 G+ c7 |. i% S( e# N) u8 `

  16. 5 Z3 X, s+ H# U) }, t
  17. }$ N( I3 U" G8 V, ?# x2 I

  18. % k. t: f/ m' k% G% p
  19. /***********************************************************************/
    8 }" f& Q( |* i: W8 M  T& B$ M
  20. # m2 v2 {& h0 i9 \5 Q
  21. int  EQ_is_gt (double s, double t)4 b. x, ^4 [( p

  22. 4 F* L2 d% Z/ m1 n: T9 }
  23. {# H  V0 |+ c+ x& U: ^
  24. ! U4 J, Q2 V% w0 _( {
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }( k7 E( S+ [* f; b6 `& M8 ^/ r
  26. 4 k$ S8 p: J! B- U& p6 ~# l
  27. }* f0 |: a; y! M9 L( Z; Y

  28.   W+ V2 i8 q) n
  29. /***********************************************************************/
    , [" O8 N4 _  m/ p1 T
  30. $ h) H8 F/ D$ k9 q
  31. int  EQ_is_le (double s, double t)2 P- l( \7 Z9 F$ J
  32. ( f7 v, o8 N4 z2 n, M
  33. {
    / w' }% N: L; Q: H7 H! W
  34. + S3 G- A% i. ]$ b5 d# p
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }) ^4 z4 l: h3 E- y& g
  36. " k% \. l8 x# _0 A/ z4 |( ]% L
  37. }
    6 A& I8 K* u! |8 D( C9 W

  38. 1 U: u9 S% F' N+ I: S8 F* R
  39. /***********************************************************************/
    " l, P$ i6 L" M
  40. ; k7 ]! r3 w5 Q8 i' ~, m, @: x
  41. int  EQ_is_lt (double s, double t)
    4 f: m, P5 T7 k3 ?& z  `3 m% g9 A5 j! E

  42. # G( @1 |% k7 ~. ?4 \) a
  43. {
      F5 ^  g8 c4 m; h
  44. 7 N, `2 R9 i0 J# e; x' v5 ^
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    $ V5 G# U% y; X" s5 p
  46. % H$ |3 o8 L. _
  47. }
    2 Y( c+ n- Y3 I

  48. 9 T2 {4 Q9 j$ r7 r5 [* [
  49. /***********************************************************************/$ e7 V. T- D' V# \' j

  50. 3 r6 P. Y: C! e
  51. int  EQ_is_zero (double s)
    - `+ Y/ _) o( [* U9 h: w; {% X5 g

  52. 9 f9 _5 j9 F; l( v1 e
  53. {' `- X6 t2 {$ @/ X" P9 l
  54. ; N) u- e, W& z
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ; [, Q. V( |* z+ x6 M3 }1 F
  56. + `+ o3 o% C6 Y0 Q( J7 M- H
  57. }
    * {5 ?/ f$ L5 F/ ]! K' ]2 l! A" Z
  58. ! K+ ^7 \$ r0 q/ x2 R' Q
  59. //=============================================================" U: D& S' A0 l4 k* ^
  60. ! d# `5 C, Z5 y6 X# W
  61. double ARCTAN1 (double y, double x )
    1 i! N% H6 e8 A, f9 [9 h* L
  62. 5 d0 u. k3 A# c( E* X
  63. //#=============================================================/ \9 ^# \) J6 m

  64. " I: K7 m: C. F7 \% L7 a
  65. {% t$ l" @. j3 G% U  g# V/ a
  66. 8 t) P7 n* F" J/ i
  67.    double ang;
    7 `) |7 a1 ~) V5 h6 V
  68. 1 @8 `2 T+ Z& D! n! M" k9 P0 Y
  69.    if (EQ_is_zero(y)) { y=0; }5 ^" Z" b1 K) t- o1 e% E  K
  70. ) g& Y- T% H. F7 b0 B7 ]
  71.    if (EQ_is_zero(x)) { x=0; }
    9 y" K0 L7 D) k# v1 x+ q; M6 O% G

  72. 9 a. _4 a7 \4 |$ G6 r
  73.    if (y == 0 && x == 0) { return(0); }4 K; ]" U% i2 ?& H

  74. " u) U+ a2 ~! t5 ]  f! s
  75.    ang=atan2(y,x);$ j8 Y( ~5 }; ?

  76. * z& Q/ N8 d% w' K9 a6 _" g
  77.    if (ang < 0 ) {9 O3 d7 [( q) w6 v4 H/ u$ E& q
  78. $ c' U6 D4 Z6 ?3 i' ?  ~5 w% _4 F1 D7 [
  79.       return(ang + PI*2);
    ) _4 l: c: S1 F) U4 U8 z' q
  80.   G) x' d2 C0 w+ ]; b: {
  81.    }3 M* x: m7 x, s

  82. ' Z/ Z* U- H6 |. O' H
  83.    return(ang);
    " g, p( _! D0 w  V4 t$ p) g( c/ Q; y
  84. : A2 {# \5 f( O4 ^! d9 y5 F
  85. }; ~' {1 h! o( J2 U9 J2 y

  86. # q7 v  s5 M, [) z7 v
  87. //#=============================================================4 g  H! L9 w8 e2 v$ h1 J
  88. ( G2 X. L# r1 [, N! d: n( ~
  89. double ARCTAN2 (double y, double x )- `# L2 {* J- V, o2 k) F# \
  90. 9 Q/ Q- s% H8 J0 i$ ~! W
  91. //#=============================================================% R" `. o# _7 L5 T8 g' K9 U

  92. / _+ J. J, K* K
  93. {/ d3 _$ c" Q$ r5 S) y" ]8 G: H/ X
  94. $ O7 {5 V5 d' ^/ f# H9 J
  95.    double ang;! D5 Q. x# Q) t& n- \1 s
  96. ( C* T2 o$ F4 ?7 P* ]7 ~
  97.    if (EQ_is_zero(y)) {: @' G2 O* `& b, l; i8 i1 ^0 \+ h3 R: _7 |

  98. 6 U4 N, I. B5 K1 q$ W" y
  99.       if (x < 0.0) { return (PI); }0 h' F6 x2 w! s3 {

  100. 0 r$ z, q( K( f" C0 C
  101.       return (0.0);' ^8 F' i; }' i; `$ B$ E

  102. 4 v0 q4 W, k9 y7 |" N
  103.    }
    ' q1 u  j5 c+ ~' k0 i" A
  104. 4 B  \) c+ e$ c/ W7 ^7 a$ T
  105.    if (EQ_is_zero(x)) {: x  x  h- B7 o; I: {
  106. ; `, C) @. ]2 `# U. {- r' s3 b9 g! z  m
  107.       if (y < 0.0) { return(PI*1.5); }/ x- y* p, J7 I1 ^- T2 j' Y0 R

  108. & Q& E, x% W; V3 f" j
  109.       return(PI*.5);
    5 Q% S& F5 H/ }5 D" Q4 D
  110. , e7 u4 [3 U  g& ]$ a
  111.    }& Y* B# o3 S$ s& ^
  112. 2 @" J- V/ Q1 r$ J  p" r  ^* O
  113.    ang=atan(y/x);
    , U5 Y4 Y( V) h- m+ z
  114. ( B9 b$ `8 Y- A, j$ J# U8 _
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    & z/ s. P8 Z, N  E/ a8 c1 u
  116. ) w- T; @* O, ]+ J, k- W+ \( C
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }2 l6 R0 A* X9 Y5 z* E* e" W

  118. ; X# x" O5 W( k- d, r: h3 a; p
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    8 \$ V6 d* Z; n9 D/ r

  120. 6 H' ~$ `2 x3 Y4 O/ `/ B
  121.    return(ang);  }+ N; L" l: J- M3 N" M7 h. U0 ^! C; Z
  122. * Q- U8 c4 ^2 \3 c# c( r; C
  123. }3 l, @) j' x6 [9 b0 a$ X& `
  124. ) w, Q4 p+ F1 x! `! q$ e
  125. //#=============================================================3 v. P9 ?: D' ]! y
  126. 4 \% n' l9 C9 D
  127. double CheckConst ( double angle, double constvar  )  w% J; m4 f2 |" g/ J7 n$ z/ j: Y& r

  128.   t: Q  q! d& t2 G  g& |/ n& e
  129. //#=============================================================; c! Y& \8 u. r7 z* r

  130. - X  V8 w3 _- E! r' s
  131. {
    2 ^8 v( t( d/ ~/ ~: K( h+ o7 M

  132. ; c9 J  I6 H5 h- `1 `2 O9 c
  133.    while (angle < -constvar) { angle+=constvar ; }
    ' _- F" \; v# L/ _$ r% C

  134. : E  E3 v# I. {# N4 X
  135.    while (angle >= constvar) { angle-=constvar ; }3 p% C  F2 b; J' k( |' z2 i5 F

  136. 9 D6 M9 v: H  j9 P% e
  137.    return (angle) ;
    , F8 ^$ `$ m$ M( {. I5 w7 I( G6 `* \

  138. 6 y" t) V; h9 ^# J7 v3 b' M; n" b
  139. }
    . b- a' ?7 C# Y" P0 k0 D' N

  140.   ]. u2 Q8 ?: w$ b
  141. //#=============================================================1 S0 o) d6 A! G+ X1 Z

  142. ' i4 `) x' B7 a7 \3 w  n
  143. double Check360 ( double angle )
    ! _+ k- Y1 F5 ?3 V" e+ U
  144. 4 j' D1 z1 D+ C" I; T! r& L  L) R
  145. //#=============================================================0 q' C7 ?' Y+ D

  146. ) m! b+ A9 e. {  G
  147. {
    " G0 I( }5 r) ^9 T5 m7 r, V' n7 r& A7 I
  148. ! T9 S, d9 I0 l8 \& y) @
  149.    while (angle < -360.) { angle+=360. ; }
    ( l+ w# U. J: ^- i

  150. ( {0 B2 ?1 |; p+ w" T# ~
  151.    while (angle >= 360.) { angle-=360. ; }
    & V4 V6 k  N' I" m) m5 o

  152. + x; @+ O! I1 l( q0 Y
  153.    return (angle) ;
    3 v' O2 s& f, L1 m2 x

  154. 9 w: h/ v1 L0 e( }2 [2 N
  155. }' ?* K: M- @& P7 [+ x$ G

  156. # E: \7 U* v- Y0 l* H+ z
  157. //#=============================================================6 i* T5 i3 N) ]+ H3 C- c) X

  158. ; ]) |" i" l4 X) B) V) K
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    , C: N& [: ^& ^7 G

  160. 9 l" v# S2 C3 b( y2 I; a
  161. //#=============================================================
    ) T) ]& s; b3 M- N' Q6 P0 T" A
  162. 7 d3 A1 f' Q  ?. `: {6 X
  163. {6 q# H/ d/ _. u6 h: ~9 b% U- }
  164. & v5 h1 y, w- c6 L  _
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    6 y3 e5 s5 g: W( a- S: o  g+ U
  166. : u9 u& {' t4 _! K5 u
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }' ?; \. Q* o" W8 @1 W( @- Q

  168. 3 o2 p' r4 W2 L2 b
  169.    return (angle) ;$ I' j8 G$ {2 F0 q7 N$ T

  170. ! L) X4 p' A% S' O' i& r0 {
  171. }
复制代码
" ?* n, x; Z0 e7 |
以下为摇篮5轴计算过程代码- q2 T$ E9 v. `  n4 @; ~9 |) M& a
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    9 u& X* ?& y4 ^/ `$ Y5 n9 }+ ]
  2. - [3 s4 Y6 I% e+ Y: W$ t+ ^
  3.          j=0.; B1=0.; B0=0.;5 ?: }6 U" v6 `& E8 v! Q" I, b- t

  4. ) }$ m% s6 X8 x" L5 b/ }
  5.           if (EQ_is_ge(i,0.)) {
    / O' @( O3 ^7 @& J1 e! u
  6. + S, d" |5 S! t9 Y1 }0 E' a
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    % v" o; V' Q, n& v6 Z+ x
  8.   R. E0 f) B/ z( k/ m! b) V- H
  9.           }
    8 Z# s9 w7 C) p' G, I  B

  10. + u9 L3 X9 T, A/ p
  11.           if (EQ_is_lt(i,0.)) {
    1 l: h4 e" z# p9 b

  12. 7 O  I# O) ?' x5 l! P3 N6 q+ e( b
  13.              if (EQ_is_lt(k,0.)) {
    " G4 m" I* I# B. w
  14. $ n( d0 ~  O# U/ O$ g) g# j
  15.                 B0=atan(i/k); B1=B0+PI ;
    7 B/ g0 @: f+ \  Z, N& B
  16. ) L5 _. _  G0 c5 k
  17.              } else {: w8 A$ m; B7 S  A

  18. ! j2 p7 s' u7 A% j: l
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }4 m6 Y5 V7 {3 Z& m" e
  20. 0 r! q0 }3 q: g- Y# e
  21.               B1=2.*PI+B0 ;
    / E! v# b0 j) v- H( ]

  22. ) I3 H) ^! U6 [8 b
  23.              }
    6 k' P) z! u+ _
  24. / E9 P! |% s* @5 f& P2 }
  25.           }( P' M+ l4 {. P% r. u
  26. 5 ]1 h: n# K0 B9 e. F+ q5 D" E
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;; O! a2 Y* n0 M0 G6 a

  28. 0 u9 U0 a% R. O. g4 C( R  {: S  [
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));/ _+ N1 o* q# F) l0 N" h

  30. * M7 X# t" B2 a! u
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    6 p% a" W! P) k0 Z6 w

  32. # `. b( m- j, U# K* A
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
0 Q7 t7 Q- z% I; @' M" t
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。" P, _8 f0 E' m* l: \1 X

+ H( O! F0 K7 y* N 640.png ' s. p6 h' d  A5 b8 ~
测试结果:" s" d3 L% Q& C$ v2 p
6420.png
: c$ @5 M+ Y4 o# y, R
$ T. q( C. o( @* c0 R7 P0 f反向测试结果 6410.png
5 y4 K9 Z# ~% y& n" b+ [* E) J, a

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

271

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-22 01:07 , Processed in 0.610565 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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