找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8092|回复: 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);
    : L. z2 w7 t5 w- `; U& s9 q" ]
  2. int  EQ_is_ge (double s, double t);
    ! v$ V2 l! r. O/ v' e8 N
  3. int  EQ_is_gt (double s, double t);
    4 h% }. K5 a- A2 K
  4. int  EQ_is_le (double s, double t);
    " _6 J8 b) C/ @* i
  5. int  EQ_is_lt (double s, double t);
    6 I. L6 ~4 _9 J6 a: n! b* T
  6. int  EQ_is_zero (double s);5 D; [) c2 N  ?) }
  7. //=============================================================8 Y. ~+ L# A) ^
  8. double ARCTAN1 (double y, double x );2 P4 T' F* W: B" i/ A& K, c1 }
  9. //#=============================================================
    , Z! E. Q5 c8 v5 ?  Z
  10. double ARCTAN2 (double y, double x );
    3 @) G* j" t. Y8 _& ]. W
  11. //#=============================================================
    " x2 x/ K3 h/ w- _; S. [# {
  12. double CheckConst ( double angle, double constvar  );
      c6 o# e1 T8 y, ~  C2 Y( }4 j+ ~
  13. //#=============================================================* y: q0 Q' W  J& T" u! M# A
  14. double Check360 ( double angle );9 Y: e2 n" U4 Y! Z- x) p7 K
  15. //#=============================================================
    8 m0 T. a  I: A0 B! ]; K
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    . D/ Y) Q+ v# L+ |! `' g# @3 v
  17. //#=============================================================
复制代码

