找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6758|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ( P  P) O$ L* u* B, ^9 P0 ~4 Y
  2. int  EQ_is_ge (double s, double t);& b( Q7 U  E& J1 Q" H# L( I
  3. int  EQ_is_gt (double s, double t);
    2 f. ~: q7 ~5 U5 N
  4. int  EQ_is_le (double s, double t);+ t. Z  Q0 j, G5 _3 j8 r  [, r
  5. int  EQ_is_lt (double s, double t);
    6 h. v6 q# N' E& z' O; R. z& |
  6. int  EQ_is_zero (double s);
    # P5 m9 G9 H, t% w
  7. //=============================================================
    - s" V* W: t' l. m8 f  P* z
  8. double ARCTAN1 (double y, double x );2 q: Q5 W8 \9 S& J* H6 v
  9. //#=============================================================" V1 h3 s6 o: X+ l5 W  ]
  10. double ARCTAN2 (double y, double x );1 J. J& A1 e( {! {! M$ [
  11. //#=============================================================1 C/ [0 G. G# D; V
  12. double CheckConst ( double angle, double constvar  );0 ^0 R% v5 K% U. s
  13. //#=============================================================* j% v: M8 U& y8 H+ V4 h
  14. double Check360 ( double angle );
    : T8 O, j! z* v4 C
  15. //#=============================================================
    $ J, z% D: J2 O. ]+ S# p( G
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ' s. `9 O4 ^. B: [
  17. //#=============================================================
复制代码

( g/ y. `3 d' [+ r0 s+ S, G4 Q以下为部分源代码,用于判断,计算角度等
6 z/ C1 U" D7 i7 E8 |2 g, B: D
  1. int  EQ_is_equal (double s, double t)5 B' ~  {5 e' }( j* S* Q

  2. ; K& x3 ~/ E, H. r  ?) R8 E
  3. {6 m/ ~5 a0 x+ @) \) h5 m! F* B
  4. # |0 X% D2 Y  ^, }
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }  a3 S5 D- B" m4 c! w* n, V
  6. 6 l* l! B) }9 H% ?
  7. }
    , ]3 C/ t7 @9 \7 r# Z3 i2 ^

  8. 8 f+ U7 J7 s- L$ Y& |% _7 q6 a! g( W9 Z
  9. /***********************************************************************/& i. [8 c9 t( q+ k% `5 U- w, j
  10. 8 d' N* e3 k; u7 W( t
  11. int  EQ_is_ge (double s, double t)  w. m/ _& r  y
  12. 2 v0 d# ^( d' H8 d
  13. {
      D; w5 @( V6 M' R4 S
  14. 9 U" k+ v; i4 U3 p* ~, R
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    $ U5 c- h9 M. j: h# Z. t# @

  16. " ?8 u$ N- t- `$ I" W$ T$ D3 a
  17. }
    & }! _- M' d; ~2 v# z- G

  18. 5 g% C. T6 w  n, d% |" t
  19. /***********************************************************************/+ X3 A) U. R& c1 y

  20. 2 @5 s% C* _0 W' l( e4 E
  21. int  EQ_is_gt (double s, double t)# _4 ?; K4 ^4 m8 e9 b/ |

  22. 2 k, K0 `/ A& m! @' f7 L
  23. {
    # h, `- r6 Q- G- k' L' f3 E6 ~
  24.   g( Y. ]) q3 L1 a# ?$ K
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    + `; ?8 `8 Z' q* y+ {: O

  26. " I: G' v0 e5 G6 x
  27. }: a  q6 W9 f' c# n: A8 ], L+ [# z0 f

  28. ) x& F) C7 `/ d5 N
  29. /***********************************************************************/- U4 t- m5 J0 s
  30. ( @0 i6 k2 K* n8 O
  31. int  EQ_is_le (double s, double t)
    , P( S* z+ P9 j! }* ^
  32. 0 d* y2 k7 C/ l. R, P
  33. {
    " j6 p0 [% H' I$ H2 p2 L& P4 p
  34. % E6 ~7 E( S  L" U) N
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }+ ^) R! f$ m" ?/ `* D
  36.   T+ {0 h4 e6 w6 ]: a6 S6 @
  37. }
    6 t% D0 H6 D3 D5 {3 ?

  38. + r/ |0 q+ E6 N! M% p+ M6 d
  39. /***********************************************************************/
    9 Q0 Q. }" V/ ]# _  A0 y. s
  40. 5 }0 @6 s4 c2 r& w  I
  41. int  EQ_is_lt (double s, double t); t8 o! N) m# E4 J
  42. " F$ W5 P# Y) G
  43. {
    ! ~3 [+ z: ^* w
  44. # r# d1 i. m* d& X8 q
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }  ]6 L' q. m7 g
  46. 6 r5 \, L! n* _  U' M1 K9 N* n. S
  47. }2 }0 X7 i! Q7 V& L) e0 o1 r7 b

  48. . z$ R2 A( `4 f9 w$ Q
  49. /***********************************************************************/
    6 y+ ~7 V+ @' e  R& {

  50. ! T2 i2 N# o/ z0 G2 i5 k
  51. int  EQ_is_zero (double s)& i0 P; M" I* w* }8 G
  52. $ n7 g9 a, ]3 |* k5 f
  53. {
    ! j' \8 P% h; m8 g! {  ]" M6 T" C

  54. 8 Q% M6 b- u' e; y* j: X
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }) L$ W" I. h- m+ Q$ a

  56. - I3 S* }) G( U. m7 V
  57. }
    , i$ l; w7 w/ `8 d5 |) w  ^& m
  58. 6 i5 Z4 {- i5 V
  59. //=============================================================
    & O# e6 R$ ]" F! ?8 q
  60. 6 L5 N% J/ h2 f  I! @
  61. double ARCTAN1 (double y, double x )) z. T! J* N6 r( q' F
  62. # \( c, y* T6 w, v
  63. //#=============================================================, U. R7 f. {7 z
  64. ; f6 Y  P: L9 c4 ?  [' V
  65. {8 ?# I4 O& J/ q

  66. ) Q& ?3 u2 E7 d& k/ h
  67.    double ang;
    1 d, Q: ^+ J% M2 v/ E1 B
  68. / }2 i. |9 m4 G" ?% k
  69.    if (EQ_is_zero(y)) { y=0; }4 D. \6 C( n* c7 I$ m
  70. % _  F7 j5 \4 T) y; R& c6 {
  71.    if (EQ_is_zero(x)) { x=0; }
    / x' j3 D9 T3 k: H  S; N; ~

  72. 1 {: O: F% W( ^& R) _/ K
  73.    if (y == 0 && x == 0) { return(0); }" h' `3 {, A2 W8 }: X

  74. * e; K7 Y3 Q( f/ o- @
  75.    ang=atan2(y,x);) _4 C$ \% P5 M6 e
  76. ! _' I8 d& T  G5 n
  77.    if (ang < 0 ) {
    3 _! ^$ f4 K& T) e2 o7 C7 R4 t7 i
  78. 3 Z0 e" u- B+ k1 T) S3 N& p
  79.       return(ang + PI*2);% J# B, s" J5 V; S7 P
  80. - ^8 b/ Z7 u$ X  |& h. s' ]+ C
  81.    }
    - k& S) y  B+ ?* K
  82. 9 [) v, W4 ]/ q7 f1 C
  83.    return(ang);
    ; O$ A" e6 j/ o% `% D- o
  84. 7 B1 c' M8 |) S1 m7 N
  85. }$ g/ Y1 Q4 @% y& l% o: Z
  86. 1 z! I/ `& D  k4 R2 C6 \
  87. //#=============================================================1 M. e! \' D8 T2 R6 r0 ?: b! n
  88. - ?) j& U1 V4 t- ?
  89. double ARCTAN2 (double y, double x )% O' _6 P* R. D$ O0 ?
  90. / `" n* r" Y4 w9 A4 m7 \4 _& \+ b
  91. //#=============================================================/ W( G8 N. X0 W/ [

  92. . a+ p9 W$ y3 q" X
  93. {  f/ r) e  f+ @3 j
  94. ) j4 E" I: Y. c1 `
  95.    double ang;
    7 }& q3 w) R) U2 q
  96. 9 b- U* t$ n; ?: u* O
  97.    if (EQ_is_zero(y)) {
    4 A, e$ D0 z2 e
  98. # L( p3 l" ^7 x. z: l
  99.       if (x < 0.0) { return (PI); }
    1 [2 m, L  ^% c) S. y

  100. % n; D" T# t$ Q- `+ \
  101.       return (0.0);/ C. R' [8 r' V5 k# y

  102. , Y- m8 ?, h. |0 f  F
  103.    }4 Y# s8 \1 M8 t: p% M: u- B

  104. * u/ T) H) J6 G, U* f) }  Q
  105.    if (EQ_is_zero(x)) {
    4 K& r; X+ ^, ~! \) F

  106. ! I9 k! m; d( ^0 V1 o3 F
  107.       if (y < 0.0) { return(PI*1.5); }: _( @* C, P/ V
  108. $ V' E9 W& l. u# y& S- b
  109.       return(PI*.5);
    7 }! s6 M3 z) [! w9 _' s9 C! w6 w
  110. + F- p( h0 y% b1 g$ A  |
  111.    }# C: O& u3 z1 v6 U! `1 M9 _( u
  112. & P) h- f/ J7 X" i0 S
  113.    ang=atan(y/x);0 \4 n7 i. q9 ]; X6 Z, I/ P

  114. 9 d& `; w; R! Y, h+ ~
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    : j) H" P- p. u" H3 f9 L
  116. * ?  V% b2 j5 x) G
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ; R2 s8 n8 R' {4 U
  118. 8 F* l' z0 s% J& v/ f9 S7 z
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    0 B4 u1 Y0 ]0 H- o, F1 f
  120. , b3 }; q8 H* B! @3 v$ e- c
  121.    return(ang);
    7 p. ]% w9 b. y. M5 H

  122. , e! ^' Y& h' w  M
  123. }6 R% V. j! i, Q" Y
  124. 4 E0 r0 z3 v2 C0 [8 R  t" W
  125. //#=============================================================& {- D% I; e6 g& m' ~3 `0 A
  126. ' Z2 ?# {' `  W  o. s- A- X* H
  127. double CheckConst ( double angle, double constvar  )7 m3 v9 W: R: K. B  c2 `

  128.   q7 E/ j; B' h. h# c% B" T! v4 w
  129. //#=============================================================
    + h( a$ x5 a% h' c
  130. 3 t# y  _4 s$ L* l+ J# b
  131. {
    - {* G, R% a0 C+ E0 K2 n0 G
  132. 4 c0 }0 z0 G+ E: ^) Q
  133.    while (angle < -constvar) { angle+=constvar ; }7 P2 |8 ~; ^/ q' H

  134. 7 H" M8 ]5 j4 o! x, V3 x2 E: y' [* _
  135.    while (angle >= constvar) { angle-=constvar ; }: r# ?$ N- X) ^- W( D+ I( o
  136. ; O3 Q8 ^% Y; |0 h) \, _/ K0 ^
  137.    return (angle) ;0 a% u$ D! b& Q( i& _! U

  138. 1 p7 m* o! W2 f/ t- M) t% d& ^
  139. }
    ( p7 C- i; v  [
  140. . C, `, q. g$ t! l0 P
  141. //#=============================================================- |  W  E& Y3 R. Q/ o6 u

  142. : c) d8 l, s& O' O# i
  143. double Check360 ( double angle )/ A: m% \6 N" X' i

  144. - A- i6 W# k8 V. }: e6 A
  145. //#=============================================================& \- [* |3 q9 B6 s. i" T

  146. + p8 H# Y% _: m2 E% w( R7 W
  147. {$ q0 _! n" p1 W) S
  148.   J* W9 l  M. ]/ Y4 O, {3 p' D  F" W5 b
  149.    while (angle < -360.) { angle+=360. ; }
    2 x7 E+ I" _+ W

  150. " q- a- }6 o% c7 n  I4 d
  151.    while (angle >= 360.) { angle-=360. ; }
    2 c$ E  M- k! e- G% {5 F. X
  152. $ a! w4 A. i; L
  153.    return (angle) ;
    4 e$ J/ _. L; \, b) h

  154. - {# ~8 f; _) z  q* ?
  155. }
    4 Q, [8 ^* i. P$ m
  156. . o: s! z: I2 S; M
  157. //#=============================================================6 l% J4 r. J- Y
  158. : r/ Z6 P% t  F% X. y
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )$ E. j2 [. j7 z& w

  160. , H$ S" T4 a6 j+ V3 W/ s4 {- @
  161. //#=============================================================
    ( ^4 C0 o3 P, j: x' H% O8 J

  162. 6 o. F/ z7 k( Y" x) M" P. [
  163. {
    ( X6 `$ m/ l* c2 s" j( e  ]
  164. ) m" h, ?1 I' |% y# O- N3 C
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }) L% n0 P. \8 u

  166. ) e! G/ G3 _! v. m% ]" |
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    ' Q6 @- g, Y* I; \9 g+ z0 l8 Q

  168. ; f! M) y! z  e2 y1 Z& b$ a
  169.    return (angle) ;
    " i9 y$ n  a# Z1 f' Q4 K; |) N0 {" Q1 v

  170. 6 ?" \# t( x! ~4 o& R5 N% S0 T
  171. }
