找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5967|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);0 ~$ r) L# h- J6 |/ n
  2. int  EQ_is_ge (double s, double t);
    5 z- {  D4 M% z  R
  3. int  EQ_is_gt (double s, double t);
      `  j$ u) @# M. u9 q5 y
  4. int  EQ_is_le (double s, double t);
    ! F, _* C8 I) C7 i$ v9 ?. A) f
  5. int  EQ_is_lt (double s, double t);) x8 k* z: M, N6 ~! ]" |8 Y
  6. int  EQ_is_zero (double s);' G5 I  o4 }& L3 p5 v: ?
  7. //=============================================================* n& s6 P1 v" v
  8. double ARCTAN1 (double y, double x );; N. O8 J( ~" m
  9. //#=============================================================! @- Z+ n1 C; r5 o6 p) e/ U% U
  10. double ARCTAN2 (double y, double x );" l4 @. `- W$ Y$ _0 I
  11. //#=============================================================
    ; `2 f0 G; o8 e2 l0 l6 H
  12. double CheckConst ( double angle, double constvar  );
    + y4 w* |- D- x' m
  13. //#=============================================================" I" T. {& ~) d8 l2 \. V( c
  14. double Check360 ( double angle );
    + B) g1 A% M- B1 g! I
  15. //#=============================================================
    5 G$ G3 `2 K% _; I% V1 s- B
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );9 n7 j* l. f4 V: A- k
  17. //#=============================================================
复制代码

