找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7972|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);% N6 z3 |. C* B) R4 r4 o) s
  2. int  EQ_is_ge (double s, double t);0 b! R0 ], |) k. F
  3. int  EQ_is_gt (double s, double t);
    & H# P3 f/ C3 q7 g; G" S# n# V
  4. int  EQ_is_le (double s, double t);% c3 F% i4 i0 k2 x, a0 J% s% U' ?
  5. int  EQ_is_lt (double s, double t);
    7 Y* L1 O3 G; m' e6 P
  6. int  EQ_is_zero (double s);
    ! @- g$ F( t" e
  7. //=============================================================
    0 @: `" d3 s0 p( D
  8. double ARCTAN1 (double y, double x );
    5 s. e7 C3 @7 O2 k
  9. //#=============================================================+ F, V8 _( _: Y# V- n- r
  10. double ARCTAN2 (double y, double x );! Y5 \) w: x) N, f. O  w. T% N4 w
  11. //#=============================================================! p* p5 g' v$ Y0 z. I
  12. double CheckConst ( double angle, double constvar  );
    ' c6 `0 Y& W9 g! M
  13. //#=============================================================
    9 b% u2 Z/ Y+ G3 u5 H8 n5 ~
  14. double Check360 ( double angle );8 N/ D6 ^3 s; Y+ q1 z
  15. //#=============================================================3 |" ]) x! q* d1 V* `$ K$ n
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );  d" M  W* v$ P- E; h+ ^) }( Z
  17. //#=============================================================
