找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7401|回复: 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);
    / A/ L& V2 b4 [# @0 x$ d
  2. int  EQ_is_ge (double s, double t);
    " @/ m1 @7 Y' P3 \
  3. int  EQ_is_gt (double s, double t);8 L' o/ Y- A# Q+ t% c4 ^
  4. int  EQ_is_le (double s, double t);
    ( |" D! B3 X5 D- k
  5. int  EQ_is_lt (double s, double t);
    ( E  u9 ~; p& i- f9 b7 [- R5 |5 P
  6. int  EQ_is_zero (double s);. w/ ~% p6 v* }7 \% m. g5 l) P
  7. //=============================================================
    7 v* j, r  `1 p. V; O: E2 S
  8. double ARCTAN1 (double y, double x );8 p- f. z: N2 d& ^& C% L* z) c
  9. //#=============================================================
    + I: P( Q! J. A+ J! [
  10. double ARCTAN2 (double y, double x );
    & S4 E8 e6 j$ D' }/ D
  11. //#=============================================================8 q) U7 J' L. X& g
  12. double CheckConst ( double angle, double constvar  );
    8 B* z* C+ [* O% @0 P' p8 \
  13. //#=============================================================
    , W5 Y* {6 v8 K( |- N; t* H/ K2 f
  14. double Check360 ( double angle );
    . H8 \- L) {: G) i/ B5 `/ y
  15. //#=============================================================: N' e- w3 X7 b+ o) }' ?+ k; B
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );( ?3 d# a- |1 c" R
  17. //#=============================================================
复制代码
: C: Y2 u6 H* r) O2 L( H
以下为部分源代码,用于判断,计算角度等- w2 d9 `* s5 N6 i; @
  1. int  EQ_is_equal (double s, double t)& O' A3 W3 D% E- y9 F! A

  2. ( G0 h) |+ ~2 |, X
  3. {5 F# }. p' K* `' U

  4. , Z5 S# \) F) p1 c
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 i5 C4 B% p% u1 U+ Y: k- b

  6. ' z8 h* \2 ]2 P/ x, X
  7. }" I! r4 E$ D% }' d; w
  8. . T! S* L$ I# Q. Q  t
  9. /***********************************************************************/
    ( b, F% a3 E' ?8 m' k0 `( G0 j* L
  10. ' z& R& T( d: s8 [4 z/ g; ?
  11. int  EQ_is_ge (double s, double t)9 B3 g: ~! K% Y3 U8 S
  12. & ]) p$ W8 G0 I9 r* {5 @
  13. {
    6 |! S; Y# ?% ~/ E; U

  14. ; h  u0 Y9 C, P8 B6 g9 @( P% h5 o- |% @
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    5 P' H/ V8 p6 G- A) L! }( L7 a

  16. 5 m! G, p) T* z
  17. }5 h/ ]. A4 f; b: V' m9 F" d- j

  18. 0 q8 x; c  O; c- |- r" v  o5 x) w4 {; Y
  19. /***********************************************************************/
    6 _& S( Q" G4 O
  20. 8 @" q; ^+ x  M, f4 w* W- z1 [2 j
  21. int  EQ_is_gt (double s, double t)6 {: x) _0 P0 M( ]+ y6 Z
  22. 8 f% K) @) P$ h9 R8 {
  23. {
    2 t3 A7 w, e; W! |; K
  24. / E: J, e7 }" q, \* ^" d6 f
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    # p! `( D3 C* w5 _! t
  26. 2 I$ i, N6 F' v, \+ l) J
  27. }  a- H; s) p& F" ^9 u

  28. 8 m& s& e/ K! y7 z8 k! f" p  K& S8 Q3 d
  29. /***********************************************************************/, G% ?0 t+ P$ n# f- N
  30. 8 [' \" H% d0 O' q5 q
  31. int  EQ_is_le (double s, double t): k- K' Z4 P9 {( V; A
  32. 6 s4 @1 w/ ^$ v2 g1 c0 |2 E
  33. {4 r; ?3 [& M1 }7 P; ]7 F" B

  34. ; k7 r" n0 x! Y" N
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }4 U4 N. r9 ~( v) t" M: j4 S/ U/ E
  36. * H- l, w* C' {0 b3 P( a
  37. }" E: O# }- q( a3 L0 t

  38. " t" Q5 \9 @1 w3 z" g, w
  39. /***********************************************************************/
    6 J3 M- I$ W# F

  40. . A3 i) p: b) C
  41. int  EQ_is_lt (double s, double t)
    5 v  A% R0 }( u3 t7 A+ o
  42. 9 w" Z7 b( }  }& a
  43. {
    . u' G# L( \/ z) [

  44. . q2 m! k" s. K1 M
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }2 ]8 ^# G* W9 _* f' P
  46. 5 U  |+ G2 f: D/ L; P; s9 A2 }
  47. }
    ' t) J0 g0 A  G- B

  48. " r! Z0 j( @) I# V1 C# X( S
  49. /***********************************************************************/; c5 l+ |4 n  N  D! W: M

  50. 7 Q2 i8 D6 J7 U, {4 L& K% U/ `
  51. int  EQ_is_zero (double s)
    $ D$ V* k% X: G% I4 k8 b( c/ u2 g

  52. $ \5 L+ b* Q0 P! V" k4 t
  53. {* Z! F8 T8 A3 y  @* C) v
  54. 7 w$ v8 g! K8 T
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    8 w3 K4 J$ o- h' s2 H
  56. / ^9 C; n. o# L3 S; B2 Y7 i
  57. }) H5 o: s# N5 E# z: C% l

  58. 6 H$ W7 F! }4 m7 G
  59. //=============================================================
    . P. M. Q: u/ Q8 a" L
  60. , t4 C/ \( d. j5 C/ x
  61. double ARCTAN1 (double y, double x )
    ( C6 p3 n1 e2 N& o

  62. 0 _: B8 E  T7 U- i
  63. //#=============================================================
    & g" \" Z2 C8 u+ M. x) r

  64. 4 Z6 N) {' P% C5 j: T- `" m
  65. {
    4 ]2 w, w( v' e0 z6 @

  66. 2 L) q0 {6 W; N& m8 ?& }
  67.    double ang;
    % J6 [4 X$ |% N( c
  68. 7 m, X' x- x; f- P4 y
  69.    if (EQ_is_zero(y)) { y=0; }2 Q( |4 Q% I/ D2 C, `
  70. # n% a- f- V  I2 [8 v1 A
  71.    if (EQ_is_zero(x)) { x=0; }+ d" y2 J. e  S9 I
  72. , b/ Y9 Q1 c( h2 j6 H: F- u
  73.    if (y == 0 && x == 0) { return(0); }
    % {, E( O/ W5 j0 b# f! o
  74. 7 [8 i" t* Z- }
  75.    ang=atan2(y,x);" N- L: C( V: c7 l, v* S, ?

  76. / P1 S0 h, M1 @! K7 ?( C! L& y8 V
  77.    if (ang < 0 ) {
    ) z2 F2 F$ c2 X$ V0 ^8 V
  78. 4 l- S; {; J7 Y+ f
  79.       return(ang + PI*2);
    2 e$ C8 M% w% P$ Q  W

  80. & J) A5 f3 Z5 G- g) A; j& @
  81.    }( z0 V, P* B) `$ Q5 G& h

  82. 4 {  T6 w7 D3 p# z
  83.    return(ang);+ q! V1 k3 w6 {& n  ~) P
  84.   ?( O( B9 x! l. o
  85. }
    , @6 [2 X/ _% e" E4 a6 y

  86. 0 t* G) P4 ~/ l2 d! k
  87. //#=============================================================9 |& Z) w4 D" o

  88. , o* D) f! q  P- H
  89. double ARCTAN2 (double y, double x )
    & e" F9 F2 E6 E+ P

  90. # R1 K$ K( s; g5 ^! a1 J
  91. //#=============================================================
    ; e0 g2 P; L" d+ G( i
  92. ) w8 b3 h0 F+ z4 @
  93. {+ N/ q% b  t, t# {
  94. ' j9 ]" |  w' ~  V
  95.    double ang;( C' x# N; D) e5 b5 Q- a

  96. 0 K$ w# f% i. r2 V. |! X7 w( l8 i0 Q
  97.    if (EQ_is_zero(y)) {' m9 Z8 c2 {  U; O9 E, f0 Q
  98. + \% p) A  |/ F0 Z2 g& P
  99.       if (x < 0.0) { return (PI); }8 e6 S! w# n0 \1 w- j- t; I
  100. 2 S  N, M1 T# k7 X7 Q1 }
  101.       return (0.0);
    : L) {3 I( h8 u' x3 y/ D5 I* |$ g
  102. ; t; n2 W1 R6 \3 B$ i. Q- b
  103.    }
    6 U3 B1 m/ l! E# n" d

  104. 5 m5 ]' E2 B# T3 s' E. E+ Y' _& g
  105.    if (EQ_is_zero(x)) {
    ( ]1 |; i$ d- g) \! q
  106. , {5 _3 O) l5 A/ a7 c! M
  107.       if (y < 0.0) { return(PI*1.5); }8 ~% R, f# o8 S# c: \; g
  108. 2 d6 g% B9 s1 G6 {# }: i
  109.       return(PI*.5);
    8 j2 p+ a$ c4 H  v4 f& Q7 ~( J; P
  110. : ~" t9 S, g3 x; ~2 |1 N# b2 @4 N* A) v/ N
  111.    }
    9 C/ q9 C2 K8 `& A1 Y" S
  112. 5 o; i3 X$ z% y( W3 i2 F
  113.    ang=atan(y/x);! A8 {7 L5 k/ F) W+ K+ ~

  114. " M2 I: V! a; d6 d$ v  }
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    5 h  {$ V0 O/ @& L1 m3 [

  116. $ X) ?0 d7 E, o, j5 ~
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }# p2 M$ t  [  `6 a1 w

  118. $ R4 N0 v0 I4 d: C) C/ m: k
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    ; L; b6 q7 X, _; V6 ]7 U

  120. . s* ]+ x8 E1 v$ k$ n: }8 \
  121.    return(ang);0 k8 F! Y9 w% _* I4 _
  122. 3 k4 V7 r# k) T$ b0 u# w+ ^* Z
  123. }
    . o0 I5 n, I3 b' F1 C: ^

  124. ( ^9 M/ G- U" h2 b
  125. //#=============================================================
    5 h* d& }* X* C1 s3 d* f
  126. # ?$ v3 s* p  Q% [6 l
  127. double CheckConst ( double angle, double constvar  )
    # d; |0 q- j9 ?5 Z2 T/ w

  128. 5 b+ R; I, G8 K4 K# a' ~$ n
  129. //#=============================================================
    ; X  M5 M: W8 H2 S# H7 E9 l* {
  130. ! _1 m! n6 z& B; F, h  K
  131. {
    ' W5 N* V! n' O9 x9 z

  132. 4 n3 v% D- Z3 j  g& C0 J1 p
  133.    while (angle < -constvar) { angle+=constvar ; }( g$ x( s- N' X' ^

  134. # s2 g* Y) s& o2 y
  135.    while (angle >= constvar) { angle-=constvar ; }' |1 D/ w1 v' k2 V

  136. ! i: q+ J6 ^$ f. r+ W: p% D3 ^9 t
  137.    return (angle) ;0 b) W3 ]2 Y! f2 i8 T  p" B

  138. 2 r( B! x) Z$ O$ u
  139. }
    " E4 d: v) ~+ z/ Q$ \' m- d: y
  140. 5 T& [( X( ^( _- y% F7 z& C  Z% o
  141. //#=============================================================
    $ r: w- `- b+ u- H

  142. 3 X4 R& t( i5 s) B* P, A
  143. double Check360 ( double angle )5 S2 J; z0 b' d0 ]& X% _
  144. ; X5 V1 m. \, D3 r. m9 T/ i
  145. //#=============================================================3 f8 d# W/ N1 I

  146. ) }* Q: Z* v! L$ U# r1 R
  147. {
    / N& D  a: C: ~# w

  148. 2 u/ D2 G$ {8 x7 F4 C
  149.    while (angle < -360.) { angle+=360. ; }# {# ^4 P% h  K' W1 ?+ T) p
  150. 0 G/ R5 c- z: l0 G
  151.    while (angle >= 360.) { angle-=360. ; }' W) j, N# @2 n5 G0 ^8 R: @3 L* Y

  152. 4 s6 X! R, S/ X; f
  153.    return (angle) ;- B0 a$ N3 q8 |# W
  154. * C# A; h* c  p- p
  155. }& h: v6 S5 c/ m1 @5 f1 k; \3 J
  156. . o- r, {( y: H9 m# C6 W. t
  157. //#=============================================================
    + I7 o; `% M; Z( t2 V+ w
  158. ! i- T8 F9 R+ E8 j  w, Y
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )" O+ x1 h' P! B. k% d
  160. ! r! u0 K* G3 j) y/ a& b
  161. //#=============================================================' d( T9 b- C1 S9 O, O
  162. # p6 U' f* U  T( Q  G- c9 m
  163. {% h& e* k  F% J/ i
  164. " t( ?. S+ s; z9 g! ?4 a. x' [
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    : N7 ~4 `$ _2 c5 E

  166. 3 p" W" u) H. \1 P6 B9 W/ Y9 O! K
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }1 t* Z0 ^, _: ?7 w
  168. $ b- x8 p) u3 Q
  169.    return (angle) ;
    $ i- [3 f' T' N+ N* N& w

  170. , t3 W! n0 E) q$ P4 s0 u5 c
  171. }
复制代码

; Q) o0 Y& ], m% O" L! M以下为摇篮5轴计算过程代码
% K4 W: E; \4 C9 _! S4 f
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);. o0 k- D4 y! K4 ^1 S

  2. 3 a6 @6 @9 E, s7 p) L
  3.          j=0.; B1=0.; B0=0.;* H% X, }3 Q  N2 {& \( h! X
  4. ) g4 T) ~+ W4 p6 ^
  5.           if (EQ_is_ge(i,0.)) {" V+ u% B* u' S3 R& T
  6. ( }! r4 h6 a7 H: s% ?) N" C
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    + D3 k, p% R6 V
  8. ' M1 d- P2 w, ~- }6 S3 ^
  9.           }. q# H3 Y; d2 J6 O$ N# T
  10.   ?6 d2 n" @2 m) r  I
  11.           if (EQ_is_lt(i,0.)) {
    : F# f' W3 M7 v8 y, ]4 T, t9 _/ i: T
  12. ; g- C/ T9 [# V: _: L; O6 e# K
  13.              if (EQ_is_lt(k,0.)) {  L+ l/ {7 P" v1 B% G/ r
  14. 1 f0 M8 W! A5 X- ]2 l
  15.                 B0=atan(i/k); B1=B0+PI ;+ V! V% ?0 A; @9 Q

  16. 3 e- F7 \1 I) v" [7 r& E; L
  17.              } else {) r$ P" U6 L5 N' S
  18. & ?6 f! |1 i+ ]8 {* U) K. z
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }9 D8 {# I  A7 \" u% m/ W$ x
  20. * z$ V; ]! L2 p" l1 @. i
  21.               B1=2.*PI+B0 ;) H) A% {9 n" Y0 U' v1 V" o) K
  22. ' p# P* Z/ ~" ]& j' a
  23.              }) o) s3 U0 ~6 J1 x' }- J. p* j

  24. . k2 i7 R. V- Z% b$ |0 ?
  25.           }
    - H' E- W' \0 c

  26. 9 `/ h7 _2 B. Y" d+ u1 g% E
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;: a0 _$ n0 A& d  y

  28. 9 _8 ^- U  `3 e+ X* E6 q3 _, e
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    + G+ S5 P* }* f% c& S$ o6 o

  30. * S& ?3 z2 P# d8 W- z+ ^
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    + m; o- h" x" b7 |, E
  32. 6 P1 }: ~, P& ~# ?! q% x) R
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

4 Y6 |& Q4 R, l  Z+ q2 f+ d通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。/ k& ?, l/ |9 M2 t

3 o6 E+ x* l" P% o6 A6 E: Y 640.png
! y" K' T1 V' l. A  z' B' o测试结果:- v0 a9 T) A+ ?3 C
6420.png
+ S+ X8 x/ s& a: {+ d' p
( y1 V/ ~& A. s& g反向测试结果 6410.png ; _, ]5 U2 M8 B+ c

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 03:09 , Processed in 0.603774 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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