8 K1 E: o; E; Q% E2 v" U: c6 k以下为部分源代码,用于判断,计算角度等
. V9 c4 e6 {, c% w% N9 U
  1. int  EQ_is_equal (double s, double t)
    8 R# h% x% Y4 K; U, ~" p

  2. 4 h2 t/ h$ x' }
  3. {' A' |! y2 R* \- z/ N5 P) f0 ]

  4. + i/ b) v) r  `0 _( G$ D& `
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    4 ?$ J- y  i" b

  6. & i  H3 O& K  L' P9 h
  7. }
    % i1 A5 `8 k4 g, S. _% m
  8. 4 j$ f4 v: J6 [& g- J
  9. /***********************************************************************/1 Z/ b6 T( V) Z6 x
  10. ' N! G/ U% m3 g: l4 y0 \# b
  11. int  EQ_is_ge (double s, double t)7 j# M1 ?* P- v" [& c% @
  12. + X# v! C4 a4 C9 A$ t/ X
  13. {8 C6 M. W8 n* P

  14. 4 u6 D$ E$ A1 `* E/ \$ {* _
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }/ m" b( l5 d9 f: G% W+ g
  16. 9 B: Q3 @/ e# T% p9 _5 \/ s, b
  17. }5 n$ F* k/ O( i0 U) w" Y  s# W

  18. # K  _/ X: t! ^" I8 c5 C# ]
  19. /***********************************************************************/
    4 g$ [8 S, W+ n, N

  20. & M  a+ A) t) b$ n- H
  21. int  EQ_is_gt (double s, double t)
    0 r0 {4 q: q3 P2 X- G; n/ @5 T

  22.   f2 P" q* w  r
  23. {
    + u& Q( E" C$ ^" U- y9 F

  24. 6 @% D  E9 h# M+ j% A
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }) [# V3 e0 g# T# m* w
  26. 7 o0 y( {! F6 }* W  j8 S
  27. }, ^; L8 M8 |. q1 P
  28. 3 h$ }2 ?5 y) e; z' j, Z% j! D2 A
  29. /***********************************************************************/
    $ g3 s8 ~! o5 C+ P# L9 T8 ~+ ^. K
  30. % c: m& L( {7 W
  31. int  EQ_is_le (double s, double t)
    - s* D$ s9 l. a- O: y0 x) Q
  32. 1 S6 o: j" X/ T: B
  33. {
    , t! N9 g( `' a3 K0 m. y  K. w4 j

  34. 3 C8 |0 Y& D4 C. t- }4 v" u) Y
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ( j- X5 f/ y# G* m& ]8 G* \

  36. 9 P; u' P# q6 {4 _2 s' S6 V5 X, H# N
  37. }
    ! w$ Q6 z" p! v# H2 e: \

  38. & n: ~! y) ^1 V3 h* N
  39. /***********************************************************************/
    " R6 {. D6 f" i0 }

  40. * ~% g' u* f. f7 H+ \, z
  41. int  EQ_is_lt (double s, double t)
    : i6 c5 a2 f, e

  42. 0 f$ f( s7 Y6 U  T! I( ]# P/ M+ Z+ W. k
  43. {- {" d8 b# g: w" U: V5 T

  44. * e0 A! J4 ^* n' K  f  H
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ) }9 x* j1 T1 e$ w
  46. 2 t3 G) B( E: e( b) |
  47. }2 E' d0 {% y4 V% V
  48. - q' O  C' S4 s$ s3 t$ E6 l+ C
  49. /***********************************************************************/
    , j8 k1 k7 i, \3 ~' W3 F$ H

  50. 4 D- o: M' X4 n- h* M8 ^
  51. int  EQ_is_zero (double s)$ v  b1 e0 O; ]9 S  O8 f

  52.   q& D, R" o4 J& h& n
  53. {8 }; e5 G; h6 z1 N/ d0 y+ D0 S* h

  54. : D1 G7 O8 k+ R6 H  D5 B% ?
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }0 c, Z3 g, e: ]+ ?
  56. " N0 |* s1 h0 X, S$ [7 g5 P3 s/ Y  D
  57. }
    3 G2 R5 d/ J5 [& ?6 e- h4 Z

  58. + p9 J* K6 {6 X/ S
  59. //=============================================================4 r' c6 ~& E% ?- O( Q5 @  d
  60. , z4 T; a0 k# t# ?$ Y- @$ F2 z+ @
  61. double ARCTAN1 (double y, double x )( k* W! T- u  v. J/ ?
  62. 6 f0 n3 }5 a& Y2 ^! J0 C/ H
  63. //#=============================================================
    ! N! [  j5 D# ~4 z3 u& I
  64. 3 P. s2 f# K; N3 R# \
  65. {" p( m$ D; R5 N' D; w/ K1 ~+ u
  66. " B" {0 @# K- w
  67.    double ang;
    5 v: x: e& e. O
  68. 5 i9 \# V1 V) f
  69.    if (EQ_is_zero(y)) { y=0; }
    # C8 {; u* _* v% ~2 _

  70. / e% [; e, y6 t7 b. y# @: V
  71.    if (EQ_is_zero(x)) { x=0; }
    2 z7 O1 x4 A. N( X) q
  72. 1 ?4 S  i/ t3 b
  73.    if (y == 0 && x == 0) { return(0); }
    ! C. ?+ S! f  M" ^  c# k+ J
  74. 4 P2 f  e. n4 A  s
  75.    ang=atan2(y,x);
    ( [0 I$ T) M8 a
  76. & I1 X  d$ o, b, M0 s0 J
  77.    if (ang < 0 ) {$ m( G4 O+ a) V+ P/ D$ ]; {
  78. ) J2 }$ a0 g" |4 T+ H: \
  79.       return(ang + PI*2);) _% ]2 O7 Z- Y  H! m# t8 z
  80. ( w: {. [" U& ^$ x' J
  81.    }0 R" L6 }/ s( @* t% e

  82. 5 l/ L0 _5 ^9 M
  83.    return(ang);
    & m$ N2 R+ F8 S6 J# z, ~

  84. 3 e/ v  H6 Z3 y6 E+ D
  85. }3 S; j" y. m: Z9 {/ D. `
  86. * @2 e0 ^0 c  V6 z
  87. //#=============================================================5 r, f# s! Q* c. D2 v- y7 `

  88. $ Y- u* @$ n1 N; I. @1 L4 y
  89. double ARCTAN2 (double y, double x )0 j. m! n. v1 v
  90. 0 e, C4 ]8 a% s2 q
  91. //#=============================================================- J* k0 `$ W; t- [+ c0 T
  92. - U, s: r* A  z1 [$ Q. W9 S" w
  93. {- D) c, v1 S$ P
  94. 1 q4 }! J: j: k! ]% ]4 U
  95.    double ang;
    + F. `0 @$ O; |& Q
  96. . Z- Y9 v) r% V$ I- q
  97.    if (EQ_is_zero(y)) {
    # G/ t3 L3 e' g7 _$ c8 {% i

  98. ) A3 v+ B0 B6 k2 @* E1 N1 Y: M
  99.       if (x < 0.0) { return (PI); }9 j( }' i4 \; j' j8 A" g; V

  100. , J% `6 `" n- b
  101.       return (0.0);
    4 {2 w8 S, y9 Q) N1 j+ {/ @
  102. : w. r9 @# H/ G( O6 c
  103.    }
    . ]. `' D# {# F; @; v, u, Z
  104. ; i- A' _$ u. `: ]9 W# X
  105.    if (EQ_is_zero(x)) {
    & u' W$ R5 X4 p9 G' b. c; Z6 s1 i

  106. . f1 o' X6 o- H* f+ j+ H
  107.       if (y < 0.0) { return(PI*1.5); }
    2 Y* w' G4 U) T2 B0 m& b+ a+ T3 ]. c

  108. / `' Q- l. S1 }& i$ a2 R& S- R
  109.       return(PI*.5);
    5 d) H2 f9 [2 R: w) R
  110. 4 p! l7 a' x3 H8 j
  111.    }* g3 f& [& ?: b, s

  112. . ^" q1 W! R2 ~# }& p
  113.    ang=atan(y/x);! U. p! N# W4 l' w; u$ _
  114. 0 ~2 L4 Z$ A- y. u
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }% O- x: @7 {2 ?+ i! {9 _
  116.   L9 p( o5 A  x* x, i5 y% }* Z
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }( c) O# @9 N1 g* C0 j7 G4 O

  118. : i3 u8 _# i; Y' X# h' a- ~# l/ H; B
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }/ F' K; W! K) C6 P8 @  i

  120. 3 y9 K" X& O) _4 n+ h
  121.    return(ang);
    $ \# `! X9 M4 k$ M/ _% h% n& Q
  122. 2 o, O' X' c: ]8 [5 @
  123. }
    - Q9 x# c; }' ^$ [3 T( M
  124. & g! l# c+ u. B, W; G" b4 V) g$ ~4 }
  125. //#=============================================================
    # \2 i# y. H2 T6 _, t3 U

  126. & M2 m4 w# `( C& H
  127. double CheckConst ( double angle, double constvar  )4 |* s6 N- b1 w- i' U' ~
  128. / u* e- Q4 h3 Z% J. A' F
  129. //#=============================================================
    - a" f7 v) M9 ?: L* ~6 q1 W2 h, X

  130. 7 y' K; P4 Z% R7 q" o( h3 {
  131. {% I& G9 H) q) S$ T

  132. ; O5 a7 U3 E) V: F
  133.    while (angle < -constvar) { angle+=constvar ; }" D" R/ z; c  e1 c# S5 E3 V8 _
  134. $ l* g6 ]: h5 B) j- c
  135.    while (angle >= constvar) { angle-=constvar ; }
    : f9 p. E$ u% y! Z9 K  t7 g

  136. $ f# `6 \% I# h& n+ U8 k4 j
  137.    return (angle) ;7 [' \5 F; I; s/ n; R& H

  138. # X/ z7 S& G& W2 x3 r( a0 a3 S
  139. }/ G0 k! q4 i: K% p
  140. % ~7 Y' \3 {, A4 p. z/ x
  141. //#=============================================================
    - D6 M5 m3 n# z

  142. - f0 V* i# E& Q- [
  143. double Check360 ( double angle )
    + H1 L) p! `2 ?# n- A2 Z

  144. / P# e! `, U. ~+ l! P
  145. //#=============================================================3 |- m! {* |. Y# A
  146. / y! U* Y# r# H8 d) V3 R0 o2 i. G/ @
  147. {* n# d6 q: p* b9 R- g
  148. ; s6 R! x$ L# R
  149.    while (angle < -360.) { angle+=360. ; }% G4 [, Z1 z- }4 [. Z

  150. 8 j5 V9 E% j, s/ S- e- Z7 _- W
  151.    while (angle >= 360.) { angle-=360. ; }
    ! N8 F6 Q. Z* `+ t( j- H* T7 [
  152. ! t, t- U2 n* s6 r* H4 f$ o
  153.    return (angle) ;
    7 ~  s1 m; r! z
  154. - t" X3 K/ ?; Y9 I, \: U
  155. }! [0 m3 i0 e: x

  156. $ L9 f& K% F9 l$ M; u0 @( C6 K
  157. //#=============================================================
    ) M, h* ~, g* w# W9 p5 [, r$ s
  158.   \2 |0 _! B+ s: e$ c
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    8 N" g" e0 f1 ]) ^% M
  160.   \# Z5 k  j! m; i: W5 v+ Y
  161. //#=============================================================
    5 Y6 K2 {+ [! ^* y! T! y0 g

  162. 5 @1 \3 D8 A  s* {8 F( E7 D! \
  163. {) X7 ]$ d& u9 i9 m

  164. " f# S* Q9 c" D0 q
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }5 V7 o6 J" g. Y0 y5 `% }7 g
  166. 0 X! \7 n4 l) F8 _
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }; Q7 X, P8 @8 v8 U) w) r6 a- W
  168. & b; Z* d- U' s+ a; @: x* p
  169.    return (angle) ;' ~4 N- l& r( E3 e3 n+ `- O
  170.   l7 ~; W' m2 U+ |, i7 V
  171. }
