找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11512|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    9 h- B: Y  x8 i6 c6 ]' o
  2. int  EQ_is_ge (double s, double t);
    0 Z' K" \  z; K
  3. int  EQ_is_gt (double s, double t);
    % d4 s0 C/ ^6 J- g, b4 m; l
  4. int  EQ_is_le (double s, double t);5 F; Y# e; [9 c1 {* |
  5. int  EQ_is_lt (double s, double t);# I6 M9 q" k1 i* n8 y
  6. int  EQ_is_zero (double s);
    8 L1 i  @" ?  d; U$ K) U
  7. //=============================================================
    5 x# N# G, G) y0 y: F* a
  8. double ARCTAN1 (double y, double x );
    4 T" B5 @3 D; @* Y
  9. //#=============================================================# e* k& P) x* x/ P
  10. double ARCTAN2 (double y, double x );) Z- }& K  P- j& X+ ?6 W  y
  11. //#=============================================================
    * |" n* T. w/ @
  12. double CheckConst ( double angle, double constvar  );5 p/ H3 S" O# T$ k8 i$ A. {2 X
  13. //#=============================================================& k2 F# Q+ Z7 I  `+ J- g2 z/ z
  14. double Check360 ( double angle );
    / P3 v: @4 K/ g5 p  X% `6 G" k
  15. //#=============================================================
    7 b% S) W, V) E8 s6 o$ p" C2 x7 b
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );; m" [" I) D: E2 l% }5 Q7 N
  17. //#=============================================================
复制代码

( j5 _; s7 G' X以下为部分源代码,用于判断,计算角度等
4 \: y) z$ q! @9 Z8 }
  1. int  EQ_is_equal (double s, double t)! I! {; b, ^( L% \4 g
  2. ! g% O/ s) n( O3 [) R- B0 S
  3. {5 B# l) Y, t0 M3 g

  4. 2 ?( X  j( K" d% C
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }8 K( M' A6 K' w# f/ x

  6. % L- b/ d" J1 i( ]& _, k1 b. g8 ]
  7. }2 X0 {% z+ X0 z7 v. ^/ H

  8. 3 O) V) \8 \( m3 r' r
  9. /***********************************************************************/7 H4 v& _1 O! s! ~4 b4 u. z$ e2 H
  10. & f, R- H( V* ?0 l0 B
  11. int  EQ_is_ge (double s, double t)
    0 Q4 c& w  V8 ]% |( h! F
  12. 8 ?6 F) l$ D8 r# K) i. ^. T
  13. {
      a5 `5 |7 \, j  i% f5 v: }

  14. " X( y/ h# o9 v- P5 N% o4 S" g; ?! Y
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }" C. g- s. H/ b  @! L- q. i& X
  16. * U1 P, K( `" a+ w9 V
  17. }8 \% D6 M- p) q6 t8 A% h% o

  18. ; F/ [* W6 }- ~: j
  19. /***********************************************************************/
    + I: {6 j: D9 P. |9 j: N- J
  20. 8 F7 D* F$ s5 F1 x  F, c8 ^3 R
  21. int  EQ_is_gt (double s, double t)
    % r, o7 y$ w5 R8 Y8 r8 h
  22. 8 ?! R5 T; W, n; B
  23. {6 s. `. w2 U% b. I  q! K6 H; N: l: ]

  24. 4 W$ O, B5 Z- ~
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    8 m9 W. x4 d$ O" {0 q3 m- V
  26. 7 ?0 x7 V7 Y4 J3 ^( n0 }: j: `* r
  27. }
    / T4 d# R. F$ i. ]& }0 s

  28. . L9 K6 V  x+ p: \
  29. /***********************************************************************/1 W" N( e' v# ?: X" u

  30. 2 b0 y5 e. U" {! ^0 c% t# r
  31. int  EQ_is_le (double s, double t)
    7 {- A0 w1 T. _9 k. {8 V

  32. 6 w& c9 @* }7 ]8 `4 `/ q9 \
  33. {
    1 ?3 j, V( ]7 ?( N0 X0 |

  34. 0 p0 b" `- T  H: {1 O! p( v7 A
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }1 M/ j$ w  }0 e* A5 }9 H) b& q
  36. 9 m7 o9 X/ _0 ^9 K1 ^
  37. }
    " e6 I, r- _4 \4 V* W5 t$ l

  38. 5 {8 X* o5 s/ E' \9 k; ?6 T9 b
  39. /***********************************************************************/2 f  v. m, M# Z- Y5 P

  40. % _/ O$ R! ~, Z* i5 o
  41. int  EQ_is_lt (double s, double t)
    , j4 q# h/ x4 o9 m0 h" T1 l+ g, F

  42. . X4 O6 v6 B" H6 m1 T5 v  P
  43. {# J- \! z6 L( x" n" L5 {

  44. 0 j! ]8 j( a3 S$ p
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }7 U6 X( u/ C* y  @  F2 w
  46. 1 c6 Q/ A) n5 m7 X
  47. }, x# B2 T; o' ?: e- i% W

  48. - O( t/ i- N& o) v" o8 L, s
  49. /***********************************************************************/
    0 n! T( Y( O2 u

  50. 0 H' {1 E) f  I6 C. l
  51. int  EQ_is_zero (double s)
    , }# b' s- q8 _
  52. % n; f* \" K' U3 m/ v9 A; r! Z
  53. {4 V+ N( x* s9 q9 _# k
  54. ; G5 H9 z. m$ F
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    . r, @" G3 k" w0 t4 A) j

  56. * O& H! q2 E& }- ^0 z; x
  57. }
    & x0 `5 b) T' v
  58. - E9 _+ a2 Y. d4 N/ s0 r
  59. //=============================================================* S! D5 A( N) i% K) @5 m
  60. " A# d# M: h# V0 E+ G
  61. double ARCTAN1 (double y, double x )$ G1 {( P8 [7 Y2 s6 X& V8 Y/ C

  62. 2 f& ~/ M7 M* _  T/ I
  63. //#=============================================================
    & U4 @4 F# O+ |. V; s/ a9 d
  64. / M- ?1 Z% T% E# u8 N$ Y6 T$ ~' F
  65. {  v4 D  I( j. x5 ^1 ?$ I+ e
  66. 3 g# |7 r9 O. T$ K0 s9 T- b
  67.    double ang;
    . W' f* ~: [1 S4 @2 C$ N' z/ d

  68. ; e' b! k' p# h" Z
  69.    if (EQ_is_zero(y)) { y=0; }
    1 j7 h5 e7 }$ v# _( c0 u$ x

  70. 7 B6 B& d" ]$ B( R) @; o
  71.    if (EQ_is_zero(x)) { x=0; }" x: Y- P  _, W9 q! J

  72. ; a& s8 _/ Y& K3 H- `
  73.    if (y == 0 && x == 0) { return(0); }1 a6 k7 R5 O, g+ `9 P; g& \; e
  74. - R4 u; W1 D7 g% O; }
  75.    ang=atan2(y,x);) b4 H- T1 V. T$ b4 [$ v2 X$ h- i
  76. 8 N. `1 X. T9 w0 @+ O
  77.    if (ang < 0 ) {
    % r0 U4 E6 F# K; _+ Y9 s
  78. 2 {' w1 R$ s7 R. `
  79.       return(ang + PI*2);
    6 M6 P# h5 _& {- D8 k
  80. . h' p7 j$ @: K& A4 M8 J
  81.    }
    * A& n( b  \9 [/ G& d* L
  82. 8 p( i6 P. p3 s. \/ _7 I' q; W2 |
  83.    return(ang);/ D' H% e/ M& H3 q* x, F

  84. ) H  B3 E! {7 l2 K7 [1 f
  85. }6 q0 i+ j$ ~9 c% p& W

  86. ! \$ Z. M% B# N: A" }: W
  87. //#=============================================================3 U+ L% v8 V- k, l/ H7 o6 J. j" _
  88. 6 L4 J& T8 S# _5 v+ u
  89. double ARCTAN2 (double y, double x )
    6 t3 I! z' E5 m& d6 t
  90. 1 Y. v, l9 J% z# {; W2 ~) |# D
  91. //#=============================================================# z; r* h) t- B4 _

  92. 6 e8 _9 f, |; ?: `# P1 B( l- i: Y
  93. {
    ( e. x( [% |1 o4 r+ g3 I
  94. 5 @/ H7 K- ~2 o. \
  95.    double ang;( o$ z! L# D* l. O2 K

  96. : Y4 A: C( }4 C; y
  97.    if (EQ_is_zero(y)) {
    ! O5 n4 m. g& L) D9 \/ Y. w
  98. 9 x' \2 ~. [( e) N0 g( ^# u  v6 E" u
  99.       if (x < 0.0) { return (PI); }# H9 S9 U* P6 [3 H3 z3 C) y. r
  100. 4 f, M' a0 [) L2 d6 u
  101.       return (0.0);/ M7 E# V, _; P/ K

  102. ) ~/ @2 c3 a" @5 k- @, {
  103.    }& O; b# g0 q9 D* M+ h% I
  104. 8 }! r* C* H' z( {' G
  105.    if (EQ_is_zero(x)) {
    ' d( A; H0 H- d* T" t
  106. + E7 v7 }, l- U: s2 y
  107.       if (y < 0.0) { return(PI*1.5); }
    . _+ g/ b( |  ?

  108. 7 u6 c( K0 Z& I1 K$ l# X' V4 s5 }- ?
  109.       return(PI*.5);
    % w! b8 ]% O) D/ b% W- h7 X

  110. 0 \* ~' X7 n6 ~# B* v4 s) v1 Q
  111.    }
    9 Z: W$ y  e% l) c3 U

  112. 7 _4 w! H; g2 y5 K" i2 Q% z7 \. e$ T6 J
  113.    ang=atan(y/x);
    * n* i2 X' ~! T) \, E6 ]' K9 u+ ?- Y

  114. - ?2 E6 Q/ V9 i' J2 h9 {& n: |
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    / {, V; d, L# E

  116. 6 K% t/ v; x( r3 I$ C
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    6 Z! u7 ~- s2 ~8 |+ p8 D

  118. 9 n6 u6 B4 n9 [- h( o6 t/ S
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }. o( w' z8 ~3 [
  120. + S% F. ?, |( h7 @
  121.    return(ang);( k6 {# c# V+ |6 g! q+ |3 d. ]7 F
  122. , `; l% G, g9 d+ m8 G8 K
  123. }7 u4 }; I# \2 u# k; E4 B8 L% T

  124. # P& V9 h8 I/ F3 A% l, J3 c
  125. //#=============================================================! f% C! g/ S( m9 q
  126. ( J$ F5 |4 n1 q& l* G* o
  127. double CheckConst ( double angle, double constvar  )
      h* K( k1 r: E$ I5 g, U; d- z( D1 z
  128. 0 D. E1 b8 t. }! d) P
  129. //#=============================================================! u  `+ L! c0 V0 D

  130. 1 j* x$ G8 x  R' A3 g
  131. {% i4 }/ Q' R4 \3 X$ ?0 J
  132. 9 A+ @  K2 F6 a6 u/ ^8 z6 i% V
  133.    while (angle < -constvar) { angle+=constvar ; }
    * H# s1 w. j: C7 u0 N, d) X

  134. : |- o4 y+ s9 D; [+ F6 _
  135.    while (angle >= constvar) { angle-=constvar ; }
    : F8 C; g" z- G# X9 T  e! C/ u* m

  136. , d, D0 O# R- q) O
  137.    return (angle) ;8 B! i+ L+ v. B+ {

  138. % ~9 p% L; z+ ^- o' c
  139. }
    . r. _8 f5 {) \! G6 l8 L

  140. # Q* f! M$ }- x' P  y
  141. //#=============================================================+ t. U) [/ h- c
  142. : C) }' V7 H! Z5 r: l$ m6 c
  143. double Check360 ( double angle )
    1 Y0 y( @1 K' Z, s  ?3 U2 v3 P

  144. 1 j9 f+ q' q& Q& X, S
  145. //#=============================================================
    : m8 ]) y# P2 H& \# r5 U- g& `
  146. ( z# I( T5 Q/ B
  147. {
    7 e2 `3 O- \: K' @1 X8 z, K# q( T

  148. / s' I) B8 t* T; |) `4 O: y4 \
  149.    while (angle < -360.) { angle+=360. ; }+ {6 q# q+ E6 S6 A7 ^
  150. $ Q' M# `! H5 D) o6 q
  151.    while (angle >= 360.) { angle-=360. ; }7 _" }' l/ w6 ?
  152. # G, M) n: D6 {) b8 A# r# J% `
  153.    return (angle) ;1 n: d" B0 \0 i; h; C+ @

  154. 3 s9 t! w* B. N. v' X0 @0 ?3 V
  155. }
    : I# H3 l% l, R% N
  156. 4 F$ R0 d, o, B: e+ A* g
  157. //#=============================================================
      ^4 b. f& c' Y" O" ]
  158. ; `, h  d5 V: X# V+ W
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )! ]! I* G6 s/ Y& k9 a0 c* Z
  160. 9 R8 `& k0 `# G! A+ m8 ^/ h, T
  161. //#=============================================================
    & h9 L. p$ s1 Q2 D4 m0 p8 |
  162. 2 O- j/ N, u% b( G1 I9 G7 M* I" y( P
  163. {
    7 m5 I2 S5 \6 \9 F9 f% l, a
  164. " W; ~" O7 P, b# |, H$ ]3 \* D
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    * N  y  f- E7 ]

  166. ) c6 ]8 y( c. E& x" u3 E
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }4 G2 O% M4 l7 v( O$ t

  168. % o" l3 A4 ?! w, ~- U. n
  169.    return (angle) ;
    5 c5 }/ q* P8 V" d7 L/ g
  170. 5 h" {, ^* B3 K) M0 l+ J
  171. }
复制代码

6 {; n! v- H2 s. P7 ]! I" U以下为摇篮5轴计算过程代码. @# ?1 ~/ u, A  P# S! R
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    - H0 C- ]/ k6 }8 p
  2. ! Z7 v9 j2 _% C+ z. O% n
  3.          j=0.; B1=0.; B0=0.;4 }) W+ r1 ]$ c" O
  4. ! `7 `; z  c4 f/ _4 o( J4 B2 S
  5.           if (EQ_is_ge(i,0.)) {+ m) a8 m3 O( N8 E- @+ J# O7 z

  6. + C  [$ Y' F2 C
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }# ?. H3 d% x% K4 o& i% m

  8. 3 O$ w8 D9 Q; a, ~( @
  9.           }" R  z/ l$ s+ M9 Y7 [

  10.   l" x1 h$ [0 B1 Z: \$ S4 Z
  11.           if (EQ_is_lt(i,0.)) {0 G8 o  L, B* G1 Q6 C+ \
  12. * a6 Y, G5 P' B+ U: {
  13.              if (EQ_is_lt(k,0.)) {& ?  d9 t) j$ l/ m3 h0 a4 L( y

  14. ' D* J; a5 r, s/ v( \5 f- g/ f
  15.                 B0=atan(i/k); B1=B0+PI ;5 J9 s8 K5 C7 d' d+ U

  16. % P  x0 w: I; ~* i
  17.              } else {
    8 q) Z- o; F7 b) K) d/ V
  18.   {' s, S; A: U! N
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }- J: J+ d( @% k+ T

  20. 4 G3 P2 |$ d/ L/ K9 _6 G% ]1 d' p
  21.               B1=2.*PI+B0 ;
    $ q) A' d1 t  |3 \

  22. 8 E# y6 D, g! v4 p5 W5 \/ x' l
  23.              }
    2 [, p! W: u- V7 \3 ], O4 Y5 _2 T

  24. 8 [" B# U7 o1 ~5 t- A
  25.           }8 O- \: ~8 T9 x0 k' F4 G
  26. + f) Y' u! N! T9 n
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;) C0 K( O5 B: l+ E3 N  ~( G8 O
  28. , U/ K# d$ W5 e: V5 P5 a
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));. n& \" z; a4 |6 C. n1 I

  30. * _* F9 p' R) L2 ]! I$ s- f5 v
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;% Q+ _) @0 X' Q

  32. * R3 a3 T* k. u+ ~; h0 U
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
* p; m, r( I: s- F
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。1 z) k3 c# u8 [1 i
+ S7 z5 k- S+ }# h
640.png 4 \- I1 w8 B- W% b! f
测试结果:2 V- P0 T/ e5 F# _; k3 o
6420.png
* E: @6 I, a- s5 D) T. W. L9 @) {: V; S" r9 W6 P
反向测试结果 6410.png 3 P1 D; X9 L) J$ O6 i, s0 w8 ^

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

346

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-9-23 21:33 , Processed in 0.171699 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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