找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11249|回复: 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);2 o$ T; ]. x! D, L: }8 {; c
  2. int  EQ_is_ge (double s, double t);; Q+ g6 f5 x( R1 _: d" @0 d
  3. int  EQ_is_gt (double s, double t);- M5 _! H4 \1 I+ A2 b6 j, q/ [* N
  4. int  EQ_is_le (double s, double t);
    7 Z$ _  B4 Z3 a- Z0 s% a; X# ~
  5. int  EQ_is_lt (double s, double t);
    - l* t: P* }9 K( \+ Q) ~# E: F- k
  6. int  EQ_is_zero (double s);% t; B5 }5 E6 f- w
  7. //=============================================================
    ! \" ~$ b' L1 W% I8 s
  8. double ARCTAN1 (double y, double x );' N; A) h& u5 [& k# c
  9. //#=============================================================
    " P! j4 j$ [& s* @4 b
  10. double ARCTAN2 (double y, double x );
    5 y( B  T5 I0 A2 q' d8 C) V4 `: N: E
  11. //#=============================================================0 m, u2 k, V2 h8 e
  12. double CheckConst ( double angle, double constvar  );7 P: r: J8 `1 ?
  13. //#=============================================================
    0 ^/ p3 t  o2 a( m- @6 p
  14. double Check360 ( double angle );5 Z& o5 j" W: }( t) C
  15. //#=============================================================5 T$ ]) R3 o$ @5 s
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    * w3 G2 d5 [  c3 _" C+ a& q
  17. //#=============================================================
复制代码
; _" \0 k" P+ J& F7 Y/ d
以下为部分源代码,用于判断,计算角度等7 A7 b& S0 E6 G) I! J
  1. int  EQ_is_equal (double s, double t)0 R) }1 c5 O6 t" k% E+ i. Z4 L$ l, w
  2. / |; N( \5 {9 W
  3. {0 A: P* t& l7 q5 E

  4. * A8 q: _3 P! x% [1 {5 H* B; H7 x
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }: z7 W( V3 a9 f# f* p
  6. : L, o+ A8 p2 n
  7. }
    ( |8 y3 @4 r. \# V& P- V! n

  8. . j8 ?% |  e5 o8 R: g' e
  9. /***********************************************************************/# k5 [# V; F& ^8 J4 |# e; h

  10. $ i$ g; l& c% A0 \, [+ o
  11. int  EQ_is_ge (double s, double t)+ z& z0 m0 G- e6 C$ t2 Y
  12. 4 f# V0 B: n0 c( W+ N0 v6 s
  13. {
    7 ?& p) n- O0 v
  14. , y) y+ I) s* [: r+ B3 n& T* C
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }) @( m2 l% u+ s4 H
  16. % t6 o9 i1 ?3 ^4 O' n+ }4 O; p
  17. }
    ! U# E+ ~  W2 ]
  18. 9 n( p. k5 v7 c, k. |6 u" |; ~. V9 Y( g& m
  19. /***********************************************************************/% v0 |+ q0 p" S0 ]9 p# }- e

  20. 5 d# f$ I2 K6 }' K% R; F) z( k, r) Y
  21. int  EQ_is_gt (double s, double t), p. y* x; ]' W( \

  22. 1 K1 |6 j4 w; `: M1 J! a
  23. {
    9 _1 K- O! R& o$ a( k; g2 c8 ]
  24.   t/ h. V4 S1 r+ r& W- x. Z, B2 w
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    9 K# Z: L" A& R% u1 z
  26. / a4 i5 P- g, L
  27. }8 Q/ [+ v7 R, b- [; g

  28. 2 C, U: K! A; N" D% \0 g
  29. /***********************************************************************/
    + m6 n! n: E6 L3 S6 l
  30. . O) b  |: m$ |$ r9 g8 `
  31. int  EQ_is_le (double s, double t)/ b$ D& V8 l$ ?, e+ E- t# f* `
  32. 1 T# V  ]! Q5 T9 Z
  33. {
    6 \$ t3 `/ s* x

  34. . Z9 }" W0 p) L. c/ b- \) j, Q
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ' L" |8 C4 V. c

  36. 7 f! M* @1 S, k+ ?- j6 s6 O: p% h; g
  37. }' h6 S+ W( B/ V0 J" X  X
  38. & J! L$ c3 [! A+ P  Q% T$ T
  39. /***********************************************************************/3 F" f! k7 Y8 F/ K' }5 E4 y  f
  40. $ ]$ v5 }% I1 x8 Z3 {9 x% p# k
  41. int  EQ_is_lt (double s, double t)
    4 R. _& p8 `/ c# ]" h. y
  42. ' C8 q6 ^) }. t. v) m
  43. {% e: t9 }; u" t8 `" s

  44. ( O4 J$ E1 t7 I$ r7 N! N& }
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    . k# h+ F' p0 B9 K
  46. ' Q6 A1 U1 V6 s, F
  47. }
    4 ^! b' p. D7 \

  48. # D, _3 [' B4 @% X( p$ u
  49. /***********************************************************************/
    8 `" g- ^4 f* `, ?% r4 K
  50. - U1 o# I0 [/ `, s4 @9 `" d6 b
  51. int  EQ_is_zero (double s)  k' t; A" O# h9 f0 ^; P- [

  52. 1 L; H% y$ p8 v( b- A
  53. {
    # [6 ~. W# z# N8 e: Q# j
  54. 1 S# k: D1 {1 |
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 B+ w+ z, S- O# u6 L' G. l( y

  56. ) L- x+ {. ?7 W; \' y6 L& s, f% y$ M; ]' a
  57. }4 ~; G' R- g: D, T  S* s  Y, c! o

  58. 0 V/ H( n% p" C2 }* a5 s% p+ S# I
  59. //=============================================================8 x7 n; |9 x7 i# P' [2 _" X- o

  60. , Q: g' l! N- M3 B: k/ Y
  61. double ARCTAN1 (double y, double x )
    2 w" \, E! b' Y6 p2 u8 D( f) A* r

  62. 9 G3 R, S/ r8 k* X* C( _
  63. //#=============================================================
    6 C& G  }) q) O/ n% c- L

  64. & M* r& a5 G. o' Z8 F! }
  65. {
    ' x$ N% K' b8 z) D: M. L* S" T8 Z
  66. 8 q, _& F, c  n6 G, V! Y1 Q
  67.    double ang;
    7 w- f2 f% ^2 H

  68. 4 B+ l4 U  `- |- v+ `/ _" k
  69.    if (EQ_is_zero(y)) { y=0; }+ i; G' G. N1 c/ s$ |% l' Y5 h$ G( ?

  70. 5 I+ Y# r) O% Z$ @
  71.    if (EQ_is_zero(x)) { x=0; }9 A, G7 f9 c7 l
  72. ' l, m' D- |& I# W8 D2 b
  73.    if (y == 0 && x == 0) { return(0); }
    + C( a4 h& T* C/ I8 s6 ]

  74. - {  E* V; a* G" h1 m. F9 z
  75.    ang=atan2(y,x);
    " }2 _" J+ |% Z) l$ m4 ~: m2 p+ U

  76. / M/ K4 K( w" z
  77.    if (ang < 0 ) {1 |" {8 w2 C2 z, c- I$ G& d
  78. 2 I+ C9 Q; h& R1 ]! `) p
  79.       return(ang + PI*2);1 o  t) C& \' ~8 B
  80. ) i  J% V; v7 X$ @+ }1 r
  81.    }
    ) v7 f9 Z6 `' X* _9 @0 G

  82. 7 p% f) r$ |' ^3 y3 T
  83.    return(ang);6 i- j, O5 J2 H, Y6 Q
  84. , k* W: x4 U9 t& |. f) d
  85. }+ q5 b+ z0 _2 ]1 ]) H
  86. 5 k8 K! b! c9 m: W
  87. //#=============================================================/ H* j0 I; H' S( n7 @/ S% j

  88. * T, p$ h2 V0 u& {4 l
  89. double ARCTAN2 (double y, double x )( ~! y! K3 j( u# m2 D( p* M  x

  90. 0 I$ L7 x. n0 u! H5 c  ?# X' X" U
  91. //#=============================================================( d$ {7 s; C8 y% L: E: u
  92. . r* r1 \! \$ @1 q
  93. {
    ' l9 S# l8 [) e2 L" Q
  94. 0 N8 V- e4 X7 X* V% B; h0 n
  95.    double ang;
    4 e% N: U7 ?) w" Q4 ~

  96. ( r5 ^1 N& x; T2 t! [9 b1 |
  97.    if (EQ_is_zero(y)) {
    1 {7 ?) f3 K" B$ j

  98. 6 j1 Y1 v0 t. o( n+ {4 z
  99.       if (x < 0.0) { return (PI); }
    4 F  }) H" L; Q: g# w- ?
  100. ! L2 {6 k2 _) ]$ `
  101.       return (0.0);
    / C! u! w* u& |
  102. " C, h* G( Q2 y, _/ Q) I, j' k
  103.    }7 l% h* S  ?$ O0 p2 r

  104. ( `7 H8 E( R# T$ W- M" N
  105.    if (EQ_is_zero(x)) {8 c* ?- q2 F& H; D% z
  106. ' {" n, R& ^' W# v; X
  107.       if (y < 0.0) { return(PI*1.5); }# ]- e- r- J" e0 s' R( j
  108. * O0 x' k+ G8 {% \# Q, E9 A
  109.       return(PI*.5);7 i, U& Z0 }+ T- _  _
  110. : m3 Y; h: X6 I; `' A( e8 J/ }
  111.    }8 B2 O. y# |6 z+ B2 B2 X! m6 r
  112. ) C& k1 Y8 K) ?5 c& {
  113.    ang=atan(y/x);" @5 @3 [; L6 e% C- g
  114. - E: g; Y' `3 J8 N) }+ j
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ' o+ C# K* K1 f! u# M1 R
  116. 3 T- _- C7 D- E/ V* h
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    . a6 C  }1 N" G$ q5 d4 W4 @+ s
  118. 6 l& {4 `% D3 t$ o. v4 Q
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ' E; {3 r8 g2 r& A/ ?9 D/ {

  120. 0 M" r! y  D# S
  121.    return(ang);+ h, F$ ]. G, q) {4 r6 w4 A$ L
  122. / P0 j! z& D( _; e  b
  123. }5 S) n5 }3 ?- u/ I9 h3 c- }
  124. ' n1 W$ C/ F# M" N, ?: r4 H
  125. //#=============================================================0 g/ K4 v8 i' B8 N8 t
  126. % V6 c" i9 c; s' o
  127. double CheckConst ( double angle, double constvar  )5 B4 E! d. m9 k6 H
  128. 0 O* t# T. {( }  R6 |
  129. //#=============================================================( O4 I2 N4 O$ A  M& s

  130. + _, J0 e9 V- e* L6 F0 X' `
  131. {
    5 B: J) I- u/ N$ O; }7 E+ U7 W" c
  132. . t8 ^8 ], q0 [8 o/ ~" m. c1 z' m
  133.    while (angle < -constvar) { angle+=constvar ; }: }: b4 G, O  ]% F& N/ V

  134. $ k: y1 n6 D9 X, ?$ [
  135.    while (angle >= constvar) { angle-=constvar ; }
    2 x! c7 M( ]0 r1 j+ A: p& ~5 I

  136. 7 v/ x5 K% e( {/ d) E" ^
  137.    return (angle) ;) @" B9 `/ }6 X4 e
  138. - g# X! P; d' q( w
  139. }
    ( ?  m( Z. D" m5 N4 b

  140. ! E8 m: u7 S( n8 \
  141. //#=============================================================! B( A2 h0 _1 E2 R1 a) ]" i

  142. " h' s. k2 f: Y' z" z% {6 D
  143. double Check360 ( double angle ), l# T1 u9 r; ~9 P! x2 I" {; t

  144. 0 j$ `+ u+ q0 Y4 F, o8 t7 V1 I
  145. //#=============================================================
    : K$ e1 s- ?  E2 P' y( d4 ?& @- W# V

  146. 0 B) H+ J$ |& G) M; ?8 E
  147. {6 L# U. h9 l  _- f6 G$ z) d
  148. # H9 A3 n! O( g- M9 f
  149.    while (angle < -360.) { angle+=360. ; }: S- ?; T. t' a. V1 H

  150. ) I) C& j5 }  E/ d9 Z5 o8 D
  151.    while (angle >= 360.) { angle-=360. ; }8 x2 _! `1 r) `4 p- Y- n6 h

  152. # h& T/ f$ j+ O$ r' \
  153.    return (angle) ;0 B; E( E6 O8 i! m

  154. % m( _2 e$ s1 `' x1 B
  155. }4 p4 F# N0 m- ?  w0 a) \

  156. 1 x0 M" i9 U8 b; C! K0 x
  157. //#=============================================================7 C+ t1 ]' P8 [( l% G' l! c

  158. $ |6 z) ~. M8 `
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )  b3 ]$ z( A$ O1 x# r/ ?

  160. ' Z! z% G* G' U: _2 Q! B
  161. //#=============================================================
    ' \+ L4 L4 S/ G0 ~0 [0 R! e9 p

  162. # l- @% p! s: O# S% h9 E' u/ _
  163. {, x1 b( o5 l4 O1 L$ c( i( [
  164. 5 C, t3 T0 P8 V4 v" l7 {
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }# A* P/ ^% g9 a( y& r
  166. / L. Y# x; k5 O( m- Z9 o
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }; Q  n* f% K4 F* J2 `
  168. % K- }) m5 m. Q& B% C
  169.    return (angle) ;- E. E. V4 L% Q3 P  H3 |# a

  170. 9 o+ I$ V( \2 Z9 s3 y- H) j8 d
  171. }
