找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5169|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);. P9 S  Z0 A+ H; ^" h
  2. int  EQ_is_ge (double s, double t);# [! }0 G% k4 Z0 `% I2 u
  3. int  EQ_is_gt (double s, double t);
    5 q( [$ M% {, W6 N. A
  4. int  EQ_is_le (double s, double t);
    7 F6 K6 c( Y/ k* P: `- B
  5. int  EQ_is_lt (double s, double t);$ ]! ^/ [$ G4 r& G/ d
  6. int  EQ_is_zero (double s);
    + }, T1 [  n& d* {
  7. //=============================================================5 C) }0 [7 C# {: T; Y
  8. double ARCTAN1 (double y, double x );
      \% ^: j6 W. i6 D* L
  9. //#=============================================================
    ( B4 u* o. i+ ~: T0 z
  10. double ARCTAN2 (double y, double x );
    ( s1 n- J1 ]& O' H# i
  11. //#=============================================================# O8 |& |3 Y& o
  12. double CheckConst ( double angle, double constvar  );
    ; Y+ Z! ^7 z( ]5 }. E  T8 H
  13. //#=============================================================; n% g. Q8 a3 V% B. t
  14. double Check360 ( double angle );
    6 v( N8 \1 V, A  Z2 p
  15. //#=============================================================
    0 x3 a3 h; R+ |3 `9 h
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    : w0 R+ A) g# b! x5 ^9 p
  17. //#=============================================================
复制代码
7 q* i9 K; N; H7 o8 `  I
以下为部分源代码,用于判断,计算角度等  K0 }( |& v6 q
  1. int  EQ_is_equal (double s, double t)0 H$ _* y: o2 r  [

  2. : L) ~$ k7 E, \4 z7 L( e
  3. {8 \! }6 S' K$ `( C
  4. / m! A7 Q" s) J4 O2 m- ~
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ' H9 L. W  u( l, b
  6. 2 L) S+ S2 J1 c4 E: b" ?) v/ H
  7. }6 e7 S* f+ b% a2 N9 ?
  8. ) d; C/ ^- n. g' r
  9. /***********************************************************************/0 ?1 D; n& ]! N# V! y& r& J

  10. + l" y% ^) D& p& d) [8 [. y
  11. int  EQ_is_ge (double s, double t)# I( Y2 I& S3 D3 _  v' F

  12. $ ~. n) Q: f2 w4 g& k) K! Z
  13. {
    / d+ h/ f0 r5 o6 _: H
  14. % V+ h/ {0 X, R5 ]
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    1 r- T* j0 {: f4 a: ?: }

  16. ( k2 H1 z9 f3 j/ F2 D3 _
  17. }9 ^$ a8 \7 h, [* R. U' j

  18. 9 Z% o4 d4 R3 t; G9 x2 j
  19. /***********************************************************************/! h- b1 N5 g5 r  d5 }  p) t. P' `

  20. 4 @  O) a; o: s7 j/ k
  21. int  EQ_is_gt (double s, double t)
    ( L9 e5 E  ^) v, [. l

  22.   o( v% S1 w: G. P
  23. {$ x) k# Y$ Z( j; i: Z
  24. 4 a& z9 V! @6 T- R1 \& J* w' |
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }+ j  |$ F( z. Z- r- C/ c' U- v

  26. ) l% P4 O: ]6 R& Q% `% f
  27. }2 d7 w1 Z, v, }, o/ c

  28. 7 H/ N4 p; E+ {9 w9 Q
  29. /***********************************************************************/3 ?( i# d( e+ x1 R2 {4 u2 |* }

  30. ) o$ `& A! K( `9 q
  31. int  EQ_is_le (double s, double t)
    # r% o% Q% g% @
  32. ) w: v; p, Q6 B1 W" M5 v/ N+ c
  33. {! v- w; |! s1 D, x* n2 ?

  34. ' E4 s1 q+ d: Y/ m: c) a9 y) m1 C
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    . t5 b1 w$ c* w. E

  36. & Y. f/ C) \/ ~. U. }
  37. }6 e" K2 {# O  T" _% ^5 ]
  38. 7 d- ^0 k& v4 D2 y/ S
  39. /***********************************************************************/
    ' }' P+ n2 G0 l7 Z
  40. 1 e- w9 i! m- j5 g, J" R- o
  41. int  EQ_is_lt (double s, double t)
    + `" o3 z& y  O1 L/ q
  42. & _( k# {  T& `: Z) w
  43. {& c7 m; c. S- T* @9 a9 i. Z

  44. 6 Y2 y# {( y6 }. [; ^% r5 j9 r
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    0 l" ]) U' e- n+ T* b
  46. 1 {0 O9 }: x, S! n" q! V
  47. }
    + E# c- m7 P* p8 F3 z1 i9 h
  48. ; H8 e/ P( H; k# d3 I; Y( Z0 L+ k
  49. /***********************************************************************/
    ) b' G8 }! b3 z: z  [4 `
  50. . k0 G6 _4 x, I
  51. int  EQ_is_zero (double s): v6 A% V9 o0 g# q; B; u% R
  52. ) J$ U( N3 F! a2 p2 e; Y* n) ^+ G) e
  53. {
    0 z3 _& o8 o) h- r+ E

  54. / O  f% K5 m9 ]
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    9 F* K7 T5 H' j2 d' T
  56. % ~" L1 V0 ^1 y+ j& x9 E* a
  57. }" X2 N! p; }/ D) m* |

  58. $ J) Y3 W2 u2 `3 A; J
  59. //=============================================================0 `( Y3 P: U7 c$ T( [" A! m$ ~. [

  60. 6 [& b, q; U2 T* I/ T
  61. double ARCTAN1 (double y, double x )4 F' G/ _2 n+ w- m
  62. " N9 q- R$ O# J) C: r' `
  63. //#=============================================================
    + @4 A' g+ O0 }. E, H7 Y# V4 \5 ?# d3 h

  64. & S. M! w1 f  D3 d8 ^
  65. {
    " j4 c; M/ ^3 A; r! X, b

  66. # w: E. g) d& z( k, a5 p
  67.    double ang;% R' j; ?$ C  V$ ]' O. F
  68. " @$ Z+ k4 O7 b" c
  69.    if (EQ_is_zero(y)) { y=0; }
    1 a5 q4 K  |" l5 f3 e( p
  70. . M9 e5 L4 H' l$ {1 h6 @1 s: o
  71.    if (EQ_is_zero(x)) { x=0; }
    2 q) K7 x* Q9 E( H7 C: X6 f
  72. 7 O) g; c! E. O
  73.    if (y == 0 && x == 0) { return(0); }
      b, u, x. `  w+ Z6 Q* d( b

  74. 9 Z" D* F) f- _: A: p1 j; V
  75.    ang=atan2(y,x);
    3 C# k$ ~4 ~2 y( ~
  76. " X7 `5 o" w! R! r
  77.    if (ang < 0 ) {# i5 i' V9 `$ F% A# p

  78. ' E9 a: o, G4 z8 ?# \
  79.       return(ang + PI*2);
    4 x9 Q! X, d  _/ X) S
  80. ) q+ ~8 F6 s* G2 `
  81.    }
    7 U9 X7 S7 v6 J) I
  82. - T: y7 H/ y$ c
  83.    return(ang);' v* ~7 |/ F: k: ^: a: ?
  84.   K3 m" N: P, @+ L; ~
  85. }$ ^& L1 I; X( r& B& B+ F+ s
  86. % r5 ]$ |4 d, }3 @3 F+ P* @
  87. //#=============================================================
    , @) N8 O4 o5 d, g
  88. 7 P$ Q. \; S( a5 i
  89. double ARCTAN2 (double y, double x )
    ( ]# X9 M; D% C3 M& R+ I$ F

  90. ' {2 B; p9 f. v
  91. //#=============================================================
      f# v, [1 e4 x; q' ~/ f- |
  92. * r3 Z; N0 S" c; D8 X6 y
  93. {+ \0 y: u+ g7 o3 z+ ~
  94. ; W2 U* Z: X* c9 Z
  95.    double ang;
    - \: U' ]  n" n" x% k
  96. 1 [* C: \& I( f" J
  97.    if (EQ_is_zero(y)) {
    - }5 C1 L6 X2 g. d" ~% W
  98. , V% b& M" o/ L0 ~$ Z" e
  99.       if (x < 0.0) { return (PI); }
    % Z: N" m. k5 g: W  _- s( }+ _
  100. ( W) G9 `) P# C% u. V; Z8 Y& E
  101.       return (0.0);7 C8 h, _0 F# U
  102. ! P6 P) K9 K- j: f
  103.    }
    * J& ^3 u2 @+ t( i: b# r. V! |& R- N# D
  104.   t0 ~5 Y- d9 W: z# r
  105.    if (EQ_is_zero(x)) {
    ( i# \& Z$ D) g4 J! V4 f8 M
  106. & U8 U) O' P: n; Q. D# X# {5 Q
  107.       if (y < 0.0) { return(PI*1.5); }
    / p8 D, F5 m: t3 e$ d
  108. " k" x2 x! R) |# ^4 d" A' ~* X. v1 N
  109.       return(PI*.5);5 X& N6 i' i% [
  110. : u) c3 j* o* [; R/ w
  111.    }/ `- k8 e  R# |- w8 f1 _, ^% N

  112. # Q: C( L3 h7 b) w3 [3 T1 `  Q# W
  113.    ang=atan(y/x);
    8 h( x5 N$ x; H1 y# w9 f; E

  114. 9 m! {* D0 O* ^. r; p! `
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ( k" ?, \/ P9 l: x! F
  116. , W$ J, C  a. d; a8 \6 Z% l) ?
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }: T/ M0 L% {# K# u3 z) I

  118. 7 R! B# }+ U% a. }; Z# d
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }  G; R9 a8 c5 N+ U7 ]: v+ i

  120. 8 @% [7 l  n0 m2 B: n" b- X4 E" n
  121.    return(ang);7 Q/ I- v. K9 X2 J0 S$ a3 O  k
  122. . }1 G% {$ ^7 [* i$ ~+ n
  123. }6 i" U# t9 Y% v! M, g7 ~7 M
  124. ; |: L# @6 `5 _' ^
  125. //#=============================================================
    + q" R; o! v. ^" L" v

  126. % `- P4 L+ c, `. R& J- b  ]8 @
  127. double CheckConst ( double angle, double constvar  )9 B) {1 W, P! Z2 _$ @2 D4 J

  128. 3 S9 Z* p4 \; u, H7 _
  129. //#=============================================================
    2 O$ D9 f! M' ~, C4 [) V; r
  130. ) [* r+ c1 u8 H# x
  131. {! n  Z, {5 b: L. e7 u& d% @! X
  132. . j. N$ E+ ~1 n9 ?4 C# l* ?# K
  133.    while (angle < -constvar) { angle+=constvar ; }0 |" X! A& [' N
  134. " F9 E4 L) o% C$ h8 i
  135.    while (angle >= constvar) { angle-=constvar ; }/ }+ a4 G+ U: W9 |# ~0 Z% Y. m
  136. 0 u3 H$ l1 E& L" m: [1 f( v
  137.    return (angle) ;7 N5 [' D+ D; l  m' O1 o$ C

  138. 8 V" @: H: a& Q
  139. }7 f& g, P' o* e. t$ V/ o
  140. 9 S. Q9 X( `8 w& I6 m  w
  141. //#=============================================================$ \7 J- y- e8 k$ ^
  142. * r& T( K; l- B1 b# Q; w( L" v
  143. double Check360 ( double angle )3 D; I* H8 [6 O6 L/ p

  144. 0 \2 T8 H/ {' ^! C
  145. //#=============================================================" g, V1 _& E9 K8 N7 b7 {

  146. & h+ t0 H6 R+ ~  u
  147. {
    * Y; _+ `+ t2 _! g' b2 L6 [0 d
  148. % Y' \, ^( M' }. W) v% {7 p# A% _
  149.    while (angle < -360.) { angle+=360. ; }
    7 p8 Z* S. O: h2 K

  150. 0 V. [% z: j7 M' y( x8 L
  151.    while (angle >= 360.) { angle-=360. ; }
    1 k" l- m, [) ~4 Y

  152. 7 a9 p8 K% p* R0 m# U* H& d
  153.    return (angle) ;
    ' C6 r/ L9 l5 p- L  v

  154. 1 d, H) Y# i# W8 O" f
  155. }
    - K* x  V0 \0 @. j1 Q9 T
  156. 0 x7 i" p% }6 ~6 K/ M/ k
  157. //#=============================================================
    3 O" U( N6 Q( Q2 ?
  158. 8 R3 F- N, ^: X  s) q
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- Z% h# E, J  c" b5 e
  160. / e" ?. H2 {# s+ Y0 g1 U; j' m
  161. //#=============================================================+ h/ X) z* j2 W

  162. ! T3 k  }$ b5 X" p4 e( \" _4 D: ?
  163. {5 Q  }( ~. s* m. r
  164. ' t. T! {1 }7 N+ w  Q0 J: }2 S
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    + b6 G) S. ?& i9 P- ^% Z
  166. : U) I! ^5 _+ M7 u
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }% S) r* ^7 ~7 c0 e3 b

  168. ' c3 m4 P$ }2 @( p5 b% X: T
  169.    return (angle) ;
    : @' q( g" _" `) K
  170. ' ?" q: B+ I: u+ P. i
  171. }