6 A# K4 k0 C( y* ]* ~' s, S3 f) G以下为部分源代码,用于判断,计算角度等( S2 h. b. M7 }1 u
  1. int  EQ_is_equal (double s, double t)
    + E4 N2 J6 C, ~6 a! G# Y- w
  2. ) V7 Z0 M7 s5 b" w+ g/ G! z
  3. {
    6 J' [9 R1 c4 A! O

  4. $ X) g; L$ ^7 ?1 G! ?8 s
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }1 |4 Y9 P' }* |
  6.   \4 U# ^2 J8 b8 ^
  7. }
    : {7 u) h3 V. U

  8. ' k  d! T% T( n0 J8 ?7 x& r
  9. /***********************************************************************/$ e  T! X% h9 z) c# S
  10. 3 v/ w4 E, p* D8 |' \+ H' p  J/ l7 a
  11. int  EQ_is_ge (double s, double t)' M: R0 T. Z0 S" L
  12. + g* o1 @2 L6 G, Q, j7 `+ ]
  13. {
    ; I4 T( g6 |6 Z
  14. 5 l4 K+ s; Y6 R* e3 H3 X$ W& L& j
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    * Z. X' B* T, W' W, u
  16. ) E4 Q6 e0 r% B; H% Y1 H
  17. }* @8 n+ _3 C4 j9 w, G
  18. / O7 {* _# J' R, ]2 [) d3 H
  19. /***********************************************************************/& _/ x- n' Y5 }$ I
  20. * g* `9 R0 T% a, |
  21. int  EQ_is_gt (double s, double t)/ x8 H1 q+ G. t6 L

  22. - x1 W, m& O. l2 \/ R
  23. {; G3 u! ^, @/ i' ?9 J
  24. # {$ e# p: Y* M& y: f6 K
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    6 V- l) |; |% s! g( g: B
  26. 3 {: k  t" r4 {! H
  27. }6 `$ R; k1 Q, q9 j9 k0 ?% a
  28. $ \$ b2 a5 d1 R0 e! F' `' g
  29. /***********************************************************************/2 u* {5 b, f% w1 V
  30. 7 g* ?+ Q9 U* u! V( n
  31. int  EQ_is_le (double s, double t)
    % j0 e, Y* C; X! h3 s1 _7 T

  32. 8 S& G; m. ~: P8 |3 B
  33. {
    1 q/ [- }2 r% M' I1 e

  34. / |6 Q) I- q& m
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ' c: P1 B+ c/ `

  36. 7 a. S* |* [1 M4 b5 G9 G
  37. }
    # H. X& B. t  o5 C2 Q0 M% A- \" _
  38. 4 v8 p. A, p0 W' M
  39. /***********************************************************************/
    " M9 c0 y. @! \; M8 Z& y0 D
  40. # D% |9 u1 z8 d9 a* x6 S& z% x6 E
  41. int  EQ_is_lt (double s, double t)
    $ U* n+ m% {3 V7 X$ a- n/ \, q- v
  42. : @9 @5 A3 W2 }! F  n$ d
  43. {
    7 J# I: d8 b% l! M

  44. ) }: t5 l% i% i. a& {, Y
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }; v! X% s3 _) ^5 S( `8 q5 L
  46. 5 C  s9 |) y& x9 H, ]  v
  47. }) K2 Y/ N, ~) s
  48. : g. T4 p$ X8 D5 w
  49. /***********************************************************************/
    " P, ~7 }' [/ G) k$ T
  50. , @7 \) }0 h: u! z
  51. int  EQ_is_zero (double s)) u2 U# C' K' i( v
  52. 1 M( c' z3 G& y- J( C: \
  53. {
    ! j6 N" W, E( D& ~  h9 O# R/ p

  54. ' s& H2 j; k$ K# v( t$ C: q' c
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }, N9 M' l3 a" v* a" e( L

  56. 1 G9 ^0 `. k% @0 I% [
  57. }
    $ F0 k6 J4 y5 |" v& {

  58. 8 F# o; J3 ~- w2 e" ?  \2 g
  59. //=============================================================
    " S# r/ {/ z* B# s  H6 P9 _5 l' E
  60. 6 c8 a. q/ b/ i
  61. double ARCTAN1 (double y, double x )3 G1 u* @! B8 q5 X- g, h( r5 f

  62. + n8 N- H! J/ T5 r
  63. //#=============================================================
    0 C, D# \3 e# Y8 J. X

  64. 4 I( C/ r% O( h: h
  65. {! }; O$ X" q0 w. X% V
  66. 4 p3 C+ V# V) N; O: s
  67.    double ang;" y( s! q& K1 ~5 L! c: T
  68.   I% W) z  L6 x1 y4 E
  69.    if (EQ_is_zero(y)) { y=0; }
    " m* ]. O# m% `  R

  70. % @" H2 s& A! ~
  71.    if (EQ_is_zero(x)) { x=0; }( L) x# l5 W6 n8 i: o4 I) i
  72. + C$ x* q4 Q; x+ U3 E  ^) }
  73.    if (y == 0 && x == 0) { return(0); }! c: T9 B0 k2 V7 ?- Y
  74. ' `$ @+ C/ C4 k
  75.    ang=atan2(y,x);$ H6 h4 o# M' i/ m: ]- V) a  P

  76. ( T- e1 D! b/ F5 F% P! Z
  77.    if (ang < 0 ) {
    1 H- B% {. _# C
  78. 3 o; J" T# A0 k5 B% T2 d! O
  79.       return(ang + PI*2);
    + O2 Y$ v) x1 y$ W6 Z8 ~

  80. $ c9 Q4 y  b, N5 f1 D( g4 i
  81.    }- d! B2 _8 \* o" ~

  82. + Z9 z$ s, {2 R
  83.    return(ang);. ]" t  F7 V; b- w- T( B+ t
  84. + R7 h+ V1 M4 X3 A1 `( p9 F; r
  85. }
    2 [8 ^! G0 |: T$ `3 @6 G9 v+ `/ A; \
  86. 9 f# L1 Z' q" v9 X3 G) z8 J4 `
  87. //#=============================================================
    $ \1 o0 P9 f3 v- A5 D

  88. . Q) J9 g- x8 n: x: E6 a( W$ R' ?
  89. double ARCTAN2 (double y, double x )
    % O+ V0 q! t2 q9 W7 [% j
  90. 5 w  a1 A: W7 P6 p
  91. //#=============================================================! T3 K# @( A% x9 [* L( y% R. m

  92. 4 n" V# G6 v+ n+ _2 A
  93. {# _3 L5 U& `: o5 I4 D' }  n+ ~; h% V

  94. 9 Q5 n1 M2 H$ `- m3 j4 \! I
  95.    double ang;; r/ y: t% a1 i* C. ]( }8 y8 D

  96. % v% q; q+ D' Z! o
  97.    if (EQ_is_zero(y)) {6 I6 {( w; c. {' J) e
  98.   F( E& }# ^: i+ V" i. V& u6 i
  99.       if (x < 0.0) { return (PI); }8 M0 L) |5 X5 T8 \% g: [4 A) B& }
  100. 7 [. V1 N- W$ j' @6 f- M; t! d
  101.       return (0.0);' N7 F0 t  I* Q8 T3 n

  102. % I& |, @: S9 A% O, Y( A& l9 v
  103.    }
    2 H" Y; N' R7 U- k4 l$ d  A

  104. - Y2 x5 G4 s/ f) k5 P! ~3 Q
  105.    if (EQ_is_zero(x)) {
    6 t( B8 m% v* a: _; y$ }
  106. 5 c% m5 V, _3 B; {' W3 S, o
  107.       if (y < 0.0) { return(PI*1.5); }' f" S7 ?; M, C. f& t

  108. 1 A1 C2 C, L% q& C+ @
  109.       return(PI*.5);. e( R' C! f' u
  110. . R& F. ~( P' h, v/ h
  111.    }# D& z- B8 u0 A2 \& u* S

  112. 7 C+ c# v& \* A) D" A% \
  113.    ang=atan(y/x);
    ; L: T1 V: W4 ~
  114. + U/ P$ H/ k/ v
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }. Y" v6 {( k0 S5 g

  116. 0 L  Y  N( A: z; \; L! Z0 {' V
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    " e3 Z7 F6 v. _
  118. 6 Y! q: ~! Y0 e8 X, d1 v
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }  X+ Y- i& o8 a) l0 X- F/ w

  120. 8 I* Q/ i0 C, {! B. _3 s9 @7 k2 C; N
  121.    return(ang);
    - f6 e9 n! [. y$ h9 c

  122. . j3 E8 e2 f3 }+ ~0 I* f- B
  123. }
    ) Z6 i" c6 f( h
  124. ) B' k0 l* ~# Q! B- I" v
  125. //#=============================================================
    : L% r* ~7 p9 R
  126. 2 ?( |, }9 T9 T5 }2 w( V% \  T
  127. double CheckConst ( double angle, double constvar  )
    ( I- r% J( G, I/ H( A

  128. 6 ?, L, G9 Y' P4 H- x
  129. //#=============================================================' H3 U0 o/ `' i3 m  i
  130. 7 J! E0 c, D1 z2 W+ r' T' l
  131. {
    * n( h. I( G# g! N
  132. 6 [8 t0 W6 a( y* ]* T4 f. D
  133.    while (angle < -constvar) { angle+=constvar ; }* _' h8 w2 h6 x9 P

  134. . y, Z, e9 R( K8 [, k  _) Q2 T* [8 @
  135.    while (angle >= constvar) { angle-=constvar ; }
    8 {+ V. d1 i" c. }& M  r+ h2 j8 o
  136. , w3 K8 M" a* q8 E4 ?8 Q
  137.    return (angle) ;+ b6 W' A) z# N$ e6 O
  138. 4 B2 I) X! ?' U/ b4 g  o
  139. }9 a. B$ J) F0 F6 V

  140. * k# C6 e4 V! C0 q- R0 `! j
  141. //#=============================================================* V* f# |5 T6 l

  142. 5 B3 L1 }6 H; i( Y8 e8 T
  143. double Check360 ( double angle )
    7 c' s0 j. D/ W$ Z

  144. 5 U2 F( i) W7 o, |# o3 G3 x5 h$ p
  145. //#=============================================================& a1 G7 n: v1 R" f) `7 r7 ?( a
  146. , ]3 r9 k  s8 _* ?! f
  147. {1 Q% ~& T# Z  F3 W: F' r* r% G

  148. 2 D! _. |9 k* o3 ~1 I5 N
  149.    while (angle < -360.) { angle+=360. ; }) t) J4 t3 r  E% I$ n
  150. 8 ~" y9 w0 `/ `9 N& ~) \
  151.    while (angle >= 360.) { angle-=360. ; }
    8 u5 L" a" {5 i

  152. ) }. [7 i( R% D' M* ~: |
  153.    return (angle) ;
    9 z8 `: s. I1 G  d9 O  `7 V

  154. - ~( [, ]3 k" h. y0 e# X3 K
  155. }
    ' E+ N; ~- a" O7 {! h" P$ X) J
  156. 7 i8 z6 B: @; I; @( d' M: |
  157. //#=============================================================+ }" N7 n/ V8 \% S- z9 Q& }
  158. 4 ~  i7 m' q4 G& u7 V1 ^* E
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    $ n7 |$ w1 f# r9 t( e( [1 X

  160. + J/ ?7 o6 P! F" y
  161. //#=============================================================1 w( z9 K3 R" ?' Q) v7 W% s

  162. 1 j! w5 t0 ^) @
  163. {
    + I' e7 D6 y' Y6 X% B8 q

  164. : c# p+ d3 I% ~6 d' Y
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }0 u% s& z. `9 M

  166. 9 `5 H/ ~) O8 E" f" J5 p; a
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    + h. L* @' K4 A

  168. % ]# W* M0 ^2 h# i4 g7 ~
  169.    return (angle) ;2 M) O" X0 w9 |7 w9 W( f% W
  170. 5 q* O0 s) Q% |( u( O+ j
  171. }
复制代码
# h# F$ [! w0 ^% P* l- B
以下为摇篮5轴计算过程代码
: J% b1 ]! D) c  C0 n
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);2 J8 C! u0 F8 x7 Y

  2. ; ]# c  P* j6 J4 i( C
  3.          j=0.; B1=0.; B0=0.;* P# d  y& X3 T5 x, U6 s7 s
  4. , n; ?) z2 O0 s) [
  5.           if (EQ_is_ge(i,0.)) {
    ; a; W* H' Q( H; m6 M
  6. 4 X( Q2 a( N" ^
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }  T0 A4 c+ w5 s/ x

  8. 4 C! |1 \* n  E
  9.           }
    , j+ g' g/ o) u. L
  10. & t# v2 n0 V* P, {2 x" [4 d8 J& E* F
  11.           if (EQ_is_lt(i,0.)) {
    $ A, F* R+ ^( I3 o2 Q: c* L9 V

  12.   h& Z% W  e+ O& A5 w7 C4 i
  13.              if (EQ_is_lt(k,0.)) {
    * v/ U" m% f' P; y; a
  14. 8 z/ F/ x# @( Y' B
  15.                 B0=atan(i/k); B1=B0+PI ;8 _6 e- `  |# z2 ~7 ~
  16. + p% C" _1 w8 S0 N! \
  17.              } else {, x8 ~, g3 B$ W8 z" M

  18. % R- z" G# U; g- u1 t; |8 u
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    % H. D8 y* f% z
  20. ( ^1 X# k; ~: j
  21.               B1=2.*PI+B0 ;( \9 C9 D/ S! I; H0 K) C

  22. + x( q% F. s- n' o6 ~
  23.              }7 d# o' Q9 o1 m- ~+ G; ?* Z
  24. 9 u9 Y9 i3 T2 ^2 c6 I2 ?1 j7 P' U
  25.           }
    $ X; H/ G: l' L/ ^6 d

  26. ( J; n- ?1 n& M4 ^- M% Y, R
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    $ E! h' s/ d7 U7 V( r) m8 n  U! p
  28. + x' W3 \% p( X) s
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));! f1 s$ U9 Z: p& n
  30. & r/ M$ N& k- A+ o# v
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;" t: ]7 ~- z8 k- X
  32. 6 r0 M" I3 m) N0 D( E, K, o
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

( J$ m, R2 m& l5 P7 o! V1 E1 i3 {通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。' a4 V* z. Q4 R$ D4 ?" t# N
: ?; h/ f2 O. g: l
640.png
4 a$ T0 a3 e' t2 j6 @2 G  p测试结果:* S5 I) g8 n! R
6420.png " z! k" V: e) ~( T' b" J4 v

; q+ [' f% _. U6 [3 D反向测试结果 6410.png
8 Y0 Y+ p+ g" z; e

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

275

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-26 00:24 , Processed in 0.531370 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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