复制代码

% r, u% d7 {# n以下为摇篮5轴计算过程代码
' ?$ u# [3 h) U9 I; b$ L* s
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    % F0 e( J5 I; C, c6 m& D
  2. 0 _1 m2 o9 C" l: ]2 Q+ _
  3.          j=0.; B1=0.; B0=0.;
    3 x, p" J9 h; F- A% }4 `/ T

  4. & z* g+ c" p  p, a
  5.           if (EQ_is_ge(i,0.)) {
    & O6 z: G7 n. @2 H$ t
  6. 8 w% V2 ?, A0 {4 b6 W* S) g$ t
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }4 ~  F' g; @9 w( T1 {' K; T

  8. 1 I3 h/ {, P- R7 E) _5 K" s
  9.           }5 ^9 s4 L/ E  r0 D7 Q

  10. % M! L; C2 p7 c$ D
  11.           if (EQ_is_lt(i,0.)) {* r/ O( N4 V' E: B4 x4 ~
  12. 1 \% s0 d& ~5 O$ \
  13.              if (EQ_is_lt(k,0.)) {
    & Q/ s4 g! }/ c: k$ q1 O, J& E
  14. 9 L( H# W0 t' ]: y$ t
  15.                 B0=atan(i/k); B1=B0+PI ;, Y; f- B$ }% d$ Q2 q3 [4 ], L: V8 ~
  16.   Z& m# j: `9 D6 k* R  N; s
  17.              } else {% h" M9 w% ]9 x  w/ N$ _! A
  18. - T6 h3 X- R6 ?4 X
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    - L( Y& g9 y9 T2 Q$ i' q% L

  20. ( o7 Q( v! @% Q6 J  H) p
  21.               B1=2.*PI+B0 ;
    & Q9 d0 W3 B1 T( i% v
  22.   ?" F$ l- s! ~* W5 C
  23.              }& }1 b& F# a3 O+ o4 _% s
  24. 0 ?% Z5 d/ o0 f5 K, h" f# p
  25.           }3 Z, [1 ?6 z0 L, G8 E
  26. ( z& B7 Q" ~9 k5 y3 l, A
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;4 N2 y" s$ z8 E% L

  28. . a6 b1 w+ f# _3 C
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));9 Y& r' F5 ^- [4 M2 l0 Q' _

  30.   H) S7 C' ?" a7 [+ v
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    3 Z" p% i& b( C2 a4 H

  32. 4 c. h+ y+ k+ }. v' v
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
4 Y; m! y* b% `% s/ x
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
! m7 Y" G+ u2 w; \" D) K1 |# \/ }  H
640.png # c6 D. [: J$ d8 R+ K9 B% h& e7 ^
测试结果:
4 p; s7 L# M" I+ G' K: Y 6420.png 2 I4 [1 G' k2 P- N4 m8 L
- ~2 B+ V$ A/ w5 M: ~! S% ]+ F9 Q
反向测试结果 6410.png
3 m# T3 E) M0 v" k9 V

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:29 , Processed in 0.173512 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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