找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5408|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    . k- r( a; S: c5 M" x
  2. int  EQ_is_ge (double s, double t);
    " P; M+ y, W+ b" w3 i
  3. int  EQ_is_gt (double s, double t);
    2 i" m( s8 R2 @4 e: L
  4. int  EQ_is_le (double s, double t);+ G6 ~# O% j8 O; f, q  z4 b$ V
  5. int  EQ_is_lt (double s, double t);
    / e  U- W/ @( M
  6. int  EQ_is_zero (double s);
    1 a! ?9 M+ I+ v4 V0 H7 B$ h8 a+ K/ Y
  7. //=============================================================
    , H* g5 f2 x, }4 q8 o) N8 ~
  8. double ARCTAN1 (double y, double x );
    5 p8 c: u# H. d- ]% n% ^4 c, I
  9. //#=============================================================. J; N; x& J6 p0 |7 x
  10. double ARCTAN2 (double y, double x );4 u6 K" C, b- s
  11. //#=============================================================4 h7 U. K; Y; a/ q
  12. double CheckConst ( double angle, double constvar  );) L- R8 r3 W0 ]4 X
  13. //#=============================================================
    ; D! j% L& M- G) ~
  14. double Check360 ( double angle );
    . O* D5 V$ c" V% d
  15. //#=============================================================
      ~! x6 v& ^, B! t& h. _* m
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ( V& X( y8 A# U1 ]% {
  17. //#=============================================================
复制代码

( V' x1 k1 J3 h, S) {! d2 J  `- G) \以下为部分源代码,用于判断,计算角度等
# g; ^$ G% L! i; r: T
  1. int  EQ_is_equal (double s, double t)3 n* k; }9 s7 r5 `8 z

  2. 6 F2 D/ T5 A! c6 s
  3. {8 q; i* s# c0 m" n

  4. 4 B% L, v' N  b  Q8 A3 R
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) ^- \, o, }9 }$ F: E1 _) g+ z, ^
  6. # X4 |$ i* s3 ]9 F# r
  7. }
    " M% h  v# f3 W* a3 W$ U& t
  8. * [$ i  i/ {/ l4 K7 C. T
  9. /***********************************************************************/
    6 V$ j3 K/ j3 ?' z0 B' _# K

  10. ' J/ E# ?0 p/ f+ v+ b
  11. int  EQ_is_ge (double s, double t)
    0 C9 D9 `+ y+ o: h( @- ?. r& N. U
  12. 7 b. i7 r5 w8 U/ L! A! o" l+ U
  13. {+ e# E/ Q8 S8 w+ e
  14. * u8 b. X) k: ~. v6 a2 t
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    / s$ \8 e' ]6 P6 h

  16. 5 R( E* m9 K; J  f1 M8 ^5 b; w" m
  17. }
    ' H# y! W; g, D* e" O0 n+ _# k

  18. 9 I; R* u' c0 p4 p
  19. /***********************************************************************/
    4 M# P* i1 j( |8 x7 `

  20. 4 f. p! O  ?0 C# j/ C( t; E
  21. int  EQ_is_gt (double s, double t)
    6 h) |  H4 Z0 t' x! h) z
  22. ! G' a9 ~9 V; h: M% u1 q" ^: O1 d1 c
  23. {
    3 t# [: ^0 S) V. i2 g' i( Y

  24. 8 d" i/ ^1 B$ h7 `( V2 i, U/ N
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    . [: U: ~1 u& e% y6 m/ A

  26. . s6 K0 z4 T+ U0 v  G
  27. }- q! x) I8 K+ b) h: Z7 e8 g% g

  28. + w7 r5 R, j1 V! j, l
  29. /***********************************************************************/" E  i& l- e! `; q( ?9 A2 a% q

  30. 6 H/ i1 y! G+ L% g
  31. int  EQ_is_le (double s, double t)
    & @6 N1 Y8 X) q% V: L( N
  32. ' k1 o9 g! j9 H* s+ Z/ M# B
  33. {3 X/ b( h2 ~8 }; F5 {( Z2 p! f

  34. 5 {# N* T; L6 ]+ g, m" C' v. l: K
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }' m7 C1 g( Z) A( h

  36. : c. m& D7 L* L+ q/ l& N
  37. }
    7 i$ k# z. X) X) ~; u
  38. 2 D5 d7 O& Y' w1 \& W+ T
  39. /***********************************************************************/- L* {, j3 s/ M- ~/ U
  40. ( [7 n$ `4 E+ [0 `" {+ \( |
  41. int  EQ_is_lt (double s, double t)
    : W4 a! ?5 C+ ^7 T6 h5 }
  42. # Z+ Z% M! }0 _3 M
  43. {& b0 \0 _8 c" y$ o

  44. 0 ]9 ?; z1 ]/ e$ s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    , @+ Y; A! s  W0 }+ {

  46. ( K' G, V7 ?" C
  47. }! `3 R2 \- d3 ^  A

  48. % R& G- X- H; P7 Z& M' w
  49. /***********************************************************************/3 @: D  s& Q" g. H9 L1 D

  50. 0 \( S% V% b! g2 L& _
  51. int  EQ_is_zero (double s)
    9 o6 q4 V' E# z  s/ W8 K$ F( s
  52. ! n1 i& v  B/ L6 B5 S) e, d
  53. {9 T% @. K0 S2 b8 m& b4 F

  54. 2 u- C7 b  j+ z5 n8 \
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }1 O  G" }1 [% j' ^

  56. # H# ^, J* ?" _! e9 e8 l/ {
  57. }  E% ]) J. v# r( z
  58. 1 M2 ~% j! q5 ?. @  B! F  h+ ~
  59. //=============================================================2 q: _- }5 T: B0 D7 ~
  60. 0 W6 @/ r  t% [) `: ^9 J  M5 ^/ ~
  61. double ARCTAN1 (double y, double x )
    ) s! n& ~5 ]3 A/ ~% F/ _8 @1 P

  62. : ?) c1 t7 `2 D2 U" x
  63. //#=============================================================
    * \. Z, u" }) q4 V
  64. ' i$ \+ q1 d) [, B; H4 j5 g/ h
  65. {
    . u; h9 r- {9 V  z7 `/ T% D4 ~( W" {
  66.   h. c  @6 J2 N( R8 h& L
  67.    double ang;; Q  U7 C& ~9 d

  68. * t2 V+ \; Q- `2 Q/ L! M+ [
  69.    if (EQ_is_zero(y)) { y=0; }
    * U5 s5 z6 P3 u1 T6 \6 R
  70. 1 d* i4 r; O! o4 z( e2 \
  71.    if (EQ_is_zero(x)) { x=0; }
    1 X) n8 @" i& W& `8 d+ x
  72. " b% g6 c& X. q" B. ^
  73.    if (y == 0 && x == 0) { return(0); }+ k: e4 K2 w0 o( C
  74. " a" r" O, X2 _& {, l. S: t
  75.    ang=atan2(y,x);
    - a* S. x& t% M- b4 g* O/ ?
  76. : y+ v- V1 ^" ]- I% K2 N, n4 F% h
  77.    if (ang < 0 ) {
    - W/ t' X& t3 [) r! t
  78. 1 m# r0 y- T4 D
  79.       return(ang + PI*2);
    2 m/ `5 S: A- s4 V

  80. ! h* K7 R, y2 c, y% `  s
  81.    }
    3 l* _6 {. l7 t! X3 K
  82. 7 U* C5 f0 y; ?% C
  83.    return(ang);  `, ]* P8 t  K

  84. 1 `8 k: E' a) {9 L1 N/ p. n: D5 W) T
  85. }
    ' X/ w% B6 ^" Q9 D& o! I0 c
  86. ! ?& I0 u1 ^+ a, k( {: T# @
  87. //#=============================================================1 N. ~, m$ f6 Z) t; c7 M

  88. , t/ `& e& b  r; _# x; L6 A) P
  89. double ARCTAN2 (double y, double x )0 M; G4 y6 Z# s, e' c5 _' \

  90. / L! h2 X! B$ y/ ~; a9 o
  91. //#=============================================================
    5 _0 [% {+ V+ t/ |/ o

  92. 9 Y6 b! r; ^% \$ q7 k
  93. {
    ! B5 ]0 Z: q. r( Q0 A; b6 }, f. g

  94. # B# e0 I' p; q
  95.    double ang;# J7 S9 r+ _6 ?1 {6 M
  96. 6 |: P) L% L* M; Z
  97.    if (EQ_is_zero(y)) {, b. P" |2 t0 m8 r4 O
  98. ; S" ~9 [+ V) g+ w  L; Q5 |
  99.       if (x < 0.0) { return (PI); }( Q! P- Q2 k4 g. `+ o

  100. ; a& _; r5 v* A8 K+ [  v
  101.       return (0.0);
    + @; S3 {' _! L( F

  102. " \/ Q% w8 ?" o- M) L$ {
  103.    }
    ; T7 Z( W( [0 x/ F9 o  d: {
  104. 2 U+ G, x4 b" w9 R& K
  105.    if (EQ_is_zero(x)) {) c8 m( c+ M. j- G& I, u# L& `% T, k

  106.   P" C1 z, Y$ @# z7 K0 L6 o
  107.       if (y < 0.0) { return(PI*1.5); }0 }' `( l0 W% [2 `

  108. % X1 N' G! m2 _( E, z
  109.       return(PI*.5);; ?! \1 p( U3 k6 O9 S0 l) S8 C

  110. & |4 u' Z% t- E/ C) `8 `
  111.    }% V3 e2 n4 p5 x% U
  112. 9 b1 s2 N, w( E1 O& [
  113.    ang=atan(y/x);
    + W) {4 N5 E0 i2 Z2 n/ w

  114. 1 I$ o& C# ~  s% V; @
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }2 A5 B* Z8 U  B; K( L8 ^
  116. 7 }. t0 q% H: }$ q5 O. j
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    & |6 i1 ]! ^6 L, V
  118. 2 Z: L9 [9 G6 U: |
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }5 ^# T- O6 v( w% X7 Q* D. [3 ~- q/ a
  120.   \- U9 f4 ~) r7 q8 _# L- S; ?3 S
  121.    return(ang);
    % K- h9 c9 F# t0 C2 x. i7 X4 e' r( |

  122. 7 H& O6 u3 q; h) V3 o6 ?! @# D/ x
  123. }" ~0 j3 x# P  \! E/ R
  124. 9 D8 Z. }* H2 R1 `3 x9 Z
  125. //#=============================================================0 b' H( N8 v! u/ e9 q

  126. & ?; b# b. x9 E' ], n
  127. double CheckConst ( double angle, double constvar  )
    $ F; o" S! Z) l/ g
  128. 4 ^/ ?+ X/ t8 w
  129. //#=============================================================* m# S4 E& |! x4 T+ U% a

  130. , L3 }3 p# ~! |# T% [
  131. {$ U) r3 O. A7 r2 s( J7 f* c
  132. 0 K) h8 Q/ N" V/ z
  133.    while (angle < -constvar) { angle+=constvar ; }
    & J+ i. C( ~% o* {: s9 V# o

  134. , \+ C8 Y$ p6 `3 O- \* ^/ \& q5 H! t
  135.    while (angle >= constvar) { angle-=constvar ; }
    0 G) S2 Y! I# t8 X0 W  M
  136. ; U! G3 F; M' @' J& @
  137.    return (angle) ;
    5 _2 R! n! P, z, {8 O2 }! n5 C: @

  138. $ ^1 [- |  l1 Z1 F
  139. }' q+ Q8 q8 T4 y; H% {' r. I0 o
  140.   Y; H3 N6 ]8 g; B
  141. //#=============================================================
    2 s9 Y8 t; c0 y, D# c4 k4 \) I

  142. ; v, c0 {' V+ N, k& e. j* m
  143. double Check360 ( double angle )/ c- O* k" D% o+ h7 P7 ^- B( @
  144. + x1 W) O6 b6 i0 A
  145. //#=============================================================
    8 i3 i$ J( _$ d! p, X- c" b! e+ d
  146. 6 @( I0 ]7 b! z; s# ~6 a9 Q
  147. {% o8 I& g: i7 R) y( Q% W5 r' B

  148. ( `, T8 l! V* `
  149.    while (angle < -360.) { angle+=360. ; }
    3 h: g( r% N  J3 e  H! }% ^/ {
  150. / O# _8 R6 q) ?# f
  151.    while (angle >= 360.) { angle-=360. ; }, P$ {+ y7 U4 \* M
  152. 3 A3 i* _8 ]$ L( C
  153.    return (angle) ;$ L  p, k, e: l# W* \* s

  154. / i# v/ Y6 K! y& R' |. w0 j
  155. }
    & h: O( L( s+ v3 B% L* t
  156. 3 A8 S5 v6 O! M# {
  157. //#=============================================================
    5 v% U% B& \+ j) {2 g. K. Q

  158.   ^( z. Z' C! O3 X; u
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )8 _) t/ \: c9 ]4 q! @. j! M
  160. : _( F# u5 v9 b7 z
  161. //#=============================================================
    0 l0 i  _9 d9 M
  162. 9 @7 v, W7 I4 J6 s! l
  163. {
    4 o& A- E- h2 n+ P- V! B

  164. ; l( y5 X1 J  m
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    7 }5 v# n* P3 p; D4 f7 [: t- z9 h

  166. * j+ W4 h% Z( V. m2 E! s
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }+ ?1 a2 H% a  d; B$ s2 g5 _$ u
  168. 4 @, z  q, c- _  N
  169.    return (angle) ;7 r5 j  F4 I6 e2 }

  170. 6 z9 R- y# V0 q. j3 K* B" f
  171. }
复制代码

* N* y# e6 k/ H" q5 [  K以下为摇篮5轴计算过程代码
; V, T* S8 a- [" k
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);3 E) n# z; w+ f9 k6 b  u
  2. 2 [0 {7 l# X- W
  3.          j=0.; B1=0.; B0=0.;- ^6 b$ e. F3 k9 r8 S1 B

  4. 6 O1 T! }4 @5 P! f! ~+ i. F
  5.           if (EQ_is_ge(i,0.)) {
    % `) y5 L% e, Z9 W5 C- Z

  6. ' [+ K' R5 [' |+ l, N1 y  |
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }1 {2 s' O1 R5 r

  8.   |  q" ]$ K- ?, v$ a1 N( f
  9.           }, d! U$ q! S+ v8 K
  10. ( Y$ |! M; g! C. T7 }9 A
  11.           if (EQ_is_lt(i,0.)) {; q- {6 ?5 K6 f# c

  12. % K& x* `  M3 h
  13.              if (EQ_is_lt(k,0.)) {
    " J$ n8 h  w$ D' d; n1 y
  14. 2 y) W& m; D: \# w, l  \+ O
  15.                 B0=atan(i/k); B1=B0+PI ;
    7 ]! C# `1 X( d+ n8 J& `% e
  16. , a4 e4 `" L: S+ _- a
  17.              } else {2 y9 W6 D7 \" [; w' P* q
  18. . p1 q. S& ?: x
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }( |$ |7 K( ?$ W& O+ l( [) o
  20. ' [: i* {& L, m) f* R, V: I
  21.               B1=2.*PI+B0 ;
    1 t: T: }3 \3 _
  22. / b( _3 e8 T8 C
  23.              }
    ) j+ C6 k, G; C6 D

  24. ! M1 V" }" x8 Z! F; c
  25.           }
    " y5 K. C8 F2 P4 K
  26. . P% c/ e; u' M$ N
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    . \! b; N2 U: P- p  ^0 A3 w) o
  28. ) O2 y* Y3 Y, k/ q$ |" {/ a* G& h$ V
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));$ i) e1 m( x, c

  30. 6 `. x! T# p) ]
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    4 ^3 t6 |# b3 p( E* L, ^

  32. . ?3 k$ h9 ~% Q  v
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
8 @; ?1 V4 f) O  e/ V: U
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。- a! T4 t2 D$ l

2 m. p( ?% c9 k: o 640.png + P3 `3 E! `6 j# P9 Y
测试结果:
2 k& g, s0 \" W$ ]& g 6420.png : l: j- D0 \( w: p2 a

  m. y  ]7 q0 b' u: ?* @* e1 ]! k* Z反向测试结果 6410.png
# s+ m  D1 R. T/ F) Y: U/ |" U

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

159

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-11-4 23:38 , Processed in 0.929229 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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