找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7398|回复: 3

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

[复制链接]

433

主题

5757

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ( ]; k; ^+ w" F
  2. int  EQ_is_ge (double s, double t);; B0 O& R2 m: e1 B6 {$ A8 z
  3. int  EQ_is_gt (double s, double t);
    . C, a5 D/ h5 c4 g
  4. int  EQ_is_le (double s, double t);; e# X/ \! E/ `* f" e2 p; Z& T
  5. int  EQ_is_lt (double s, double t);
    8 g( b5 i4 {: A& A
  6. int  EQ_is_zero (double s);
    ' D, u  [  C6 R# \
  7. //=============================================================, l$ R- R  k$ s1 m' Z/ r  ?
  8. double ARCTAN1 (double y, double x );
    9 i: F( ~, z' g' R: k
  9. //#=============================================================6 C# u7 D7 @5 m7 g1 `. _  J
  10. double ARCTAN2 (double y, double x );
    ; [3 m# F! E9 T% i. l
  11. //#=============================================================7 |% |5 Z# t* l7 R1 m: R2 W
  12. double CheckConst ( double angle, double constvar  );% \# }6 k! R: N
  13. //#=============================================================
    $ v* S. F  v9 |% q" o
  14. double Check360 ( double angle );9 K& }7 g0 b2 K
  15. //#=============================================================
    6 E6 o2 q0 ^! {* d$ g
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );0 U0 C4 X% A$ p3 Q, ^0 ]* X3 W
  17. //#=============================================================
复制代码
. b+ q+ D9 o% M  z3 u
以下为部分源代码,用于判断,计算角度等
' [  ]* _! F+ F0 O, _" o1 c9 I
  1. int  EQ_is_equal (double s, double t)
    - a: \0 r! Z0 T/ Y) H2 O+ C
  2. ) X- L, L6 v: ^, k+ W$ G
  3. {
    * R" M/ M: z( ]% a5 s1 M7 I- Z

  4. ) b+ E# T! I1 n. F; }! T/ C4 L: {0 V7 l
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    + f- \/ d& k% j7 r7 j1 p7 ~

  6. ! u+ U9 W1 K: A% v1 j) R: b
  7. }- z4 H- Q0 x$ W% J3 I4 C

  8. . B9 _/ A. f8 u7 f- M6 c% R9 v
  9. /***********************************************************************/3 ^" A) l  F; C' }) w) h

  10. 1 A6 U: x# C. Z5 D/ J: b4 ]
  11. int  EQ_is_ge (double s, double t)
    : z; L) Q( Z7 i3 _

  12. / Q4 N; n3 `% U( \
  13. {! m+ j) q' W: @* Q/ q/ }
  14. % U$ C7 c+ ^; Q" P) Z
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    ( ]3 j  s  W, w2 N9 a

  16. 9 A1 N4 y8 F5 ?
  17. }
    ( c5 r1 h6 O9 E
  18. ) S7 [' T4 P1 {9 w
  19. /***********************************************************************/
    ! v) R! Q8 R# @. }/ h
  20. ( X+ j5 u( ~% p. {$ D
  21. int  EQ_is_gt (double s, double t)
    * |+ `% O$ d9 S, @4 b

  22. 6 a0 S( v. H- C( j6 Z( a/ v
  23. {
    % I, d5 H  M& f4 P2 W; G
  24. & B! [. ~4 S' Z, f. Q8 q) ~# G
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }1 E& ^( i" L( j4 c$ r  ~: Q
  26. $ Q* I- F7 U2 k  k( X$ `/ Y
  27. }1 u/ J5 F5 l5 `) y$ u" w. \$ D) b0 h" u
  28. " r  `0 E( H+ R+ I! V# W9 J! G7 M
  29. /***********************************************************************/
    ' t) P3 l* H$ j# s
  30. : U  N% P9 S/ {/ k  }
  31. int  EQ_is_le (double s, double t)) Y$ d: {/ w8 @  n
  32. 6 g8 |& o  `, M9 i3 Z& c- u
  33. {
    * f1 k! ^  j6 J2 r

  34. $ _3 {- K& y, W7 m6 U2 z' f
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }( B2 G5 e3 \' ?5 ~
  36. + `5 c# @* V3 ]: x) c; u
  37. }; T' ?: _+ V6 N. x  n9 |

  38. " f/ ^! R6 }' i% U# L# i4 n
  39. /***********************************************************************/+ `: t, W( q# ^1 n8 l, i- u

  40.   b0 f) {! I, O+ d  N; S
  41. int  EQ_is_lt (double s, double t)4 w/ l7 l6 A7 N% c' o
  42. # n7 ^# ]3 k2 C( C( f2 W: J) |1 g6 y
  43. {
    ' w0 i, G% @+ d# J, f

  44. $ M0 v& K, D" w% H6 B9 s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    0 [) n! [) s- Y* R* [8 {* r
  46. , d: g' s1 X2 p2 ^: s# B
  47. }" H& y- i9 f7 K9 H8 O
  48.   S5 w. C* ^& i# _! Z  P* T
  49. /***********************************************************************/
    0 r& M4 ?; _0 ~: b5 I* @
  50. * S$ u2 U; Q- I5 Y% q
  51. int  EQ_is_zero (double s)3 S& I& r; `2 s- I+ f

  52. . a8 ^- o( i3 F# r1 `
  53. {# [' J6 x* z/ p7 j3 i0 g
  54. 3 r3 g: O2 D2 s# n, c
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }9 N$ a4 A2 I+ c
  56. 3 @2 Q$ ]. C" J- Q4 G) _8 K
  57. }& b, ^0 B  Q6 c2 {& G0 m

  58. 8 B1 I7 V5 d, H1 m9 D! ?" s
  59. //=============================================================
    7 U! P0 z' V- a
  60. 0 s- H$ `* w& N
  61. double ARCTAN1 (double y, double x )9 O) A2 Q/ N! p

  62. 6 u% z2 t7 W' s" c8 m2 S3 X
  63. //#=============================================================$ D: j) ]( e: b

  64. ; H5 d4 c) k: Y
  65. {) z8 ^! _1 ?5 Q
  66. & u# N% ?/ U+ I$ ?* U) I! ~, E
  67.    double ang;
    7 I  o5 _' Z& G, W1 ?: C7 p7 O
  68. % H# \" o# f" L$ M* Z1 p; B
  69.    if (EQ_is_zero(y)) { y=0; }
    % b) X! C: o$ C! E9 ?

  70. 1 p* z5 v5 |6 n3 j! x
  71.    if (EQ_is_zero(x)) { x=0; }5 y5 R1 [: n3 H+ ]! Y9 D0 C
  72. 3 F% M, V; S6 z- {* W
  73.    if (y == 0 && x == 0) { return(0); }
    9 v/ e. g/ H  m; Y# P& ?! O

  74. / W/ E6 g5 f: A5 w
  75.    ang=atan2(y,x);
    , X3 j2 F: Y* {- o: ^/ b

  76. 2 f& @, B! g5 Q. x
  77.    if (ang < 0 ) {
    & }! q+ s% K" u( C5 Y/ J
  78. ! [% a$ W' J6 b+ k( Y
  79.       return(ang + PI*2);
    1 x8 w8 g" a4 ]" \
  80. + ^; A8 b6 [5 w/ ~
  81.    }
    . t6 L: n. k- k1 y1 q

  82. , |  i- ^0 l. D) H& c2 R8 e
  83.    return(ang);
    $ q1 W/ R" j8 C% k2 |
  84. ! f' x% t5 G+ U! q2 p0 b
  85. }
    : V( Q, p6 B/ F: \) k+ z9 ^
  86. % ?$ E) r* D6 Y: t
  87. //#=============================================================
    4 w/ U$ Y. E+ |2 U
  88.   A# t5 O! ]2 ^  p
  89. double ARCTAN2 (double y, double x )
      V& b1 [' ]* k5 ]& C3 J
  90. , s$ C, P- T0 S: l
  91. //#=============================================================* S' o, ?+ e+ |4 {3 v
  92. ( w+ P5 G/ B0 @# k: E; y
  93. {
    + f1 d" I: j* ]3 @
  94. ) z) ~) a4 Q; d
  95.    double ang;
    & O- |( g. I. c, {* i& x( w* @% W
  96.   K" I+ {" i& n0 M+ v
  97.    if (EQ_is_zero(y)) {: g+ E- L' |" B  a1 m! o+ s

  98. # y3 k8 Y  h+ \( g1 C
  99.       if (x < 0.0) { return (PI); }! ~& M+ G: b6 ?9 F) e: ~4 j+ g
  100. , w5 d) ~0 J& \
  101.       return (0.0);
    - N* G+ a/ \! O4 n+ ?! P
  102. 8 U! g0 C8 G' `- v
  103.    }
    " ^4 A& c- a8 E: {  Z: U
  104. 6 I* R3 A, t5 o4 f3 c; z3 t- o' o6 ]
  105.    if (EQ_is_zero(x)) {: \8 ^5 v# z7 C

  106. # [( q, z0 s7 t, A, N" ?  O* ~
  107.       if (y < 0.0) { return(PI*1.5); }: `2 [9 s. C. o" V

  108. + h. N! ~. n8 g
  109.       return(PI*.5);/ ~8 P% h% }5 J0 g  D

  110. 9 ]- o* Z. q8 o  @
  111.    }
    - T9 L, d. Z4 e; u% a  v

  112. ! I  k% H3 U/ X0 O' g9 |
  113.    ang=atan(y/x);
    - j9 P0 d, N' P" i

  114. 4 `9 B  f8 O( j6 l% e
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    1 I: w: E/ I0 ?" X2 y: n# n
  116. " `( n1 a, T2 w4 M
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }( q  J6 N; {# I% N: G3 Q/ c
  118. ' f5 W4 M) c" ?/ _" K( y9 j" {
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ( v4 ~" M- |" T* R! O& J

  120. + @+ F. [4 T$ \  W) S
  121.    return(ang);
    ! q; z4 `3 D: ?" r
  122. 0 E' I7 c4 W" W) ~5 g
  123. }7 y9 o9 C0 U: h6 F) X& S7 Y/ q# _
  124. % A- R' c& W9 _, n8 v
  125. //#=============================================================, M5 w5 g& {5 z5 ?3 Q( r9 K
  126. / m! d8 q' k7 b' G
  127. double CheckConst ( double angle, double constvar  )
    * i; u) M- |1 P8 ]3 ^. M! u
  128. - x" m/ d4 G3 p
  129. //#=============================================================8 S0 c; J# s7 i

  130. + F$ K2 b. G; H5 s. O" }
  131. {
    , W# s! t9 k& e, s. |) l
  132. # w, m2 I9 X0 f  I
  133.    while (angle < -constvar) { angle+=constvar ; }
    " ^. |; `; a" @4 k6 m' z

  134. 3 e3 `0 Q1 Q' p7 o6 M: I# y
  135.    while (angle >= constvar) { angle-=constvar ; }
      T( o) l! K' {# {8 z
  136. # y5 y1 q- x$ R+ ?
  137.    return (angle) ;
    ) v, C$ A+ X8 p0 E% z1 n- {3 J9 y

  138. ) ]3 p# D# D' G; ^  t* Y/ k9 D
  139. }
    7 p  `% _$ @9 C( ~1 V; c
  140. . |1 S6 w- J; a8 d: k* t. a
  141. //#=============================================================
    0 P0 ~2 r6 v/ r% e* S

  142. * ]0 Q' u- i' o# B9 Z$ G
  143. double Check360 ( double angle )1 ]6 l0 N& W; d2 _6 P
  144. ! G5 ^2 U8 W1 q1 w* `
  145. //#=============================================================5 J+ s6 _6 D7 h% C& |5 q2 T
  146. 9 Y* m4 C! ?0 p$ G( `) W* Z
  147. {8 ]3 F- e5 _0 K

  148. ) _4 S# i# N& c. i/ Q5 I0 F# W
  149.    while (angle < -360.) { angle+=360. ; }# G" j4 ?# H( V3 D

  150. 2 S5 M3 ^+ t& L( e/ x- f2 a9 S" \
  151.    while (angle >= 360.) { angle-=360. ; }
    7 u2 G  I" [- w) P; J. C

  152. 8 l2 t3 _* r' D( P& \( x
  153.    return (angle) ;
    ) o* K" b7 H  B+ [+ ?2 }

  154. ) q" U6 u$ }; o4 V1 Q' j; g* }
  155. }
    $ T4 [9 T. x* r

  156. 1 y# b& q  N* e
  157. //#=============================================================) i$ B/ I" j! C
  158. . x' M- S8 |' D+ M
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    4 r% L. l# a. k) d6 `: n3 W
  160. 5 [" N& P! D& a: u
  161. //#=============================================================! L  a' A) U  B, f6 m* ^; e

  162. 1 w4 v0 k; O4 |$ C# w* S
  163. {
    0 g7 Y* H9 o* r2 U  T1 g" x

  164. 9 Z5 P" O) l$ N6 j6 Y5 G
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }7 n/ E+ O. V# k2 C# `

  166. 4 K0 |3 e( s2 t4 s
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }4 \/ L: f! |5 E0 M6 \

  168. : D" I0 y& N  Y' Y* O# @  n0 g
  169.    return (angle) ;
    8 p. r/ v: A5 T3 H% X4 ^

  170. 1 H7 |; p6 a) N. L
  171. }
复制代码

- I! }' P/ o4 k8 o7 ^以下为摇篮5轴计算过程代码
9 O  a6 k3 b4 a# L8 k
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    8 [6 y/ E: v. q* d

  2. 9 @2 c0 E: A( ^' J, d) n! G
  3.          j=0.; B1=0.; B0=0.;8 }- |, L* P4 R+ P& L

  4. ) A0 c7 L* p% b- M0 N: S
  5.           if (EQ_is_ge(i,0.)) {4 M6 Q  t3 C" o# U! [. w% `! S
  6. 3 ?7 H/ y2 R; a/ H8 y9 s) H2 p- M; |
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }% o8 Q7 P! B" w
  8. ! c5 U; a$ |  k6 D
  9.           }) Y. S$ q0 {( U
  10. + `; z+ ~) l( e- O9 t" q4 Z
  11.           if (EQ_is_lt(i,0.)) {! Y. i" l6 I0 e/ X+ n$ m6 C
  12. 9 A7 q2 i$ g7 E$ m) Q1 l, p
  13.              if (EQ_is_lt(k,0.)) {3 X1 e& e- ^# ?) \# u

  14. . |( k7 b; _' A5 M  G! i7 u
  15.                 B0=atan(i/k); B1=B0+PI ;
    ( L2 |1 v, f0 G* g7 p, g7 f% {0 C
  16. + @) _3 Z% K* W( a
  17.              } else {! A- ]+ G2 r% P- _3 _+ w' j

  18. " S! V' }( R5 E5 l& ?& `
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }) R6 C4 m1 S, y  X: d* }+ D* W
  20. . B% F! O6 U; |
  21.               B1=2.*PI+B0 ;
    2 ^/ k. {9 ^& e; _4 ^+ u: R/ }$ i8 Q
  22. ) M3 G' r5 x% ~  K6 B1 @# Q
  23.              }$ N" @- ~, J  f* c

  24. % s9 W7 `5 G, L5 u
  25.           }
    : e6 u' k  h5 E

  26. 5 {% |  V4 P. `1 }/ J$ ?
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;  d9 _9 X& l: G/ V

  28. 6 t( f7 p0 ~& o+ `" Z' z" j! s
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    - X; ]) F8 t5 U! X2 l8 D

  30. ( D- T# ?1 j5 R6 i; f" @+ R/ P
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ( K" `/ a+ Y; `) x1 I; l
  32. 1 Y! H2 T' [% L+ D0 A
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

& S( M0 r8 P) H/ m; t* r通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
5 W0 w  Z4 S/ Z& q3 P! |
" B0 e, d* }1 s$ D' I$ { 640.png
6 ?7 a, I7 a- T2 d测试结果:5 s" b) |5 [9 y! G4 Y8 Z6 F
6420.png
% P; j) F$ o: O, ]' c' e. t& M" ~9 v
反向测试结果 6410.png 1 Y7 H# ?( c4 @( t) [5 {

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

231

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-4-27 01:26 , Processed in 0.345222 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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