复制代码
. B7 l) {' n, Q* e
以下为摇篮5轴计算过程代码* r9 r2 k: y6 ]" W
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    ! }% q0 {6 y' F8 u

  2. 0 T/ k( b4 Z. ]% q0 h, p! a
  3.          j=0.; B1=0.; B0=0.;
    : I7 p( q$ [- ^/ P  i$ g

  4. # P1 S: {( e' B- q+ B
  5.           if (EQ_is_ge(i,0.)) {9 A5 S  B9 l! z6 M8 [! [
  6. % l4 p4 l  {4 y& H! ]
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }7 o' _4 M1 B4 A+ A  ]" s5 Q
  8. % e3 E6 I4 {0 q6 Y
  9.           }. c+ J; A3 ]+ o4 l" @

  10. * C) L- R& f: [0 c) C
  11.           if (EQ_is_lt(i,0.)) {
    : b& ^4 [8 H  V# Q

  12. - N8 \1 M4 o1 i1 |5 d
  13.              if (EQ_is_lt(k,0.)) {5 a) l' @, O0 v  k$ m4 I% Z8 n+ @
  14. , E, j* m  s3 U& b+ c2 V0 r
  15.                 B0=atan(i/k); B1=B0+PI ;9 W( t9 M: e3 y2 {6 f

  16. 0 u1 I' Z7 @# x$ ]/ ]; @4 Q
  17.              } else {% ~0 j5 y- i+ S* s: o8 ]2 A- e

  18. 8 O# A$ @& [$ W1 h7 B. E
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    / K6 ^; b; L3 S4 |4 C

  20. , G: |+ g) d+ }( x- Q, L. x
  21.               B1=2.*PI+B0 ;7 v7 U6 Z3 X4 X# @

  22. 8 X4 C8 s9 |9 Q, l
  23.              }; I" b3 V9 e" {$ K0 j6 O; J. Z
  24. 8 q5 O6 {5 F& L! e$ O
  25.           }; d0 w8 Q# J6 t; @, S# A
  26. ! m4 q/ I9 _9 u2 X' Y$ t1 U+ R
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    - J9 B. `5 p0 S  z$ ]- ?
  28. 6 k. p0 C3 v: n- O, ?: F4 L
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));; O, X5 Q+ J4 a  Q( R

  30. " }8 d, l$ L1 Q
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
      h1 B, X% s2 Y: p

  32. 5 d' B8 W! S. f; V/ ]0 Q3 t
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
2 b0 G. A' i6 L2 y# I
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。0 D! Q& O' v; L
! \) ?* u4 P7 u4 a7 ~  H" r+ Z8 D
640.png 1 }4 f6 `" l  Y  [4 @' `
测试结果:. h4 C+ q" g% b  j( a
6420.png
8 M4 E  L8 p( l- h8 ~. F  x& ]: b' j5 }
反向测试结果 6410.png " c( q  o  ?* A3 C. n

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

193

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-26 02:43 , Processed in 0.256954 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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