找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6003|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    : f. U1 A/ J4 C) [; h% L4 Z2 w  Y
  2. int  EQ_is_ge (double s, double t);
    / B) K- {& ^! A
  3. int  EQ_is_gt (double s, double t);8 L! w; Z1 J1 O( f
  4. int  EQ_is_le (double s, double t);% s- `& _" V6 k0 b6 D
  5. int  EQ_is_lt (double s, double t);
    - i- |) N8 f; ?2 Z& |( Q; L
  6. int  EQ_is_zero (double s);+ w% _. d1 z6 E/ z
  7. //=============================================================, c: Z( p; J$ c" M& a+ w
  8. double ARCTAN1 (double y, double x );. F/ |0 R/ r1 p  B3 i( c
  9. //#=============================================================$ @- W/ O  Y. [7 M
  10. double ARCTAN2 (double y, double x );
    5 X/ h. v* z7 C
  11. //#=============================================================
    9 [8 z/ D" G% e  k9 o
  12. double CheckConst ( double angle, double constvar  );
    $ B8 N/ {5 w/ G- T- C1 Z
  13. //#=============================================================3 h  h4 e; `4 x- U$ S
  14. double Check360 ( double angle );
    . v+ t8 w+ T/ [# x2 u) P
  15. //#=============================================================
    1 P/ d% z5 E/ ?
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ) [7 R* Q9 G6 L; T% d
  17. //#=============================================================
复制代码

5 C6 B* {0 ]- Z" A" a以下为部分源代码,用于判断,计算角度等2 t5 |% W3 |7 `
  1. int  EQ_is_equal (double s, double t)" D' d  C# `$ T% W0 u9 l
  2. 6 j7 u  h7 Z6 M6 p
  3. {7 F' ]2 G. d4 `$ _

  4. + w) n9 e. c$ j! g. g* [
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    # m  o: J* |5 R2 o

  6. * Q# S1 c$ d) T* ?7 O% z% a3 ?: h
  7. }* t  f) m8 H2 Q2 F+ J2 h: w
  8. 9 T% k7 V7 |4 _% s/ A9 E+ D
  9. /***********************************************************************/7 Y& }5 z; L, e3 h  [

  10. 4 R9 Q- E* [3 p8 `
  11. int  EQ_is_ge (double s, double t)" F# [; o; N3 ]+ f
  12. + Z8 m; b/ R$ B1 J3 A; R
  13. {
    + N6 S' t0 I8 E
  14. 8 O* `7 z3 z% h( T
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    . j6 j2 _2 o: {2 Z. u2 m
  16. , R1 O( K$ g. k  f- V! E
  17. }
    7 R+ B  w- x# u4 k6 \$ \

  18. % I2 C6 \5 h: G3 t: Y) G6 P" p
  19. /***********************************************************************/0 _( s  u5 t0 ~$ q( I
  20. 5 s5 o6 v7 A; i2 ~! o
  21. int  EQ_is_gt (double s, double t)" @. j3 D! f9 B9 C/ B3 m" I: F

  22. : V  \* G- y" D( {  Y1 l
  23. {% y9 ^- {/ R! K. h% _- S
  24. 7 v, V; E# ?% W% m4 N9 A6 v
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }" E7 |% ~7 r! o' Y
  26. 0 Q' ^4 t7 u) K+ D
  27. }
    4 r5 s) ?% t1 `( i- e6 ^4 W( _

  28. 9 N0 ]) u. {5 X$ Q1 O5 }
  29. /***********************************************************************/
    4 e% T. V! e; V0 t6 T' r
  30. : w% `( D6 Q% z. Q
  31. int  EQ_is_le (double s, double t)
    2 g0 P3 G9 q/ @* r/ t

  32. " I9 {# V$ t/ h: E/ e- C2 \- V
  33. {
    8 D3 h: _, B- u8 W1 Z

  34. 1 S  X0 F8 _2 j1 ?7 G& ^' _" g
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ! j/ m1 W7 ]3 S; u5 \* r
  36. * X9 N# f% ~$ Q# K/ ~
  37. }
    0 ]9 I. E! G2 w. Q( X
  38. 9 X( K& V+ y2 t) f+ w
  39. /***********************************************************************/
    4 S. C' k& S  |2 V  x$ M

  40. : P; L, e! n! o4 _/ I3 D5 C
  41. int  EQ_is_lt (double s, double t)
    ; O* `7 O0 }" S) k' X9 t

  42. ) z; u) I: M7 G
  43. {! n' k1 Z- y$ W& @3 b% s

  44. - F0 f6 F3 L! c9 h
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }- ]' E+ `6 @9 q1 b% H1 v* w. N4 I
  46. , G$ \4 U3 o3 w" q
  47. }4 a: D& N5 h) v3 m' ]6 _
  48. * u1 ]; o4 ]$ N
  49. /***********************************************************************/. V( A+ ]8 I2 b  c  m; \
  50. 8 H4 Q+ T2 z$ P2 g3 e& X" B2 `3 O
  51. int  EQ_is_zero (double s)
    2 k3 F# y* h8 `6 v  Q
  52. * l3 d* R" c- G2 h8 r
  53. {' [7 v8 W$ H+ E+ S& C! m* {" q# ]6 C

  54. / D3 u# J0 ^9 h& J" z
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    - c* v2 L; ]* j# E) h! I' s1 A( H3 L

  56. ) h: Y- ~* m, B5 P6 C
  57. }3 w# S: H0 [& j

  58. : @0 S  X6 D! I" g+ O
  59. //=============================================================; e) U# ^! }- ^, `4 N& Y5 y1 W

  60. ' r* n1 f/ b  z) i
  61. double ARCTAN1 (double y, double x )
    ! E9 m- T5 U# y. n

  62. # f2 m/ W  L" j* N
  63. //#=============================================================
    1 q+ \# s6 ]5 F- t+ r
  64. # z1 c0 ?, G! {+ v& P0 q. Z
  65. {
    , ~- N0 L0 @7 t* h. C1 u9 e

  66. , A9 O" [* x/ \8 U
  67.    double ang;
    ! y* S$ p2 w$ t+ R4 B

  68. ) {& A. M) i& U# S
  69.    if (EQ_is_zero(y)) { y=0; }+ V) s7 v+ x6 k; X# k9 w2 B2 B! w
  70. 0 E& \. Y, }4 ?2 L1 U
  71.    if (EQ_is_zero(x)) { x=0; }
    5 ]6 M  U$ a* J! ]
  72. 3 l0 P6 e) K; I. q6 x. o- x
  73.    if (y == 0 && x == 0) { return(0); }- ~* z; E' C/ v- M4 U) n% R, O

  74. & Z, \% X8 g1 @% T
  75.    ang=atan2(y,x);
    / F% V3 |+ s  e( I1 Z2 l1 a

  76.   ]8 A$ R7 A- I
  77.    if (ang < 0 ) {
    3 N& k% C! J; m( N! T1 b+ M8 _+ \

  78. . d' N" M/ u2 X3 o
  79.       return(ang + PI*2);
    7 F. [9 Q( r' |) q3 f" s8 _) @
  80. 8 i9 w7 t- ?6 {' s2 [
  81.    }
    + J1 w: v. F& I  |4 h

  82. & x+ D: y$ C8 F" x# I0 Q
  83.    return(ang);. }- k9 y+ N. h5 E6 a  ?) ]  x9 R

  84. / [' Q# A- L/ \" P
  85. }
    : V2 B9 |5 V$ U
  86. + M% H% I4 \4 I/ O- M6 H  q
  87. //#=============================================================$ |, w2 h9 r; t, C; g' ^/ r
  88. ! p3 q* H! }- D  ~2 r
  89. double ARCTAN2 (double y, double x )/ w2 p0 D; v  q& b; q7 e
  90. ; W+ t# V9 n/ U1 Z
  91. //#=============================================================7 T, {. P) B7 y! R" M0 x! j
  92. - N, P" d3 ~- m* |
  93. {
    ! _* H; V5 z. M5 M& J

  94. 2 m3 ?2 @4 `  _6 C1 }5 x
  95.    double ang;
    & G& D8 I9 j3 t. K' s* X4 m

  96. / o3 ?0 I! Y3 T% B( [& ^
  97.    if (EQ_is_zero(y)) {
    3 ~5 y* t( O1 b! W9 H

  98. + [# Y1 l, t* R2 d
  99.       if (x < 0.0) { return (PI); }
    # m1 z7 t' S/ a! Z  s4 R* d
  100. 8 h2 E& P8 I. U- P
  101.       return (0.0);
    , r' a  B1 {/ z7 Q& w( i- X+ l
  102. # E  ?, ?4 j; P/ F. F  J7 ~8 W
  103.    }2 l0 H# S3 I; r6 d$ e
  104.   J3 V7 l8 i# O6 E$ W6 o" h" K
  105.    if (EQ_is_zero(x)) {
    2 y1 t7 J' r. g% J8 d' D5 g9 n& x6 U
  106. % a2 W. e( }/ A2 d
  107.       if (y < 0.0) { return(PI*1.5); }  s1 J# L+ @# w, j
  108. 2 A# c8 ~  ~3 b5 g0 c
  109.       return(PI*.5);) i& g5 F" l0 B6 n

  110. : f! |- Q$ m8 J* S) |, y
  111.    }
    4 v  C2 S' @3 l! Y  z
  112. 6 f6 w6 X; I$ Y6 k& y7 B
  113.    ang=atan(y/x);
    6 z0 A2 C2 _/ k, A6 f2 m

  114. ; |3 t# h  J- _0 U* a: M3 ~3 W* D: P
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }* U  D( G; p/ M! B1 f9 O1 u% k

  116. 2 E0 i0 h, Z4 i. Z% x  P
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ! f% P) l/ H# b* Q: y. k8 S

  118. - U- `3 J% u& M: W( b
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }, w' I1 J& O' R8 g  n" r9 c! _
  120. 6 t8 f1 x. W  \! p
  121.    return(ang);' I+ E( @5 `* b9 l' Q$ V

  122. ( @, f, r# Y8 u9 ^2 i
  123. }
    1 M3 Q  t8 W4 G7 L% J. E. n

  124. ' P$ G5 v( N' e& y
  125. //#=============================================================
    6 @6 o- }! Y: R

  126. ! C, O" t9 q' J! M" v' L1 {
  127. double CheckConst ( double angle, double constvar  )# T; g2 P+ _1 F8 K% x& b

  128. 1 a3 }: ~6 _1 |
  129. //#=============================================================
    ) H; @: U  V3 D) u3 l
  130. 2 n# j* @/ b- W7 a
  131. {4 ~0 w% J/ U/ U# b) D

  132. & ]/ O8 c- t/ Z! x9 X
  133.    while (angle < -constvar) { angle+=constvar ; }
    3 p+ k9 N& r/ C2 F1 c$ z: N

  134. ) I# a. u( b, s
  135.    while (angle >= constvar) { angle-=constvar ; }
    % K2 y: T7 E; E, X+ r

  136. , r2 w7 G- i+ f
  137.    return (angle) ;1 ^0 U) D* r- z* W2 f7 A+ s

  138. ! C( h, c' G3 \6 {/ K
  139. }: M4 h- w) W7 n

  140. 1 p/ E* R& e( T# ?+ \- ^6 {
  141. //#=============================================================
    7 s( q: Y: v8 A$ J5 u  W+ m5 q

  142. + H' g* h. W4 z% @/ |
  143. double Check360 ( double angle )
    4 u$ X, g+ N+ q. A2 \' A" r* L
  144. 0 o8 L6 V5 M# Z8 ]. o( F9 `" Y2 V% _
  145. //#=============================================================/ r, H+ ?% I& z8 j, T

  146. 5 Q* J+ k1 n" C! z
  147. {
    ; O. j" Y: ]& X# ]
  148. , F: x5 Y" o$ X  h( E) Z
  149.    while (angle < -360.) { angle+=360. ; }
    % h5 b: O+ E3 H+ L

  150. ( q% k. S. k, E+ F6 g
  151.    while (angle >= 360.) { angle-=360. ; }
    . S8 W; [; X  m# T$ \# B+ L. S, s7 [

  152. 3 l% l% b$ L" K' C& p# O0 d+ V
  153.    return (angle) ;
    2 O" G/ B( v3 w6 z

  154. ( P1 o$ c  ]( f' u- U
  155. }, d( |3 S# v& \% s  a
  156. + L8 {6 L) M" [" v2 ]
  157. //#=============================================================4 R( I/ Y# Z% H
  158. ) h9 u7 Z: D" v" x$ A: _
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- \: f  g5 B' h3 l; P

  160. ) y0 F, z" e! C
  161. //#=============================================================$ [( z( e( K* L$ R* `- Q
  162. - h, h6 [+ ?) R1 L( Y7 S
  163. {
    - P* @1 P8 \+ Z( M: J

  164. / j: ^; j& ~8 R/ y. v0 J6 Y  x+ `& l
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }$ X5 j. `- ~9 `, W

  166. 2 X+ f8 K) q) l1 }/ L$ Z  N) F
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }5 x4 W$ s( a1 L# i6 ^/ H
  168. : \; e4 S6 F- a+ @
  169.    return (angle) ;2 c/ E0 h: `; O

  170. " R: Y! p* Q$ P7 n
  171. }
复制代码

2 ?' p+ L1 {& L* Q* g0 f* T以下为摇篮5轴计算过程代码
6 S, y- q6 G$ |9 A7 [7 Z( C: U
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    5 F6 c* u! M- f2 I

  2. 1 `) y# m7 `( I1 F! [
  3.          j=0.; B1=0.; B0=0.;! J" @. O9 g2 h, Z' w2 |- X" T

  4. 6 [" l9 G8 S+ R# Y+ H
  5.           if (EQ_is_ge(i,0.)) {
    / Y1 ?8 N' C2 ?; }

  6. 2 L; X1 @( d; B' Y, N- S
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }2 n/ n) e& J7 s) V5 U2 \8 Q! L

  8. 5 p/ i) l9 t8 w$ L+ M2 S' r( x+ ^
  9.           }
    3 b' b- {6 c. b" x4 [5 U
  10. - u7 w! c. P! m0 ?* u" t
  11.           if (EQ_is_lt(i,0.)) {
    * l, D/ c8 J; T7 x( K1 }, f

  12. 9 n9 \% ]: g; J% F1 y% Y
  13.              if (EQ_is_lt(k,0.)) {
    7 U& g( Z3 Y3 O2 y9 _

  14. - K  ]2 s& s* Y6 p
  15.                 B0=atan(i/k); B1=B0+PI ;5 F8 A+ I+ i( m; |1 Z6 ]9 A, s. i

  16. ' n* T- A! d. X& V  J: z0 [
  17.              } else {
    : b7 p. L) f9 S5 X9 Q, J5 O: Q2 @
  18. - k( N: C0 [; Q0 _
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }3 c3 k3 {6 ~; |. ^% E* W! q" H

  20. 6 P+ j: k5 k7 Y( S* O
  21.               B1=2.*PI+B0 ;
    9 A- H2 q/ V, W; t8 j# Y
  22. - P, N2 x2 l% U, {, l
  23.              }" p3 b0 ^! L0 J

  24.   B, \6 s0 K# v( }
  25.           }
    7 A/ ^1 m+ y3 h# }! W. d6 c, \
  26. % G5 @4 I8 P1 ]' ]$ e1 [3 @
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    3 U. k2 T$ Y3 g  K+ K8 U

  28. , |, m: P8 S. l
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));- V: J  M& a/ ?- Z% [& d: A; f: [
  30. 8 {+ ?' o$ l5 \* l) b
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;- a5 b7 ?/ M" ~3 i  }  v

  32. - D* E- i9 z6 z# r( j9 W' p! P
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
0 I& [5 \8 \, q* }' _5 j' v4 a
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
( t/ N- o0 ~% O- _! }5 L( y9 p# t2 y5 ]- g" }
640.png
9 ?; p+ Z; F. P6 a  \$ M测试结果:
' n5 o! J7 y* t) P! @5 Z* _; B! k. c 6420.png ) l" J0 p' ~) [

) `, ]- C& _$ {3 N反向测试结果 6410.png
/ Q; v% Y$ H) }2 Z: _$ o) F$ V

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

173

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-20 05:45 , Processed in 0.772825 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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