复制代码
' R- `7 V) x6 J: `4 r+ d* F
以下为摇篮5轴计算过程代码
5 K5 ~2 N8 m7 `" e/ w8 B' H4 Y
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);" d8 P4 s! T9 c" h0 N: N7 N

  2. * m  x! c5 j  ~4 x& s/ z
  3.          j=0.; B1=0.; B0=0.;
    & R( Z& B3 W" M2 |8 ^
  4. ; j, P# \) E* m; c1 }4 x# `
  5.           if (EQ_is_ge(i,0.)) {' t3 Q  _0 C$ }, L
  6. $ O/ N; u, \7 H& Z0 Y
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }6 s) \0 K5 Q) F: p8 ~

  8. " }: E0 q- o" D1 O, b2 Q5 r5 e8 q% L
  9.           }
    . v1 r3 N' R& t$ F' C

  10. # K% `8 j" ?7 A1 e+ I5 n, O# p
  11.           if (EQ_is_lt(i,0.)) {
    + Y! X( T9 J" v% t  O* ]( @( H3 v( Q
  12. 8 l. y& Q0 X  l$ `
  13.              if (EQ_is_lt(k,0.)) {* N2 h& h  Y- V& |
  14. 0 V# N7 H" R& _5 K9 c# p7 t  T
  15.                 B0=atan(i/k); B1=B0+PI ;
    # Q3 e# m* h# a0 H' z. x2 z' R

  16. : U+ ?5 g4 V6 X1 C6 t4 }* l
  17.              } else {
    ) N/ o+ S7 \& @4 T9 a' @
  18. 5 p4 o; J6 Z+ r- F
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }* ^* w/ J' T* u, y$ z  Q' E& G/ V7 f
  20. - f4 m( s6 C, R0 `2 z
  21.               B1=2.*PI+B0 ;8 o1 v- ]; M/ |' W
  22. 3 U5 ^$ O# G! ~4 J6 ~, A
  23.              }
    9 J9 Z* x; N4 o" U' [
  24. # a" Q- Z' [- N" ~
  25.           }
    ; l6 ]7 I; q& r/ I1 i. ?
  26. / D$ e7 F9 g! v2 {
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    $ }/ Z# C% \# v! |
  28. ! z  G2 r5 g4 e. Z" s( \  t
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    9 w! k. G: M2 M8 O
  30. 4 o/ s" o; M0 N; ?
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    + e9 t" m% A! u& o9 \' g! Y
  32. / N1 m3 b4 O* ~
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
4 N9 a8 o- o6 n7 d; R
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。* Z. w9 V7 g7 ?, x

' l+ `$ a" O/ Z8 P& O% } 640.png 2 [9 t6 u2 S  e; G$ V& T" d* e% |
测试结果:
2 K# ], k0 n6 r9 |) f" w9 R  S 6420.png
' |7 @, }( O3 {/ J. N& w9 h& V7 N2 w5 k1 `; I. B; Z8 l
反向测试结果 6410.png
/ q' M# m1 w/ O" ~0 Z

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

324

积分

中级会员

积分
324
发表于 6 天前 | 显示全部楼层
谢谢分享
回复

使用道具 举报

1

主题

136

回帖

157

积分

注册会员

积分
157
发表于 6 天前 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-10-21 07:56 , Processed in 0.260468 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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