找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6540|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    6 `2 O+ Z4 o4 q5 U; v: G4 c9 @; p
  2. int  EQ_is_ge (double s, double t);8 E) s6 Y+ f- J+ d7 ^- S) I) H4 j
  3. int  EQ_is_gt (double s, double t);3 d  \4 R! a+ e- Q$ d4 _5 u
  4. int  EQ_is_le (double s, double t);
    - {% q  |9 Q# h( l4 _
  5. int  EQ_is_lt (double s, double t);
    $ ?0 g* H- y7 _
  6. int  EQ_is_zero (double s);' P' R: F, x3 G& n7 K( p
  7. //=============================================================5 S2 r" N- m, o) e! Q
  8. double ARCTAN1 (double y, double x );( O' z& w" V5 j* ?. R6 d
  9. //#=============================================================
    : C7 Q' g) b$ C- ]# R/ h+ L( V
  10. double ARCTAN2 (double y, double x );% `1 ?. y2 T9 t# t# r
  11. //#=============================================================: |& F$ F, ~. }) ^7 x* s# r
  12. double CheckConst ( double angle, double constvar  );
    . J4 y6 k. f8 I+ s/ G- h1 ]
  13. //#=============================================================1 C) j+ A: V6 S, ?. @
  14. double Check360 ( double angle );
    + C$ i) h0 i2 Q* w6 i/ \
  15. //#=============================================================5 N( G9 k2 P' N
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    9 e. z7 {) Q" d3 f3 g$ T
  17. //#=============================================================
复制代码