复制代码
0 n2 E4 s- t" C4 }) d* |- }2 D6 M
以下为摇篮5轴计算过程代码
* y( U8 m$ G6 F5 d
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    " x6 n- d! W, v" w& H2 d

  2.   e- x! V$ v  l2 r+ m5 h
  3.          j=0.; B1=0.; B0=0.;
    % ]6 b  l" R, z

  4. + |. T! D1 a% n2 t
  5.           if (EQ_is_ge(i,0.)) {
    3 l8 U: Y5 d/ S6 R
  6. . `6 ^3 L, K# L8 O6 ]" q
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    * {& _+ V- e5 _$ Q
  8. . s' r' m( `$ f/ E5 K, Z
  9.           }
    + A: G: i  N7 y# {6 ?# |% l! O* e6 f
  10. % I7 _" C9 F+ t' W
  11.           if (EQ_is_lt(i,0.)) {2 A* d4 V- [0 v# e
  12. # G5 T# b; K7 n  E( Y' C( N3 |
  13.              if (EQ_is_lt(k,0.)) {
    & W; j' c; H* `4 r

  14. + `9 b0 u4 B6 F
  15.                 B0=atan(i/k); B1=B0+PI ;- z& r. a4 _' D4 ~, U6 C" }
  16. ; P" ?$ L6 ]2 ^8 W' w# O
  17.              } else {! K% o+ n) [7 \

  18. * f( w: l9 m" T5 n
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ) f7 ^# C4 z: N

  20. 2 b) r' t% i3 t0 a! A0 ?: @
  21.               B1=2.*PI+B0 ;
    0 e) v6 `: X+ \7 A* C. w2 T8 z
  22. ; W# ~  w3 }4 x' E: `6 V) p  e
  23.              }
    5 d3 K: Z) N4 K  h
  24. * ^- H8 y. `/ {3 _' b9 R: i) V* v
  25.           }
    ' E2 B( l# u/ D" r' z- V3 _
  26. / T& _  s& ]) J2 k1 B# V
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    # U9 O! s% {& j1 A/ R

  28. 8 R/ J5 t+ ~/ y9 M5 T
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));, E0 e+ H; C1 f5 u7 w8 {0 C. ?# S

  30. ) v& `; ?( ]; i+ q2 |
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;. n2 b* ^' ~2 M: J+ @2 W; F+ v

  32. ( C, t6 \; b) M
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
6 |3 t  g# s" a' \' U7 G: t
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
; G* R3 ?! c. z
) v- m) y0 [. b7 ~ 640.png
' C, n- v/ E& H2 z% A. L0 O# y测试结果:
/ t7 Z' M) i" W; `7 y 6420.png
) v1 w( r) \) h- o0 A( H- g9 f
反向测试结果 6410.png + M5 j( r" T( W! a

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

172

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-17 11:20 , Processed in 1.002074 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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