找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11247|回复: 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);7 V0 t8 |) ]' i( D7 A
  2. int  EQ_is_ge (double s, double t);/ k' ~# v. q! K4 B
  3. int  EQ_is_gt (double s, double t);
      J  Q) R& M/ r
  4. int  EQ_is_le (double s, double t);4 t# ?- L5 P. N: j2 p: M
  5. int  EQ_is_lt (double s, double t);
    & g% a7 U+ s/ {
  6. int  EQ_is_zero (double s);
    / j; t( v" J; l6 I8 Y/ L2 @% v
  7. //=============================================================
    , r/ r: v' c. {
  8. double ARCTAN1 (double y, double x );. @3 u$ d  s+ V+ X1 P# J% e
  9. //#=============================================================3 k+ \8 N: ?7 c9 Z& |
  10. double ARCTAN2 (double y, double x );
    9 m+ j; N$ Q4 n: J' t
  11. //#=============================================================
    % A6 Q7 J% d* M5 k9 u
  12. double CheckConst ( double angle, double constvar  );4 o: x* Q3 s& b0 Z" @
  13. //#=============================================================
    6 E2 Y, E: K$ u* \. v7 k
  14. double Check360 ( double angle );- S' G- B- U. I* Y5 n
  15. //#=============================================================
    7 y1 B) l+ k; K- @
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    , q! z9 ?0 B6 J0 f
  17. //#=============================================================
复制代码

8 X) e) G* I4 f2 v以下为部分源代码,用于判断,计算角度等
" Q6 @, e1 L+ a9 K
  1. int  EQ_is_equal (double s, double t)
    % W( f$ a; ~3 [8 P: f* o

  2. * ~! o4 v/ E% B) [
  3. {2 k/ B3 L" V+ {% t; g$ f
  4. ! b* ~7 D) v( e5 @. g3 s# S
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) {" w5 C, m' ], E9 b

  6. ; V0 Y$ X( ~  B1 [( S  B
  7. }' ?$ q9 `/ h( l& o8 S6 A
  8. ! T0 j/ A! b7 H3 P1 t) z
  9. /***********************************************************************/
    % l+ F7 b$ o  ^3 A9 f" i

  10. & f" Z  m( B  U5 {3 n
  11. int  EQ_is_ge (double s, double t)  P1 j( S  D0 ]0 C) {6 y  r
  12. * g& m# @/ ^8 `' ?  ?
  13. {
    : O" M6 U" ^% A; S" e
  14. : u0 h( v- Y6 }3 b3 D% z2 c$ W
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    # e* S. n+ k; T) F  v0 Z

  16. 7 W8 P/ f8 b6 `: D: |6 X
  17. }2 T3 k* z3 Z. y7 u: l9 Q; L; m

  18. * g7 M: Q& s  j+ g% C+ ^% M9 c7 H
  19. /***********************************************************************/: k% ?8 F: W' t, U. z( b8 o4 y
  20. 4 d" _( I2 @$ D" c# N
  21. int  EQ_is_gt (double s, double t)
    ( v: g* ]+ |! L$ z, `% N/ P7 e

  22. ) [$ @( C; A/ S, P) m
  23. {  O4 m& m8 V# Y1 N2 ?1 o
  24. 0 Z# ]9 }/ P' f: |
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    8 u. t% r, N# q

  26. 8 B' e% t! b4 r8 Q( T
  27. }. _2 a  t: ?' T7 Z4 |; {
  28. / F3 j4 y1 R1 F# K$ }
  29. /***********************************************************************/  d% e% U9 p2 K7 G

  30. 1 h# g3 |( H; D# b
  31. int  EQ_is_le (double s, double t)
    : g' g+ X8 `: `0 P2 |$ j
  32. % I! C% a, X. y4 j" B* ^
  33. {" U4 q; I2 ~+ ^. M% A: B  @

  34. 8 ~: Q# q; ?0 F7 d
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    9 p' W9 P3 ?- V) L3 h) g
  36. 5 H1 b6 F# C( o4 h% i/ B
  37. }
    + J! U# g, ?* x& Z- I5 G7 V
  38. # S7 i1 k* L* q4 `5 ^6 s
  39. /***********************************************************************/
    # }6 j2 ?2 @7 J' J  Q

  40. ; D* d& S5 P0 v5 F5 }# o# ]
  41. int  EQ_is_lt (double s, double t)2 T- N4 v) T& N6 o# G" m

  42. 9 [  y) {; B/ T3 P: _
  43. {
    8 B* J7 L. B) W6 G
  44. % b/ t; o% D6 L# r; q& B+ P: |8 f
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }( X& B) B  v3 N2 w, ~

  46. 5 p: {5 V' {/ ~  S
  47. }
    ( j7 w0 B$ T# N1 {& z/ I' H& X7 Y
  48. # i) l. z0 m  Y2 `# c* L' T# J$ P
  49. /***********************************************************************/2 I4 u( W  r) \! a7 r4 a
  50. 7 x9 [6 }, `/ q$ q  w' n
  51. int  EQ_is_zero (double s)" |/ v$ T1 c# i9 [# t

  52. - h  n, t( Y* P
  53. {: b- Q# i2 a8 c8 ~% l3 ~

  54. * q2 L! U" `( Z2 k0 ^( u9 f
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    & I% S1 T0 o# r$ z# T: K

  56. ; k4 j( g7 q3 U1 F
  57. }
      U$ b" A4 W( b2 a

  58. 0 H) P, Q% v% `
  59. //=============================================================; Q4 U% H6 Z- M

  60. 6 |7 }; ]' ^8 e1 X
  61. double ARCTAN1 (double y, double x )
    ' N0 `. W9 W8 q' |6 I8 B; v
  62. 0 o# u. [9 }/ ]$ y+ I2 ?
  63. //#=============================================================! i9 l! y, r1 O( q5 Z

  64. ! O. C: Z9 g/ a4 C
  65. {
    * |/ R+ B6 v8 u' z

  66. ' \" r5 @; H$ Z7 Q. O$ f$ I( O
  67.    double ang;
    & R5 W, ~6 r+ [" Z
  68. 4 w4 z; j8 x4 `6 l, {% m, I0 ^
  69.    if (EQ_is_zero(y)) { y=0; }
    ( A9 ^( L: S; ~5 F+ r1 H
  70. + x: Q! \: L4 ]' X
  71.    if (EQ_is_zero(x)) { x=0; }
    6 W$ @; J  `- B2 K5 C' r2 S2 H

  72. 0 N" V9 W( r4 m& P6 x
  73.    if (y == 0 && x == 0) { return(0); }$ r$ y, H3 O3 Y" a9 V8 L4 `, {+ R9 V

  74. ) y& F; C$ D+ l+ k8 J; t
  75.    ang=atan2(y,x);
    % A% o' p! Z% x* h5 p
  76. $ m4 b3 N3 h* R: \( }
  77.    if (ang < 0 ) {
    * u5 ?5 z+ A" L3 K8 }5 J
  78. 9 ]6 V5 p: @$ U2 M
  79.       return(ang + PI*2);3 Q% `# Z/ ]& A8 z6 S# t  |

  80. " H3 p7 t6 k  \! s) U
  81.    }
    5 I9 c4 ^/ C0 ]9 Y$ ~

  82. 5 C1 f: \) j$ K  v  c
  83.    return(ang);) H* G) N! X2 X. o0 D7 j1 {% m
  84. $ s2 g8 r, L4 o4 G" C: a) t
  85. }+ M3 J8 i* `& b% [3 _# Q6 v

  86. 9 H0 Q9 v, K9 R9 t6 C! b* a9 w
  87. //#=============================================================2 y' i8 @! q  K# G( M: t2 V8 g
  88. ( x3 l# B/ U4 n' e' P
  89. double ARCTAN2 (double y, double x )
    ; h* T) j( S* ^" a
  90. " s& X5 Y: j7 e$ ^2 Y
  91. //#=============================================================
    ( Y# x4 K2 s% c' ^( e' J
  92. 8 F/ G6 o+ M/ R0 {
  93. {
    , p0 W  m' o" R! n* p6 E

  94. ) {  E: @9 P$ O& R5 s, S, }
  95.    double ang;" c3 x0 N9 g6 U0 d& n4 ~
  96. " O$ N+ y% }2 u6 R; h
  97.    if (EQ_is_zero(y)) {
    $ q* N7 B% U9 D8 C) d5 a
  98. + s( W1 @% l: {8 _5 u1 o
  99.       if (x < 0.0) { return (PI); }4 W7 t) z  C* M9 S

  100. 3 n5 M9 G: v. X( M# e$ f" Y: {
  101.       return (0.0);0 _* ^- X, n* g4 Q; ~
  102. 6 e- t5 g* N* ^5 s
  103.    }% K- ^, Z5 P( w/ G. o8 y5 V' R* J$ n% g
  104. $ W6 X7 e# f" N* Y' B7 I% X
  105.    if (EQ_is_zero(x)) {: |: c( V- R2 Z5 m1 F

  106. / D$ b( X3 i3 J% q& Q
  107.       if (y < 0.0) { return(PI*1.5); }# ]4 v4 M" Q' R5 i1 O
  108. # x4 {: f1 _% K5 [3 B. X- H  b
  109.       return(PI*.5);  l1 i1 _  N3 @

  110. + B; m. s8 r5 \, ]1 R# I
  111.    }8 g; x, _& c$ m! V
  112. / ~0 k3 t: w6 U. i
  113.    ang=atan(y/x);1 l5 w, a. V3 s, f4 G/ B# w1 W3 i
  114. % F+ [& t/ D  n$ ]
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    * s; P+ {" L! r1 a, D1 d

  116. / ], J. J+ Y! T+ c( m# ]
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }& z' t2 y( v: r. e3 V
  118. 6 M3 ]3 u/ R6 i
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }2 j% S* {! K  I7 q- u: [' H$ T  v
  120. 0 M5 _5 {9 a- f, ^
  121.    return(ang);; l& M% \" v; m

  122. 4 F0 f' n& N/ z& [2 H9 Z, `' r2 a
  123. }( K, _6 ^0 R5 n) V) p# Y" d

  124.   Y4 B3 b5 M" m, l( L7 K
  125. //#=============================================================
    1 k7 F% N2 g" ^4 t$ [
  126. 9 c6 V1 ?% D6 j: Q2 `8 f
  127. double CheckConst ( double angle, double constvar  )
    & r$ Q1 D- {$ N) ^* ^/ k5 y  H$ J% |

  128. " T' b. D0 W4 F  o9 \1 N# q5 z
  129. //#=============================================================: |! T) H3 P) F& |5 V
  130. 2 K* j2 s; s9 R, ?' M" w( J8 }
  131. {# r3 F) P% }. m) S9 G0 O( Q0 @6 b! h
  132. - h# p. }: u3 R9 c
  133.    while (angle < -constvar) { angle+=constvar ; }% x8 E6 t3 l) P1 w

  134. & b% i; m( v- G( U4 O; f
  135.    while (angle >= constvar) { angle-=constvar ; }4 T0 Y9 ~: y& f$ s, o
  136.   a3 r2 q9 p5 S
  137.    return (angle) ;- S& F! T/ o4 D- C$ z
  138.   y) a& k+ s3 j! \4 H$ Q5 s
  139. }6 v( a# n8 g& J6 @% g* T# B

  140. % U8 c& Z4 |# @' F6 I* B5 Z0 r
  141. //#=============================================================
    / R! B( _. z9 O* F+ Y4 G& ?- j

  142. % g' R: q0 o( q5 ]1 D
  143. double Check360 ( double angle )  b# y  B: @8 v. Q& o: r( `- v. ~
  144. ) x6 N7 B. ^9 C# {% R' T( L
  145. //#=============================================================
    : a8 X# L: q- j' R

  146. ( `  c& N. D# ~4 M9 X: |" p
  147. {5 O" B5 B9 e7 W' y) C9 m5 ?

  148. 9 o9 s7 W* ~& X. s$ Z. n2 @0 |
  149.    while (angle < -360.) { angle+=360. ; }
    . G1 e$ n& A4 A4 V& j& B! z" I

  150. 1 s2 c. x( [5 |+ D7 E0 \8 c7 i" v2 _" m' T
  151.    while (angle >= 360.) { angle-=360. ; }
    ) T+ w2 l4 f/ ?' g

  152. 6 V9 b; X! }( m3 `
  153.    return (angle) ;' X% E6 y5 x- e/ S
  154.   `! v% U4 P+ ^: x
  155. }7 D/ v* f" J5 z; k& Z1 X8 C

  156. . L, i% ^9 d- k9 ?' s6 {! J; ^( X
  157. //#=============================================================
    6 U7 O) p; v) _( q+ N* p" }
  158. / t+ }8 S( A; }' i3 A6 f
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    . d! T8 X- S: I
  160. 5 o. ]0 k1 h! ~' H0 B
  161. //#=============================================================: I" h1 A- t: K# ~. H

  162. - r5 j' e' L; m; W# I' S' r
  163. {/ c% K& u! e: x, F% q/ k. W

  164. - o8 l! z0 \3 Z1 g- i& ]
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    / j5 s, r, M0 s; X2 L

  166. 9 N- z# n9 F7 m1 t: Z
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    % w8 O$ o% o1 S  {! \0 s* _

  168. . m6 s0 B2 ]; d
  169.    return (angle) ;
    3 L$ S( ?  c2 t# y" N1 O

  170. $ J8 q$ r- W3 \' Y* f5 j
  171. }
复制代码

5 S. m9 S1 P3 u! R- e5 w& p以下为摇篮5轴计算过程代码
) o4 o4 q: D2 H$ a- B/ [/ S
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    2 Y* ~: n: V* ?- w  K/ H

  2. 5 y& B- h) u& q+ }/ K8 B
  3.          j=0.; B1=0.; B0=0.;
    ) B! P5 f/ `7 W& H
  4. 5 _  J" E: I# r8 k! y
  5.           if (EQ_is_ge(i,0.)) {
    2 L; q4 v  Y1 Z! A8 D" l# x

  6. / [) o% c9 `* D5 {6 U* k5 s
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    * k3 d: p: Y  O% U! k4 [
  8. ' j- G, r+ q9 E1 V# s
  9.           }( b/ F/ {: c, _# }7 k5 q) H
  10. / S! G8 Z" `6 ]# U
  11.           if (EQ_is_lt(i,0.)) {+ q+ g4 I4 ]+ b" _

  12. * k" S- P: i. S% K$ s
  13.              if (EQ_is_lt(k,0.)) {
    8 A7 S5 w2 k# Z0 q4 w- L1 }
  14. + A& ?' S1 i1 ?9 \. y
  15.                 B0=atan(i/k); B1=B0+PI ;+ G' z7 E& m& }0 b% t" S7 n6 H
  16. 6 u& @7 R8 Y7 z/ K' v* F
  17.              } else {9 e! \, f6 w$ `* Q$ F5 b
  18. 3 g) [2 K) g+ Z
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }5 S6 {# {7 y+ Q  I
  20. ) Y& F( O& p8 _* s
  21.               B1=2.*PI+B0 ;7 O! }3 l" o! e/ u  Q! [' Z
  22. # M! t' \# h( P# W
  23.              }* c7 K. ~9 @9 q3 S4 m
  24. ) _, Z7 g1 @5 |1 J0 o  a) f, B
  25.           }+ q$ C6 W+ E3 F1 a
  26. & z2 r& |3 }) I3 K* k$ ^
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    . a& U: `- f. E$ j* s  L
  28. 9 d1 n, h% ^$ ?  x: b& O
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));& g: z4 o- O/ t7 _
  30. 0 g- R* ?# S8 P' D5 Q" e) ]) G
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    7 f1 B/ A* g. m, |

  32. , R7 B: ~3 @3 l8 m7 k3 ?
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
6 H. y4 P/ u8 {4 N1 y# z
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
  G0 h9 y7 V7 b; U3 V; G' h
3 `! \8 J" R+ b: J& N$ E" Q 640.png & [  I! u, s$ Z+ ?9 a+ M9 K& k
测试结果:
5 k2 }$ S3 c& H9 x) y  G 6420.png
7 k0 g4 K# k7 t( M0 {9 l
' M  z6 N# }. S+ U反向测试结果 6410.png + f$ S0 X$ L  N. w" A

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:37 , Processed in 0.176374 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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