复制代码
+ N  i8 D0 P7 h" h
以下为部分源代码,用于判断,计算角度等9 K2 j0 H' V; ~
  1. int  EQ_is_equal (double s, double t)) R4 x: {& e! N& \( }

  2. / l: X; p3 {7 i
  3. {
    0 O6 N& w+ A, K0 F3 @3 a: w

  4. ( F' C1 @; Y1 J( A4 C; a
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }6 y2 y8 ?: x* M. a1 U1 b
  6. 9 D) B4 [  X/ f; b& O8 N
  7. }
    ; }& `* z9 s4 `; j

  8. ) A) m' Q; E; F
  9. /***********************************************************************/
    ; q  Y' M- n/ j6 k0 M

  10. # M% E2 S0 M1 N% q
  11. int  EQ_is_ge (double s, double t)4 Q; g0 U3 f& {7 d4 P/ `

  12. 5 d4 a" V+ b& o; c* ?
  13. {! {+ U1 b# |1 X0 b( X# P

  14. & x3 g; {4 C  L) ?
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }+ f# U- d4 O2 j" |
  16. 5 L- @9 Z/ w" e# Q* m: o
  17. }8 C8 {8 x0 X' q: Q; F2 M6 P, U

  18. ! ^0 N/ F  P2 h4 U2 X. v( E9 I
  19. /***********************************************************************/
    4 q  E7 K- i' h6 g5 i% G3 k  z
  20. 2 K* q0 R  Q) }  J, k: r
  21. int  EQ_is_gt (double s, double t)
    8 M9 Q7 B6 ?" g8 {9 y3 ^! M

  22. 4 `+ f6 q) m3 {8 |. {$ S
  23. {
    9 R/ H) G& f7 r6 j, n7 T7 X# Q
  24. 6 O, d" [5 L& Q$ O- e
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }2 T% B! `, k( I5 M
  26. 3 K" E# b# g( \
  27. }
    # u9 ^4 D. R$ n3 Z! j% R

  28.   o5 f4 d- V, i" j3 z) T
  29. /***********************************************************************/7 a3 `0 S# \; B# R; w, _4 \
  30. " U/ u. Q( F8 i. ^6 l+ L+ G
  31. int  EQ_is_le (double s, double t)( U& P+ s6 e; `2 p

  32. - c  I) v% w- q$ |9 c* C+ T+ T
  33. {
    * D6 s) L/ |6 v7 s: g

  34. ' T) _) `7 _; m8 r6 p; B+ w# f
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }' a" I/ X' ?* \! Y( ?
  36. + V- q9 y( D8 N$ S& ]: `
  37. }5 x7 P$ v- k' T5 R8 C# ?2 B0 ?

  38. " o# ]5 ]4 R) S. m# K6 R3 g2 O0 z
  39. /***********************************************************************/
    1 s$ s2 y. i2 p; J8 d" n: d7 z
  40. & ]! o& [: {9 a' H1 P' T$ N; Z3 i
  41. int  EQ_is_lt (double s, double t)% O. S! O0 e/ y: D: P) b; ?. Y7 F
  42. ' s; @4 w7 F: s' F  A, x& I1 F" B
  43. {& _  S4 q5 o9 K- P

  44. ! `- L' l- Y" t8 M9 ?$ T, G
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    ( j; ~" D; ]- V" g: d2 e) }

  46. 7 O/ Y& g+ V- R; Q  o1 G" o
  47. }
    6 F1 B. A: S7 P
  48. , u5 k9 S; _3 I2 ?8 B0 @2 k' u
  49. /***********************************************************************/
    1 B" h# _3 }) v5 z8 ~- o$ J2 i
  50. : d0 Y' P: m3 a3 m6 k) u
  51. int  EQ_is_zero (double s)
    3 C$ t3 ~3 i, b) Y% A' R
  52. * i  u( O7 y$ K5 N
  53. {
    + \3 }( J8 p0 l% ]4 q) V; N
  54. 2 U7 v) Z1 r/ i
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    % i% }  @5 d& ]% H# b4 L

  56. & o$ y9 c( @9 s. p# `
  57. }
    ; ^# D( P/ ^, G) t& I& G. J

  58. $ p, m( P1 d* r
  59. //=============================================================
    1 k- j8 \# @7 i0 H

  60. : T( c' C' i/ k. I
  61. double ARCTAN1 (double y, double x )
    + z' H5 ]! R* \6 w: a

  62. 5 S- O  z; q. G% d1 b  X4 w! l  o+ ~
  63. //#=============================================================
    7 X( Y! Q# }/ J+ W  n9 S" Z& T1 C
  64. * i2 r- {& {: A% b5 e$ R
  65. {! }5 M" v3 q9 `0 W/ \/ V
  66. ( C$ R. F  {% q
  67.    double ang;
      @. c  `9 B4 e
  68. 9 O1 W7 J3 o9 z6 B2 Q" R$ X; a) j9 x7 h
  69.    if (EQ_is_zero(y)) { y=0; }
    4 `2 }! a% n! I/ E' w8 l

  70.   I, _- y/ \- \& a3 D. f9 C% T
  71.    if (EQ_is_zero(x)) { x=0; }
    8 a$ A. x$ n# C: z5 G
  72. / _* F" Z2 x, A/ |- Y( k! a
  73.    if (y == 0 && x == 0) { return(0); }1 R7 ^4 e, T) M, [7 \7 R. [

  74. 1 L- C5 N" y* l; ]
  75.    ang=atan2(y,x);
    * T  Z4 J9 n& F* ~, y$ s' V' i

  76. . Q! W8 I3 E" C; c  G6 J
  77.    if (ang < 0 ) {+ L3 z: Z- i, `) O* J5 I; e5 [8 Z2 T6 \
  78. - {3 H" a- y7 [( K- y/ C
  79.       return(ang + PI*2);
    5 [" [9 W) u0 S3 C! b
  80. 3 x, H9 N7 @( E( l/ x* D
  81.    }
    + {; j4 C/ j& X

  82.   H7 N9 N, v. l% k& K. G
  83.    return(ang);) u) J; ~/ D4 m

  84. " |- [. J6 s2 T" [
  85. }7 T5 R5 |/ Y/ |  y+ u
  86. * C7 [3 I' Z% G+ K' K' W% R+ Z" `
  87. //#=============================================================
    & Z; A! m% w  n$ L1 _; @0 @
  88. 0 W3 P, L! }3 x8 z8 f6 }# b$ F
  89. double ARCTAN2 (double y, double x )$ q  k: y& p5 m  S

  90. 8 d+ g6 t! d6 `3 J& D
  91. //#=============================================================
    ! R3 Z. a) N( N

  92. 7 s- X' u. w' b3 Z5 q
  93. {' o( N) w6 V' F( `! M) `  p

  94. 9 R) t2 @5 L7 X4 D! n- l
  95.    double ang;! n' Z7 U5 k* Z, b- D

  96. 3 @6 g; M/ f: J$ |
  97.    if (EQ_is_zero(y)) {
    * R( V% H+ Y* Y% h3 r! A/ i9 P
  98. 8 k6 h+ E' e/ {( x3 D. a
  99.       if (x < 0.0) { return (PI); }
    " O  `' D) H4 O1 x& |) y. k
  100. 5 N* Y/ A5 W0 a
  101.       return (0.0);6 E: V: \$ ~2 K: T& a7 v  W# _

  102. # n1 t8 G8 I) P1 L
  103.    }- {' i3 \3 Z' n
  104. " Y" b" r% l; `4 J6 a* A! _
  105.    if (EQ_is_zero(x)) {
    " g8 p* T8 C- P. f$ }* |: a
  106. $ t+ O* G: o7 t2 D; Z
  107.       if (y < 0.0) { return(PI*1.5); }
    9 w+ v9 M, A: D6 ^7 d% `2 y1 g/ E& u
  108. % C1 N6 `$ U% c6 B4 [" F2 p8 o
  109.       return(PI*.5);8 R! g! S* P# S

  110. 7 [7 e1 ^7 E  E* u7 G8 E/ V* |
  111.    }
    5 j5 X$ E5 v5 X9 G. o

  112. ) i$ s! h6 M' M* M& d/ Y4 q
  113.    ang=atan(y/x);
    7 J4 ~% R! L- I5 L$ \
  114. 7 a1 B7 K& E6 G. @0 z+ t7 b- `. f
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }" Z! R' |  }4 s: a: r# `# W

  116. / h. h) U$ k# O7 X4 D% R, D
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }: ~/ l% D# a' d
  118. 5 |, K+ Z( s5 p7 P
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }# {5 P2 q" f! _$ [4 C/ o

  120. 3 a9 @6 e9 D: Q+ B3 K3 F
  121.    return(ang);
    ! X( @1 O7 j' `( N: o

  122. ( a! X$ S0 V! _
  123. }! ]6 h- `; h' f6 U
  124. : X1 @  I% y. K. F% K- G
  125. //#=============================================================
    9 l! I) D, Z$ N' X1 \

  126. 3 {$ B' a. L/ e* x2 u# n3 }5 b
  127. double CheckConst ( double angle, double constvar  )" u) C4 b  ?! h% `" ]2 ]

  128. ) X9 ]: t$ j4 {- h
  129. //#=============================================================! Y2 B% O9 P2 d. o* N

  130. ) i) {! `4 h0 ~1 b5 c" @( l7 C
  131. {" W2 k+ S+ r* c/ w# t% b* U
  132. " ~' r% p3 ^- v" y1 T- y' r0 ]3 b7 l
  133.    while (angle < -constvar) { angle+=constvar ; }1 E* f" Q5 u$ b  C; [, t1 e
  134. 5 h& n+ ]/ I) M, K7 d: m+ a0 o
  135.    while (angle >= constvar) { angle-=constvar ; }
    % Z  ~; M7 T6 V: @. ~
  136. % g% l+ K0 X) O
  137.    return (angle) ;
    $ G7 X1 T0 h7 ^2 m
  138. 4 U8 M4 J% E( @
  139. }- ?* @0 L& L3 u  }/ S# k. O7 G+ J  ?

  140. / Q' ]& N+ }( U) H4 o
  141. //#=============================================================, k8 d4 H! o- H
  142. / a* t0 y" @, l9 ]5 ~9 k2 ?
  143. double Check360 ( double angle )' z4 d  h; X- h; T
  144. 4 a0 L: m6 w+ k- }! P( i+ z+ v
  145. //#=============================================================
    5 |; H9 h. [4 s' z/ |  d7 }
  146. . I8 u" I- d1 b
  147. {; }) X& o/ q( X- r

  148. ) H! Y6 O0 b0 L' F0 D
  149.    while (angle < -360.) { angle+=360. ; }# m( ]& w: e0 j6 j' z
  150. " N1 P' @: E7 p7 s! i
  151.    while (angle >= 360.) { angle-=360. ; }1 O( f" l& T9 p; U' ^8 i# ]2 X
  152. 5 I, M2 i, j1 f/ i# b
  153.    return (angle) ;
    5 Q- e1 Q  k+ D7 a' \

  154. / S2 _( H" ?0 B- M5 ^, z
  155. }
    ( x! v, b- _6 W$ X

  156. 7 b$ N8 H/ N. O+ c" I1 F
  157. //#=============================================================" j0 @7 N7 {0 X' F" k2 j9 Z

  158. 4 R! ^7 g& B  ^' ~0 j+ d
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- a. y5 L$ r" W! w: \
  160. 5 o- u" Z, h! y% n3 \% b
  161. //#=============================================================' P, ]  `! I# Q& x+ z' \6 |
  162. # j/ U/ o: c% T* m% x/ ?6 {
  163. {' E3 m% T; F" Z2 X8 Y: ~/ [
  164. - i: z4 Z% F# L1 Z+ J+ o7 _
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    2 O+ @( N& D4 s4 |
  166. ' E  y1 X) A$ m: J
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }- A" n( l0 W2 a

  168. ' A: ?8 ], g4 W9 u! J$ e; b4 }
  169.    return (angle) ;
    * N, I( u0 o4 t0 L( l

  170. ! V/ E3 p' b8 w) Y8 T" I0 k
  171. }
复制代码
5 b5 E$ X* s' _9 u5 u8 i6 ]
以下为摇篮5轴计算过程代码
- E, o/ c- X: B- A! n3 X
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    6 S" g3 }. {% a9 o! J

  2. ; O4 ]2 x% F- y9 P( I
  3.          j=0.; B1=0.; B0=0.;
    ) M: B& E' V9 \5 |
  4.   I0 D9 i- u. ~; j
  5.           if (EQ_is_ge(i,0.)) {" V4 f& k# s& d* j' b, Z% \
  6. # q. v2 {* j, i2 {+ V/ U" m
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    " b. A% L/ m$ O# X+ R
  8. 4 Y" u- C& p8 S
  9.           }9 ]. \. u; o1 C  u) W7 Y

  10. " m3 ]) Y& F$ s  z, a, Y1 G
  11.           if (EQ_is_lt(i,0.)) {- y: ^7 |0 E' E. H

  12. 9 I; h. T) |5 P9 a  N, I! t
  13.              if (EQ_is_lt(k,0.)) {6 S3 @* H4 ~; H- v6 ~1 d; I

  14. . \0 V* p% J% h6 n$ g) I
  15.                 B0=atan(i/k); B1=B0+PI ;
    7 i- y4 j4 P5 l! f# b: W
  16. # J$ j6 d' w- {' A7 A9 l
  17.              } else {4 T) K( S- ^% L5 S4 }
  18. ' A8 R! I' _8 T! R$ g- h  f
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }& I7 }( E4 B' B  K1 v5 @' a; M1 P( y
  20. " B' T* t5 u' E" |7 R
  21.               B1=2.*PI+B0 ;
      h( ^& x4 J# D: y: R

  22. * ]# h9 I9 t7 `# p
  23.              }
    & J2 V7 p. y' }
  24. 0 b$ |# ~% s; v- S% j* l% V
  25.           }
    ' i* Y) }# m$ o9 d* z
  26. 5 l% g' n( p/ X0 T  r+ [1 l4 I5 {
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;9 K+ W6 h" a- x0 S8 J) M
  28. ! K; z7 C" H, X* V
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ; p+ o0 T  e$ x2 s2 D
  30. ; a, u8 w& `% @8 V/ c
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;! p+ `2 ]/ y3 h
  32. / S+ }: W3 T' j7 o( E( U
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
9 O# K4 c7 M6 B" R8 I8 @& ~
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。5 _- A0 W( f+ D% q# x( I7 c
2 H+ p* y5 A7 y# o8 R6 y
640.png ( y& V/ \; P; E: n. Y7 J) c
测试结果:
; M+ M% o& d0 Q6 w( B 6420.png
9 Q  ~6 H" q% P+ \, I
( G5 f7 N+ p8 R反向测试结果 6410.png
; ?/ }7 D1 T8 a9 H/ Y9 w7 L( C+ S

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

270

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-20 02:54 , Processed in 0.381485 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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