找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8767|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    1 Y4 a( {$ Z! O! u8 q+ l3 p
  2. int  EQ_is_ge (double s, double t);& e- J; N! l- n  Y8 s# P( I
  3. int  EQ_is_gt (double s, double t);
    , X) Z7 y% I4 |7 V
  4. int  EQ_is_le (double s, double t);
    $ t  N6 O  j5 |7 W! F4 ?( {
  5. int  EQ_is_lt (double s, double t);; O3 e, ]+ i% n; ^
  6. int  EQ_is_zero (double s);
    4 }7 [( _  x% E4 |; G0 B
  7. //=============================================================
    3 }' l3 v+ ^! f9 l2 E6 v
  8. double ARCTAN1 (double y, double x );) a8 x1 Q3 Z+ r, T& M+ e  |
  9. //#=============================================================2 a0 r  R  H: a7 q8 o3 ?6 _; U4 J
  10. double ARCTAN2 (double y, double x );
    ( y7 O0 g& ~! v% e7 J: F
  11. //#=============================================================0 b; H# ~4 Q* p# ]& S: z
  12. double CheckConst ( double angle, double constvar  );
    $ O  t$ Y# d3 U6 v
  13. //#=============================================================3 Q8 v3 Q- d' g& [( \" k, H; s" G+ y
  14. double Check360 ( double angle );" z' N, D8 \8 d8 u: j2 S
  15. //#=============================================================8 }0 n+ i: z- y. [; T
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ( W1 y' U1 R8 b+ a1 A  ~: @
  17. //#=============================================================
复制代码

% u+ a' w" c: ]以下为部分源代码,用于判断,计算角度等  h/ e& h4 t4 |' t" z+ J5 D; w" v. w
  1. int  EQ_is_equal (double s, double t)9 G8 h! }. d8 Z. E2 A
  2. , Q3 u$ v% O- q; B
  3. {6 A4 Y6 }, E/ m) W$ g
  4. 3 @3 C7 ~! ^7 R7 ^; ~) a( Q
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    , ^) l  q  f4 ^. h2 i
  6. 2 n/ }$ T8 s2 \( c+ c
  7. }# A) n0 n7 e$ ?0 U+ w( ~) S
  8. 2 o! U' C& ~3 B) k
  9. /***********************************************************************// f8 T+ m& x. D6 D9 G+ J

  10. / v7 N1 W7 s$ X% F7 s
  11. int  EQ_is_ge (double s, double t)
    ' m/ o9 i& o" O( u$ L

  12. 9 K+ X% u! J. g( O4 i
  13. {
    , _/ u4 Y9 j; W% K1 s1 U

  14. 5 f. Y- z6 P2 [+ M) o
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }( Q8 `( v  U, q8 P9 _
  16. % o& i: Q+ d5 @7 P- A2 @6 i
  17. }# w1 R6 {. |4 u0 n4 Y
  18. . Y# c: k5 O2 n
  19. /***********************************************************************/
    ; D6 C3 F4 m7 G0 [0 Q

  20. ; C% w! m. [) l
  21. int  EQ_is_gt (double s, double t)
    ! D* z4 R3 T- z5 D% Z

  22. . q2 |, r9 \9 P. B% a5 W
  23. {
    5 _# z% i% p" E+ U) B

  24. % L6 q; N4 r7 V, Z5 V
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }9 C3 Q! Z$ k: L

  26.   }# H' v! n. {9 ]6 H
  27. }5 t0 X  @- j0 E1 B# p9 P

  28. ) ^5 E8 q$ R# N  u
  29. /***********************************************************************/
    ) l$ H! K2 \' x* ]# |6 O

  30. : Q9 ]1 O) P# u1 c% y2 ?& W
  31. int  EQ_is_le (double s, double t)
    ( x/ _3 q# `+ ?; i1 T# G

  32. ; [( u  {$ j* K2 Y) ^, `: O
  33. {8 w% G; C1 f- r3 {' V

  34. 5 j* }' @& d$ q6 l9 |( l$ k
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ' l* }, c0 f# p( ]  g/ N
  36. 0 W4 m9 w: x8 I
  37. }
    * u6 E4 a2 }3 d* f4 w. u* _& T& K4 a

  38. 7 @: U4 s+ Q) O5 p7 Y/ A/ Z& s
  39. /***********************************************************************/
    7 G( x: h# Z  l. _( l5 W5 a! y
  40. # q3 r/ S9 s/ ]! x! Q. i* u
  41. int  EQ_is_lt (double s, double t)
    $ Q# @, d/ J* M# u# p( u" ?, ^

  42. 9 o+ c8 `, H# R
  43. {; p( \* e0 |0 {# I5 S0 S$ q

  44. ' y* v' Q2 ]' f$ y0 ^/ H% E* P
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    7 H3 D/ F! G& G: H- n+ z

  46. $ l; m& z% V3 O3 z% \2 W( n% C
  47. }) }6 J) Y2 D2 ?. B# }

  48. 9 I1 e% }! W# Q4 E- r) o
  49. /***********************************************************************/
    9 W8 D; G7 Z/ B, @

  50. 4 y# `8 f9 G/ V2 V" N8 a- i! T
  51. int  EQ_is_zero (double s)9 G. w6 t5 x9 }! {
  52. $ t/ D8 \* J5 N. L/ O
  53. {9 f" M6 U* n3 w# j

  54. 0 x; D6 K3 l  s  ]* y- f& v; C" D! j. I
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    9 S+ Z; |! v# V6 H

  56. ( d, f* L4 T& ~+ G& d, b+ Q3 v: z1 Q
  57. }2 |9 {& Y' r" A- J: e% c
  58. " U1 H$ h! T$ ^% K' @) l3 U0 k
  59. //=============================================================1 Q. ~& o4 |( |" ^8 o

  60. - Y8 {. q/ R) d2 O, D: V
  61. double ARCTAN1 (double y, double x )
    7 o1 l8 C4 @! z4 ~6 e

  62. 6 v3 b1 U( }7 j+ l" X* j: x
  63. //#=============================================================' C, ^: {1 w% C* N1 }7 Q

  64. $ ^  _# e9 A8 F% q1 L0 S
  65. {& O6 `0 x1 o4 b

  66. & ]# o0 E) |2 q8 n
  67.    double ang;: r: `8 `: ^6 U4 [/ }

  68. 4 G% o* |$ S/ S# s; T; I. y3 B
  69.    if (EQ_is_zero(y)) { y=0; }. a4 x& U6 Q; y9 K* @+ ~4 N
  70. + G+ ^3 K6 k: F0 p% E
  71.    if (EQ_is_zero(x)) { x=0; }
    - |/ y9 V! h) T' t/ P
  72. + V9 t) Z+ y6 }: Y0 e5 G1 B
  73.    if (y == 0 && x == 0) { return(0); }. f. Y, T9 U& L& a
  74. ) o0 d4 F% r5 }0 u( p: ~
  75.    ang=atan2(y,x);0 v! K; K( v6 Z6 Y
  76. 8 b# j" G) |9 i
  77.    if (ang < 0 ) {
    ( ^& l1 l3 Z) {2 U9 p/ f7 t

  78. * A7 c# b- j1 s% Q; L) [
  79.       return(ang + PI*2);6 b. B1 z6 X: N, b5 q

  80. ) l7 W. z0 n5 y, {+ K7 W* p' k
  81.    }
    ; Q, ?: T+ j/ E, k& D2 Z
  82. + m& V- j9 q! v& U
  83.    return(ang);, K2 {( L: F2 e) S

  84. % d8 j: o  g# {! L& G  A! O. U# A
  85. }# n* C# |# X6 R: w

  86. , k  I. \' U' W$ B, K* y* T) z- Z
  87. //#=============================================================
    5 Y( G: e0 U+ e' W+ S

  88. 5 W9 N0 \' U0 J. [. ]& q
  89. double ARCTAN2 (double y, double x )
    0 m9 `3 ]% ~; `
  90. 4 O/ `3 t. G/ E4 w$ \. g
  91. //#=============================================================( ~$ l- G1 ]/ H( j- p+ F
  92. 0 m5 L7 f- g# B# `- j
  93. {
    - D" }" U4 u. c$ w6 \

  94. : R3 P  E- S  d* k" l6 D* A
  95.    double ang;  N% }) D* I- ^' W  o4 y

  96. 4 ^' X4 J# b$ `& [+ W9 o. L) T8 R2 G3 \
  97.    if (EQ_is_zero(y)) {
    ; H* M! b1 R  D$ T4 P( |

  98. 8 ~2 S4 ~  ]: g5 ]( y. L
  99.       if (x < 0.0) { return (PI); }; _' S# N. [% S9 q* T

  100. 5 {* u; ]5 C5 R/ x+ K
  101.       return (0.0);3 a9 W- o0 ?+ O3 A% V
  102. + c: L, m1 N9 d8 b+ U& e# K1 `
  103.    }
    0 o  F# t& M1 u! k: r# H
  104. ! \3 b8 G% t8 D+ R+ z7 B
  105.    if (EQ_is_zero(x)) {
    . r# O8 ^! v( ]+ t' [* x
  106. " J* T/ {$ @1 l4 m( G" i. @. l, h
  107.       if (y < 0.0) { return(PI*1.5); }; {3 _# k& p6 U% N8 i

  108. ( A3 L: u# H9 `, d  a+ m
  109.       return(PI*.5);* D; S8 @8 x$ `

  110. ) E" e% k; ~. I
  111.    }& {: I3 X( u' p2 L

  112. + Y* `4 _% \* K4 f& |- ], |. Z
  113.    ang=atan(y/x);0 A* i8 a& ~% R9 |1 V

  114. , e+ {/ S# c4 I5 f. V
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    - S- b$ Y  y8 U' ^* O
  116. 8 G' B: G7 ]7 A- W
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }2 I7 y' m4 s" J$ O  o. a/ O

  118. 2 T$ i% P9 C1 ]1 e: x
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }, ^9 e6 B5 A" O: H9 ]' k0 `8 r( b

  120. ! k8 y7 v+ p+ m8 h
  121.    return(ang);* L0 d0 N5 t# `: _' O  E/ S$ b( ?

  122. ) L# ?! i% c# F
  123. }
    / @& I5 c" A' F, F9 y9 D' ]
  124.   O1 H* p! x8 H2 s$ C, W0 z" T
  125. //#=============================================================8 L/ e# G$ m: {( H) r0 v
  126. ( j+ E; J9 W1 t& B$ w
  127. double CheckConst ( double angle, double constvar  )
    $ a& o& A% @# c# w+ U' R2 d
  128. & t! X' c1 S# `6 ?! A
  129. //#=============================================================: s/ q; b4 g' F
  130. 8 O' k# t1 q7 }5 G. l4 S6 A
  131. {
    ' a; G7 ~1 c+ H9 Z1 b

  132. & i- X. s6 k4 [( S1 _( P
  133.    while (angle < -constvar) { angle+=constvar ; }
    9 ]# L1 L( ?, b  _5 a1 m

  134. ) c( X: m: N( I
  135.    while (angle >= constvar) { angle-=constvar ; }4 n4 s# _1 [- o2 ^, r

  136. - f# M4 D1 ]1 d8 y1 b
  137.    return (angle) ;
    : g- y- k! C) d* Z/ b) [5 {+ h
  138. 4 `1 w3 s5 M# @# _# s* W2 R
  139. }7 E5 U4 v) ~% i

  140. 0 \- I/ j; |7 S6 P3 ?8 l2 i
  141. //#=============================================================( e% R* D* b; G$ M4 h

  142. : u! ]2 d. P) _/ f
  143. double Check360 ( double angle ), @  H; T: M0 p, _( a  I+ R, R

  144. : E" q5 s! G( N& }) G5 B
  145. //#=============================================================
    : F$ r, F" L) m. g6 M! s& U7 ~1 r8 ^" |

  146. 9 A- Q3 X" \, l
  147. {
    , T9 T% A: w; |) ?

  148. 5 V1 j& x+ h& y/ M2 }- n
  149.    while (angle < -360.) { angle+=360. ; }
    ) l) L( ?* J: T' e, x- \' T: d+ a

  150. " Q5 @& {5 Q7 h1 R8 m9 S2 r
  151.    while (angle >= 360.) { angle-=360. ; }' s% F" j0 g& e3 C! ~! p+ f' b3 X( N6 O
  152. 1 ^$ y2 \/ ^  K
  153.    return (angle) ;2 w- H, p) ?! ]  q
  154. : g) _) X: x& G1 j# `; Z
  155. }9 `  I$ {7 Y. [3 D1 X
  156. + K' Q9 `8 t$ s* b
  157. //#=============================================================
    % R; ^. l; ?$ }! ]/ @/ C7 x+ H
  158. 9 q9 a2 @' O7 b3 l0 c- T
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    2 R2 a9 C7 A1 _, f6 N+ D

  160. ; K' l0 p4 W% H" `' ?6 C# d
  161. //#=============================================================; k' J3 p$ `4 ?! \, K+ m( f

  162. 8 G6 F* X2 j" d' a( o
  163. {$ `4 O2 T7 K8 N" t/ Z  Y* K0 P
  164. - t* [# j: M7 E
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    9 f8 m. B8 i7 J: z  b
  166. $ ~! n/ X, ]  s5 l% ^
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }9 i) T# B; Q- L8 R1 v

  168. 4 a% g6 K' f* s/ _
  169.    return (angle) ;
    ; f1 c0 P8 i$ }  c# S
  170. # ~3 @) W( S: z. g3 e$ E
  171. }
复制代码

% Q9 a# i$ W) i6 Z+ s( j: h以下为摇篮5轴计算过程代码' _+ U$ E. g) x3 V1 ?, y
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);# P# E/ d/ C, W$ [

  2. $ c/ P! T, v2 B
  3.          j=0.; B1=0.; B0=0.;. W' @7 I2 L9 i- f5 l
  4. : O# w$ W, ?; E6 m$ T
  5.           if (EQ_is_ge(i,0.)) {
    : A! o! r3 b( o# B: X

  6. % r/ f2 n' M# J$ [
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }+ P2 N) ?, I1 |9 v. V# }0 b5 L0 a
  8. 3 X: s$ k, Z( Z7 \: {$ v
  9.           }8 K* C1 C& R& j6 l# u" R7 ^  |6 r

  10. : I  E2 O& ?4 C" y' V2 \7 j
  11.           if (EQ_is_lt(i,0.)) {
    1 `; ~; M, P* g& G6 ~$ U# ^
  12. - M8 N$ n7 b& s- q1 J( g2 e
  13.              if (EQ_is_lt(k,0.)) {3 R# X2 l* I9 N$ Z/ I

  14. # o3 R5 a5 {* ~$ n
  15.                 B0=atan(i/k); B1=B0+PI ;8 y& R6 F5 p- u1 c

  16. 3 i- d# n7 c& I9 a; M# p0 [0 _
  17.              } else {. Q- T+ r( a% h: E6 U1 ?* j
  18. 0 F7 V2 ~5 _) L+ D- L( h0 W6 @
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    : E3 f" [1 i- F0 J9 v: U& U

  20. * z  n6 Q' l, z, C
  21.               B1=2.*PI+B0 ;1 O+ k1 e+ a$ _/ J
  22. # {4 O" C2 M" C. R& Q  ]
  23.              }
    ( V$ z$ t# E+ D/ N* S4 }

  24. 7 I& ]* ~7 V6 M- `
  25.           }1 B6 n1 G0 D' h  l0 A

  26. ' @; z+ g7 x2 Q* c! s
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    " g: c+ }, {# p! w
  28. # Y* V/ }0 H. l4 W! M
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));! b4 X. F2 ?! V1 b1 @1 H
  30. " `$ l% P: A1 S* u/ n! J
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;+ E3 j4 l  W7 P' y) U

  32. . _9 r8 J4 W  [# J& M% x
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

! J! z6 n& \# e通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。0 f4 }3 {& f" z/ h* {, ]
/ b6 `, C# J, ~0 ?
640.png 6 Z! n0 K* T( M' c/ z0 T' q
测试结果:0 i; m1 F2 P3 A; i, X  c
6420.png ) ^9 t& @! P; D0 h* [0 ]  j6 @
8 O/ D- ~; }- B, m; I" v! A0 @
反向测试结果 6410.png
+ m( K4 }+ c0 u  S( r4 h8 }7 {  k# u

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

307

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-8-4 12:25 , Processed in 0.137030 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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