# B7 X6 ]4 M( {$ n2 w( r( O! }7 |以下为部分源代码,用于判断,计算角度等% f/ o) K7 x* y: d
  1. int  EQ_is_equal (double s, double t)( D8 P1 b; b: b  X& [0 U- V, Z

  2. 4 z$ W4 q) F/ s! n. o
  3. {9 Z+ R. Q, E$ a0 x

  4. $ `5 {7 V) z. F1 j
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }. i" l+ |: w+ `( K

  6. + ^& V! H* I, I7 E6 U( Q
  7. }$ Q0 R* ~. G& q

  8. $ ]8 A2 K) j& p) S
  9. /***********************************************************************// z' ~. q/ Q, N, |1 }; X7 `

  10. % G1 X# P, K+ @  q8 j$ Z
  11. int  EQ_is_ge (double s, double t)
    9 ?; }+ T4 r, [, C$ c4 o
  12. 3 w7 [2 l8 P* v5 H) p
  13. {, E& y% t, y, m" G- S7 E

  14. + t3 u+ ?: c) K/ v4 x9 ]
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }+ F4 Z1 W  d  t( v9 n3 Z$ _. L2 m

  16. " P8 A! h! u; F4 Z; H
  17. }
    " {7 r- W8 w) G+ a
  18. . O3 i, h' o5 b. A% h- I/ Y% R; w3 J
  19. /***********************************************************************/
    0 e5 W+ ?+ h$ a, ]

  20. / q+ g& N  l9 N4 G6 }3 `+ _
  21. int  EQ_is_gt (double s, double t)1 o" |" Z) ?# ^. L, E% N

  22. 4 R- _: O4 w$ y. V2 V7 X+ O
  23. {
    ' y+ k# h8 _1 l$ f* ^1 i$ w

  24. 9 [) I/ w. ?7 \: H- }/ D) k
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    / L( ~; W. t$ q, s
  26. ' [# L. I  F5 g% |2 F
  27. }
    ( n3 T" [- D4 K  l! U+ b
  28. 4 P" t% i3 I) d! W) o) R
  29. /***********************************************************************/
    + r% J/ b9 u: E3 s, g
  30. . R5 ^8 C6 Y1 V
  31. int  EQ_is_le (double s, double t)0 m( ?( Y; y; w6 J2 }. w

  32. 1 K1 E- r; B. H
  33. {& g0 N- [. I( B2 N
  34. & T1 N6 C# W7 C9 R, W! R
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    , b3 i! y) t" S# n! }; F$ `
  36. % a4 B/ w- Q" v+ u4 E! ?
  37. }
    4 q. o- |8 ^# \4 {
  38. 0 b! O8 G( K" [3 `
  39. /***********************************************************************/0 d' l% z' J6 O& w; k

  40. + I+ N* |1 v0 `8 L
  41. int  EQ_is_lt (double s, double t)
    : H# }# J' y* H4 M3 ~. x; N+ _7 i

  42. 3 s/ f6 ]' Y( W* i/ a9 p
  43. {
    6 r0 I: Y) c0 m. x( c- l8 X' ^) q' f
  44. 8 l- _) W; k' |; \: q! g- Q# ?
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }! V/ e2 m1 y$ O- O4 Q, g6 S

  46. ( Y# N! o( j- e( n
  47. }- ^- }8 n9 k1 H+ o2 Q9 b! P7 E

  48. : X/ b* E2 z7 ~
  49. /***********************************************************************/
    5 b$ g0 p- P8 M) M4 t

  50. & A0 `) L+ o% W: x
  51. int  EQ_is_zero (double s)
    * D, a% L( F% o" l& n& U8 p
  52. ' M2 w( Z( ]5 _# E
  53. {
    - I- r2 t* y+ m  i* H2 u/ u; C
  54. ( v% e, j) @% {  g- `# }
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }1 F8 \7 W" y1 l  R# g1 G. ~" B! Z

  56. 7 m8 W5 e2 I1 x9 M0 t, k: W
  57. }
    $ ?4 T. M* M1 i
  58. ; R- Q- ^- b, Q3 B9 ^
  59. //=============================================================8 e6 P5 P1 G; \8 O# F( y8 a
  60. 9 w# ?+ N1 A( s# k8 t
  61. double ARCTAN1 (double y, double x )  {# h4 S& l1 H# x( }" ^" w
  62. % n+ R4 R* [3 w; G. g5 n
  63. //#=============================================================0 \/ N$ A* Q, ~: q  G
  64. . D. ~) y2 h  O7 r/ |: b' r
  65. {1 d. h7 b3 _. o/ f
  66. , G; c1 |! m, j2 E2 q0 J
  67.    double ang;
    5 X; Z' Q4 u1 j6 J# ^, F
  68. & D5 `& c0 m) [; W
  69.    if (EQ_is_zero(y)) { y=0; }
    ! G. n1 f+ }* W! w" s% A3 X% C8 @
  70. / ^/ n. M, a4 j1 g% e
  71.    if (EQ_is_zero(x)) { x=0; }5 Y+ n! _9 a3 i5 C- e
  72. $ m# r* J8 t  [" Z& o$ p# x
  73.    if (y == 0 && x == 0) { return(0); }
    3 Z5 e/ M& n7 z! e) T$ ?

  74. % M" s! r5 n4 S; s- W$ m! g/ W
  75.    ang=atan2(y,x);
    ! `7 B  q' Y% ~  t2 Q5 B9 N( Y  E8 `
  76. " B2 a* G0 m) N6 ~) R0 |. D
  77.    if (ang < 0 ) {% H1 u+ z8 e" C- r4 o

  78. & D, C* v' c* q, i! L
  79.       return(ang + PI*2);/ Z& l4 E& T! w  D- ?4 {2 m+ g

  80. 1 [4 P2 F1 a+ @+ S( _, ?
  81.    }
    0 v2 k4 k; ^; H# S5 j- E1 z# u
  82. 7 X; @/ ?3 |$ l; @7 X7 v0 A4 s
  83.    return(ang);/ G$ [& v5 A: k- N7 i/ H' E6 w

  84. 8 d2 {( n9 w" J; [; {/ G+ @6 l7 _% b! m
  85. }
    7 |% P; _4 J8 j" c
  86. ( k: j& b& y- z, D5 N5 v4 u
  87. //#=============================================================
      k8 h1 y/ B- ]' k4 I6 u+ z! d8 N$ L

  88. " m; `6 X6 T8 X/ L" j9 n+ a1 u
  89. double ARCTAN2 (double y, double x ), w- H5 V; @) g/ W# ^
  90. - Q; i* e" }0 |3 z, {' b& V
  91. //#=============================================================2 T4 t: G& ]8 o$ i$ O0 ~

  92. # V4 \: q! x* W2 A/ |+ A, p
  93. {# V+ @# f# T( t. z: `/ }) s
  94. " N7 p$ V( `: z$ L" @
  95.    double ang;
    . n( L& m8 Y) E4 x
  96. 1 A' @: \; n1 ~8 {! L& H; ~
  97.    if (EQ_is_zero(y)) {5 L3 w! }9 H, m$ P( U" K$ `* Q
  98. # R, O! T% t* H' Q. z' z3 H0 V
  99.       if (x < 0.0) { return (PI); }
    8 Y' Z* [: d4 R* D0 A/ z0 I3 q- c

  100. 2 @# L: a& Y  Y" }
  101.       return (0.0);" U3 i# |) E& Q* a( i7 }/ C! y
  102. + a2 F9 z( t0 Y! l# v
  103.    }
    ) ]" s4 J& C1 ~2 R1 e) C8 R9 P

  104. % y4 J6 Q  I5 `8 }% \/ Y
  105.    if (EQ_is_zero(x)) {
    6 ^8 |# |8 a* R7 F4 \

  106.   j( m+ q% k% d5 e. ^  |
  107.       if (y < 0.0) { return(PI*1.5); }
    # ?2 |! P4 k# b- K+ C1 V5 }8 ]
  108. 0 T, a) y2 m+ J9 G* K6 ]- d0 a: F
  109.       return(PI*.5);
    2 n  n2 b+ L, T' ?
  110. 0 ~8 Y" H" S7 t- T2 \( |
  111.    }; @6 b4 L+ j9 G; @3 R

  112. 3 M7 `- v4 J! B; ^  B. Y2 ~
  113.    ang=atan(y/x);+ v1 x8 U7 y' i. ?- f+ s( n

  114. " ^8 Y5 e' V  z8 u
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }* T3 L; J" Z' b* A7 Z
  116. 4 m4 ?% E. o- k3 g
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    * k( S' X+ ^: j" M$ \" M
  118. 7 W6 D" F1 w- {, C
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    2 I8 a+ N9 R3 D( a
  120. * l9 R+ ~2 t! v0 A# B
  121.    return(ang);
    / y! p/ R) E$ w

  122. 9 {" D: K6 D6 Z0 x7 ^6 }
  123. }
    1 M7 H7 T  @) m; n1 L

  124. 0 r7 E2 k3 }" K0 f
  125. //#=============================================================" Z) l3 @8 K7 N$ @( o9 Y' h

  126. ( X: O% |' G: P# `# N% {5 O
  127. double CheckConst ( double angle, double constvar  )$ @" ~# r, n8 ?5 t

  128. & K: y; ?% s! _$ R& w+ H1 o  ~
  129. //#=============================================================" L3 {$ y0 X8 I! u: _

  130. / o2 W* D* U" H. K( e# H
  131. {8 }: D* s7 r8 }$ P' |

  132. # |8 x6 U- ^: Z+ n/ c
  133.    while (angle < -constvar) { angle+=constvar ; }& ^. i& Z, _% c; v/ C

  134. : a7 }. C9 n- E* w9 U7 A
  135.    while (angle >= constvar) { angle-=constvar ; }' D  g1 d; q, X% t, _; L

  136. $ |% N9 ~' g; B1 `8 O8 l
  137.    return (angle) ;
    1 ]6 t5 B) k4 X  R  _8 ?

  138. 9 C2 E3 a% \( I7 q, d: O; d
  139. }
    1 |: g: R* y; \' j. O
  140. / l3 Q1 `6 H3 A# O  M" g
  141. //#=============================================================
    4 t+ r: q  \6 e- K9 }+ y, l

  142. ' V/ Z" L+ S5 z+ K3 I
  143. double Check360 ( double angle )4 Z( b9 S# S4 z/ U  v5 V

  144. 5 E0 S4 v# f( e2 t- m1 p, s
  145. //#=============================================================5 a, ]' g5 ~: ]: v
  146. 3 C5 i3 O: S5 P9 C* @% t
  147. {
    ) A5 W$ @, P3 G% U
  148. 7 l* o" G2 v% h9 z  i7 y
  149.    while (angle < -360.) { angle+=360. ; }9 \+ u! }( u/ }/ o6 Y8 l

  150. 2 k7 u0 X+ F1 ^* ^( Q
  151.    while (angle >= 360.) { angle-=360. ; }) y& C% l: c: ]" i+ t9 m, n  ?
  152. % w. ?1 w0 T& s4 L2 \/ g1 V3 f
  153.    return (angle) ;/ D) j% K  M4 x: x- ]8 O% V+ |

  154. 1 m" `9 Y1 }2 e3 W4 {
  155. }; O  n5 n. u" k+ ~& }

  156. . a3 y+ w, T7 y! f* c) F) v
  157. //#=============================================================$ ]4 P# ~" E; s5 f
  158. ; t' d7 h) x& R. n  v+ o9 P
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    : e; y3 |* [" w/ I

  160. 1 q1 q$ }/ h4 ]9 |
  161. //#=============================================================
    & z. G/ s3 m0 l
  162. / `" F3 g4 l# R) e2 R7 Y
  163. {8 B. [! j7 f5 }/ g7 e) d
  164. 8 U/ p' q  \! u* Z% T/ k$ G6 C
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    - @& z1 {0 i* _! z% \: ~

  166. : V0 V/ F# G2 s+ V# I
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    0 }+ c; ^* E6 b  T, u) Y" b
  168. ) R& b1 ]7 G5 h6 s
  169.    return (angle) ;
    1 P8 g: k& l# v- [0 M0 S- V0 M
  170.   Y* i+ l* b) B
  171. }
复制代码
0 L4 R( H1 l7 ]1 |
以下为摇篮5轴计算过程代码; e8 L% T" r' N
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    4 U. C0 D6 R( w+ C+ ]' e6 Z. j# W
  2. 5 @: a& ?( G  x- F/ T! d- u0 H
  3.          j=0.; B1=0.; B0=0.;
    9 d4 M1 E6 }; u
  4. 0 X& c" M* }$ W/ }5 ^+ E5 `+ i2 n5 |
  5.           if (EQ_is_ge(i,0.)) {
    . z0 ^0 S- c6 }2 k6 M

  6. ! v) n  z) C- {2 F8 c
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    + V2 C- F& U/ |5 s3 t
  8. . @- {# u0 F9 y9 I
  9.           }
    ; y7 U7 Q% Y% B' a+ O" |

  10. ( e; l3 q" [: q2 g4 O. J. @8 M4 I
  11.           if (EQ_is_lt(i,0.)) {
    5 {( x2 x4 a. a# p+ E: I
  12. 8 Z4 f9 ?# w' i- b: f" g$ T) u
  13.              if (EQ_is_lt(k,0.)) {
    , M; `$ U0 T; P, s

  14.   N. u- f$ s. a8 p
  15.                 B0=atan(i/k); B1=B0+PI ;
    , |; n) S7 S) Y/ B8 }' S' k
  16. ' A9 q2 a- _3 G# d
  17.              } else {
    * {/ c4 C$ R0 j  K+ ^! a
  18. " L4 v9 L* q  D7 i# V2 K$ O+ |, `3 k
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    / W' O& A$ q' j- I

  20. + U* e$ M7 }& ~4 x4 j
  21.               B1=2.*PI+B0 ;
    0 q) L$ R% U1 b5 D, o. T
  22. 3 y& A, |$ v0 X1 c$ c! M
  23.              }
    ) Z/ B9 B9 n( F) P% _

  24. 7 j1 h0 O, M) U, T6 i. H
  25.           }
    6 h1 Q0 Y4 F& z4 w+ K5 G% x
  26.   u. C; z- Z2 s" s$ {; h5 X9 W
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    8 n5 q& ?+ A: A  p4 {

  28. 5 P; F) R8 P, W% ^
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    0 X/ n4 d# y& g" i: Y5 N: [: T

  30. ' L1 s% r9 p6 R7 U" N
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;7 w& Z/ W" o9 x% a  Q
  32. , ^" `1 A. |7 n9 H
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

! i) H5 [" u, J' e) G通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。. h( Z4 g; Y  {8 G/ k# A

0 ^/ j0 ?5 P9 `# ?( v" y- W, n! _ 640.png
2 I0 n# U6 ^# a6 i" f7 \- i测试结果:
; X6 H1 D  L, Y# e' f2 N 6420.png 2 \  ~5 X$ H9 J! M5 G$ \4 y
6 C+ z& d$ ~0 b# Z
反向测试结果 6410.png 9 [' ]6 e, [+ @1 D

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

190

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-6 22:45 , Processed in 2.368382 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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