找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6625|回复: 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);8 \! N* B' D+ V. Y$ b1 {
  2. int  EQ_is_ge (double s, double t);
    " {; \. A% x% h0 H$ s
  3. int  EQ_is_gt (double s, double t);
    / ]* W; {" D9 U9 t8 P9 T- k: n
  4. int  EQ_is_le (double s, double t);( g+ Y# o4 ?8 g# t3 w
  5. int  EQ_is_lt (double s, double t);( B4 l8 U+ c' T9 N" U# j
  6. int  EQ_is_zero (double s);
    9 i! N2 `1 F3 l" r
  7. //=============================================================
    . o/ D( V9 S+ a
  8. double ARCTAN1 (double y, double x );1 B5 y3 p, `8 v0 _1 A9 l. {
  9. //#=============================================================1 }9 X( d' W( v+ L+ c$ m
  10. double ARCTAN2 (double y, double x );& X# q9 E0 @5 y
  11. //#=============================================================
    2 b3 b( c4 n6 x" b) J
  12. double CheckConst ( double angle, double constvar  );" |& R- {( V) L% e# K2 j
  13. //#=============================================================3 `0 }; j: U/ I0 [& w5 ]/ ]+ w$ A+ e
  14. double Check360 ( double angle );
    9 ^9 h& |7 L6 J" \( {
  15. //#=============================================================" J- R, h8 Y( E$ C+ ?
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ! \- w+ l# i* d
  17. //#=============================================================
复制代码

$ R7 ?4 E& N- Q7 K' ^& p( E! \' [$ Q以下为部分源代码,用于判断,计算角度等
' ?1 l& |$ O& {, I! D* q/ v
  1. int  EQ_is_equal (double s, double t)
    5 C/ e1 d) [4 {1 O/ R7 z8 P0 M

  2. 9 f( Y4 {: X  ^
  3. {& I/ z' {4 F6 _+ Z/ q8 e- T8 `

  4. ; Y9 q, H4 [9 {3 y' P' U
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }+ M1 ~; b8 ~0 \& ^
  6. / C+ e* d1 D' |1 i, d: b1 }
  7. }! d. C6 c: ^  w
  8. % f5 b7 \2 X3 |: z- H& u
  9. /***********************************************************************/
    * E* U' b6 z6 l4 \; w+ H

  10. 4 K9 W$ K) a8 z# g% n0 ]: t* t
  11. int  EQ_is_ge (double s, double t)
    + [3 v" p6 Q0 i' P

  12. 3 `3 M1 z6 ?/ I4 q! r6 H
  13. {
    % }4 }$ t5 Y* v$ c+ \4 T
  14. 6 O# U# z+ `# z( ]2 j
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    / @: T% c  B/ w3 q
  16. , u& O$ y4 k+ @) R  O. E
  17. }
    & Y2 f/ d9 A- c

  18. - [" E* U0 A4 m& C2 v- V+ c0 @
  19. /***********************************************************************/9 S1 y. }! I; u9 n# k% g! X
  20. 9 K, H( U- j$ S5 Z! Z4 n
  21. int  EQ_is_gt (double s, double t)
    " X; k& S: a" n& d4 I* }
  22. 3 [& t' Y+ A. i' e( L
  23. {* l% ~) |% A' z' u- v  i7 f0 N2 J

  24. . \2 B* `: l& _% W. M! ~
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }0 f) I6 d$ a5 U* \9 z3 @: G9 k
  26. ' |/ x3 g8 Q3 P5 i" a$ q9 t
  27. }, I: F1 ]6 N* _2 P+ s( @

  28. % P# l+ J/ V) k. b
  29. /***********************************************************************/
    + W9 i# u1 v/ l" b7 f( ^
  30. 1 D: V. G6 Q  ]8 d
  31. int  EQ_is_le (double s, double t)3 I' h$ \/ @) {
  32. " L& \7 a. Q8 f6 Q8 d2 h+ h- j
  33. {
    2 o( |. q+ i& |9 t& c; a

  34. $ `9 R6 R+ n% R) h# n" y
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }! u5 D4 x( S( s1 `/ ^9 a' S7 X1 q
  36. " g* N% Q4 c' S5 k, p
  37. }
    : R. [+ t( \- }9 G2 U
  38. " s. K/ h, s! N% ^& I  B
  39. /***********************************************************************/
    3 E3 M4 ?6 {& z! S/ a
  40. + X' O: D; z8 g3 P6 f4 R
  41. int  EQ_is_lt (double s, double t)
      W8 _0 u4 ~; S: ~* M& V

  42. 9 q0 `6 {$ T" q0 Y
  43. {7 L; [' B3 `( a. d- d
  44. 5 U( i8 g* l1 c  U* ~4 S
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    6 ^0 O& Z+ T  T; Q+ D, M5 e
  46. 8 m1 f4 B$ M- o. R. V1 k! Q9 h
  47. }- v. n( [) j% B$ U; _2 |/ b9 v& q

  48. 4 F1 I/ S& W9 k) |0 Y3 d
  49. /***********************************************************************/
    5 f2 f$ q/ o0 }0 o
  50. % j3 f3 y; {- \! B0 s0 |
  51. int  EQ_is_zero (double s)
    5 V$ O8 e4 y' V2 Q1 L* k

  52. 6 ]/ l1 A6 J& z' C4 S2 T
  53. {% z, S6 ^4 k/ n2 u4 o$ ?5 Z
  54.   ^* b  P1 C; b& y/ o
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }8 O3 m5 p2 K7 O) Z" ^$ E: d

  56. ( o8 V. `1 h' x, ?+ V; \1 U/ ^% [
  57. }$ b2 b, `# A7 b  O: n( j: x: V1 h
  58. 9 e3 @! Z- z7 \4 ^  [# w
  59. //=============================================================
    8 a. V% D* t/ E" F- i3 v, Y' A" R

  60. # ^  _( R& f) E2 D" ?
  61. double ARCTAN1 (double y, double x )+ d+ W' Z2 d# g4 ]
  62. & O& P- H5 |" ^
  63. //#=============================================================
    " C& U5 `- z- R6 u+ V
  64. ) o0 F( w' v- H2 x1 M
  65. {6 J5 c+ m% Y# I6 M' [9 P7 [) S! r

  66. + j4 _' z( H, L) V# J0 j
  67.    double ang;, F; g4 r5 X6 z; n
  68. ( r  u3 J1 j" c- {. j/ c
  69.    if (EQ_is_zero(y)) { y=0; }
    , H+ C5 g% K  A  O" A+ q- I8 n9 @, F- u
  70. " [9 f  H+ v' j4 q: `' S2 y/ D3 ~
  71.    if (EQ_is_zero(x)) { x=0; }; z/ q8 F: k" O" V8 c* R

  72. , P1 G* X( Z* m0 s5 D
  73.    if (y == 0 && x == 0) { return(0); }9 i  b' ?) `1 N7 L

  74. , V' A# @: w+ a4 B
  75.    ang=atan2(y,x);/ N% l8 e+ a: ^% s

  76. 8 S* o8 O) ~! B7 c, _5 K$ s
  77.    if (ang < 0 ) {+ _. o$ ^( t- i2 r' u1 j5 D

  78.   P/ P7 u( C8 U$ W; r- R
  79.       return(ang + PI*2);
      U( V, f& N6 Y6 f& l/ `; g
  80. : l3 p* v9 Z% u6 t: n. m: [
  81.    }
    / f- {: t# {" |6 D& E7 E0 h
  82. ( J3 O9 T% f: V% [& |/ I; Y0 R4 G
  83.    return(ang);7 w9 ^4 U: T& P( s& \/ L3 T

  84. ) J/ V6 e* D4 L9 c
  85. }' W6 {$ }: V2 i* ~4 T

  86. . f0 G! I( c) j  G5 d, F: ]
  87. //#=============================================================
    ' j1 w3 M0 `4 Y& R6 C3 L
  88. & N: o% K  ~  S. E' X# T& H" \' V
  89. double ARCTAN2 (double y, double x ): T& c4 v2 S* H5 v
  90. ' T9 Y* a0 U2 N& H9 h3 ^' d
  91. //#=============================================================
    & R2 w. a  z! @. j3 k

  92. 7 q7 G) n  t" k1 k: f: D8 N& C
  93. {
    0 |. j& `4 T: X; w# p! P% f& k
  94. ; \' n2 o8 E1 V. I
  95.    double ang;6 Y8 B. L2 t# s

  96. * p9 s  ^6 L) g4 s0 O
  97.    if (EQ_is_zero(y)) {% z2 u: K' @% }) K1 w8 j/ S

  98. % n9 b  n  X6 ~" N
  99.       if (x < 0.0) { return (PI); }5 n, W% k$ q. X9 @

  100. ; b. ^  y5 C- }
  101.       return (0.0);
    2 o- x. o, m4 ?# T7 p) e4 @$ X

  102. $ K5 g/ H' h! J  S& _
  103.    }
    2 Y! b2 h: d5 m

  104. ' r* A" K: }6 S* {5 _" U# i
  105.    if (EQ_is_zero(x)) {
      j! ~& a4 b5 Z3 Z) l8 U

  106. $ g* E/ R# Y0 y
  107.       if (y < 0.0) { return(PI*1.5); }! I1 s  U1 ?' j! W' O3 H# t' t
  108. ) f- k. W7 x: p" Z8 @4 L$ F
  109.       return(PI*.5);
    7 i0 ~- ?8 F, Z: L

  110. / s. w0 ^2 v" |; M
  111.    }8 ]" I$ j5 M& O

  112. ) O& i( `9 v1 {5 V
  113.    ang=atan(y/x);
    9 C# m1 _# g/ N0 S1 q% R( ~- y9 {: K& W
  114. * t0 d6 T* i; p
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    : c, b3 S7 B4 P& t' D

  116. 0 E; a2 C0 m7 _$ }* a2 y5 ?
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    : W' [$ k& T" X) ^) Z

  118. 4 x7 o' k7 W0 e
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }4 q2 A; T2 v3 _8 V

  120. # G1 X) p3 v: I
  121.    return(ang);
    , y& G) X: X. v* D+ ?& u/ L
  122. 8 }$ c+ ~3 @2 {7 S! s' ~
  123. }( R/ z7 p' O2 y0 Z2 z0 f& Z0 t$ S

  124. 5 |, L( i  ]1 C: g& t6 G
  125. //#=============================================================
    4 u. x8 |; J% V7 u
  126. ! u- z! r/ x2 ~1 Y% l; {: c
  127. double CheckConst ( double angle, double constvar  )+ L3 j0 O: L4 m# ^6 u: b
  128. 4 s' F( x: O  b: `+ K1 ?
  129. //#=============================================================
    * ]# e* ?7 ?) s9 w7 `! k
  130. 1 ^5 ?! [- v- V4 V, O
  131. {
    # o" T3 D, B* p2 @2 b1 R
  132. 6 l; R& p2 K8 L/ U$ l* _6 I
  133.    while (angle < -constvar) { angle+=constvar ; }
    6 a, s8 s+ _; k5 e
  134. 3 R1 h, b' }: k/ {8 l
  135.    while (angle >= constvar) { angle-=constvar ; }
    6 U8 Y9 f8 e( k2 u( m

  136. ' U: n. [  l9 ]
  137.    return (angle) ;) n) p9 o: f/ P9 U* @* n/ [( q; U! w# q
  138. 4 U6 e: p/ z% P! I, t7 }
  139. }$ R% U. i/ z+ T8 ?* h) p# L

  140. 0 ?; x0 _8 U8 @* Z
  141. //#=============================================================
    8 i$ z7 f0 Z* l

  142. % f; B, l$ t7 v. ~
  143. double Check360 ( double angle ); x/ K& w1 [5 Z0 ?$ e) }% K
  144. 5 y) h6 y6 J6 v( m
  145. //#=============================================================1 L2 z( x# t  c3 P# O* V- b4 {
  146. * T$ t! y( W+ |5 t) X" D0 S
  147. {% k+ K( e; f) q( L. P! T! V
  148. 1 S3 h3 b  O! M8 F
  149.    while (angle < -360.) { angle+=360. ; }( ?  d  X5 b) F( t
  150. ) X( b# U- K! j/ C) S
  151.    while (angle >= 360.) { angle-=360. ; }
    1 r; S$ F! X3 P# Y# C, E

  152. ( [/ o8 ~. k. O$ P
  153.    return (angle) ;4 @7 M0 o) S& ?4 i5 w% A4 T: q* C. c
  154. ) w$ j* a  S% o$ g2 U0 ~
  155. }/ ]1 F9 p* }! n$ P% |
  156. # ]- Q$ p2 i" ]/ l! j9 q9 [
  157. //#=============================================================
    ( N: ?( ]$ o1 l2 `

  158. # h7 P% B+ V4 G1 A$ g
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )  U* A$ C8 H9 X  u, L5 u: N7 ~
  160. % B- X% X7 f7 D+ h+ l: a
  161. //#=============================================================
    $ S- x5 Y, F  a2 Y, G9 O5 X
  162. # m, g  L& O/ [
  163. {
    * c( }( ]# l3 X9 g5 b4 Q# [
  164. ; n+ p3 U$ k% ]* u8 H2 E
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }3 |  S" S* j- k* Z7 P, l. D! ~

  166. ) j5 Q& Q* Y" I5 k( W6 Z
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }! b/ F& E# U0 [+ a+ v8 J% b

  168. % \" G& K& I( k- G& v/ @, S
  169.    return (angle) ;
    7 _* l8 O* S* i# ?) W: X3 c) t
  170. 2 P! T; g& M  H' _/ L0 t6 p+ T
  171. }
复制代码

$ o1 R- h+ j/ Q' ?7 k以下为摇篮5轴计算过程代码
, S) v4 Z7 |# ?/ D
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);- [: @1 b" g$ d% k6 w

  2. ; H) R( x/ m8 q9 ^: p% g
  3.          j=0.; B1=0.; B0=0.;( y9 Z1 k6 J. Y$ U

  4.   O2 [4 @6 q9 P0 u: {+ G2 V
  5.           if (EQ_is_ge(i,0.)) {" \+ f# y2 D' @

  6. 2 k  k% s2 Q- \: J! |4 o$ H1 N$ O
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    , h( W0 d9 C" V9 a+ h0 j

  8. ) `  j+ {# B) t* u
  9.           }
    ) W2 G3 `& O5 k# j
  10. 1 G! t3 Y& b. W- U- f
  11.           if (EQ_is_lt(i,0.)) {
    # d5 ]. v/ z; F! p

  12. " v+ p& w7 r) \- ~# e9 M
  13.              if (EQ_is_lt(k,0.)) {# z- C* A/ H8 L7 |& u7 \5 V

  14. 7 s$ c+ x  t7 a1 F3 G" R
  15.                 B0=atan(i/k); B1=B0+PI ;
    2 I8 c5 i/ r$ H3 A

  16. , }6 v8 f5 S% {9 m( l
  17.              } else {
    # `4 g2 B4 c6 G% V7 T- }
  18. $ `3 F: r+ H# y* |( m
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    . H' L. ]5 _1 b: M1 T6 H2 R
  20. " x" b& e. a$ H! a! a. @
  21.               B1=2.*PI+B0 ;
    ) ]+ z0 m/ c- D, d
  22. 1 x2 w0 R# o7 f! S
  23.              }
    1 Z- J" L& i6 |) _* H- B0 \
  24. 2 w& d5 m2 T, q; y1 N
  25.           }2 U) }5 _+ E( R/ N6 \' a3 a: h/ I
  26. % X/ j5 Z" I& _) O
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    : J& c) y& h" \" O/ N6 ?+ ?
  28. 0 A  K% q, f! C4 O6 o$ q$ ~( O+ B% |* h
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    6 w: ^/ T5 ]" X2 @2 ~

  30. ! Q: l) B, z2 x. C
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;6 F; u9 U: C: q2 N. D

  32. & M4 c. t; j( Q- S3 S( n- N
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
$ d- s, H1 Z6 w
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
# H( M, o6 l- X9 }+ Z+ W3 U- h+ B
) l* f. \5 P; f" D 640.png # }5 b; R8 O0 e8 d
测试结果:
) m7 ^1 m& z# t  G; Y2 \6 i 6420.png
1 [- Q1 D/ b# _% Y! c1 U- |) c) I8 U% Q( g8 ]8 Q, E9 L
反向测试结果 6410.png
, S' }* t  L8 C

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

329

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

191

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-2-13 19:26 , Processed in 0.264987 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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