找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7476|回复: 3

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

[复制链接]

433

主题

5758

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    # d* ^4 q0 m& p' {
  2. int  EQ_is_ge (double s, double t);
    - K" n% G0 @" F0 U; ^. {2 H
  3. int  EQ_is_gt (double s, double t);
    6 Z* G$ j4 K5 G0 z- P
  4. int  EQ_is_le (double s, double t);
    - H" @3 Y  u6 P9 X( b% v+ ~1 Z
  5. int  EQ_is_lt (double s, double t);
    ! A6 M/ C. k# s- L* Q$ F' ~
  6. int  EQ_is_zero (double s);
    ( W" G& S4 ?- b) W# F, q- `
  7. //=============================================================
    4 |+ J0 E* o" ^3 A: a# ]$ D& z
  8. double ARCTAN1 (double y, double x );! v) @. z( E( H  P6 c
  9. //#=============================================================
    ' v. r. L- i5 f" e5 a8 R
  10. double ARCTAN2 (double y, double x );& f' I* y, m$ o& k
  11. //#=============================================================8 t& Z$ b; N: L. H4 s
  12. double CheckConst ( double angle, double constvar  );
    / J" q0 n1 W+ C- a* @3 O
  13. //#=============================================================
    4 D, G! ]0 p, C/ B" {' y# U" L% B" [
  14. double Check360 ( double angle );) V* Q7 u; j2 @) f4 h
  15. //#=============================================================
    & x7 o2 g) b5 e( l' a# n- |
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );, L8 v" ~% o: ^& ?- g4 c5 r
  17. //#=============================================================
复制代码

* N- c  Z7 L, v# R5 y' [+ t/ a$ d以下为部分源代码,用于判断,计算角度等' P& m; s) k$ G8 `# }6 o
  1. int  EQ_is_equal (double s, double t)
    : X& r. z" E" N0 ^
  2. 9 Q7 x( R- \/ Z- f+ |& w
  3. {
    ( t+ T8 w! _1 E6 v

  4. . O% C+ i0 b" {- G; h
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    + w: P, J$ ^3 M# r
  6. 4 M( o* r8 q% |1 d4 f
  7. }
    / b- [7 h1 H# ~3 G5 a) T2 k( e
  8. 9 n( I9 O+ B. `6 \
  9. /***********************************************************************/
    , ^" e& O, X* Y3 a% Y9 \" U9 V
  10. $ K0 Q* V. k: S0 f3 F
  11. int  EQ_is_ge (double s, double t)+ C! D( p8 O3 o
  12.   P% p2 e+ A( |! B# x6 B9 t- I
  13. {
    % W0 d; v4 k2 j( }0 F$ n( U
  14. 6 s8 O( R. {7 z4 Q% R
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    / V! \5 n5 N1 S/ A7 D$ z9 o

  16. 8 M) m8 Q3 s0 S: X9 {4 v) G
  17. }4 `+ i0 }1 z# l2 _

  18. / T) i: a" q$ Y
  19. /***********************************************************************/& M$ O# D3 q( G$ @7 r% C* g
  20. & Z' S2 a1 G5 b8 U8 T9 f: R) c
  21. int  EQ_is_gt (double s, double t)
    % K$ R: {' K: h$ M
  22. - j9 o$ k  x3 {  A
  23. {+ [  g- B& G: r2 j, g

  24. 4 e3 F& l# o( `; K- n
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }, N% s+ S4 G3 R: y
  26. 8 i2 E  C) R' b' I2 L& e7 g
  27. }
    4 I8 y9 H7 a' o2 A
  28. * [% d$ O% N# Y0 Z
  29. /***********************************************************************/
    ! `; E/ G7 i7 H) p4 K4 ]* {4 p

  30. " |4 v" h7 L1 \$ R, ^( _
  31. int  EQ_is_le (double s, double t)
    ' m# r# g" |) r. L5 X

  32. 4 q1 _- J0 M# Q9 N, O" }
  33. {6 V  ?! G8 J8 `9 `2 Z* d6 y

  34. 0 j, ?/ q- }& P
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }$ y+ X/ J' E) Z1 n# ^1 c7 _2 e

  36. $ I1 h$ m( K3 M* e; s, g
  37. }' C  V2 f. K/ i* c, G

  38. $ O4 A$ ]! X% ~& N" W+ V
  39. /***********************************************************************/
    ! I  E" ]- G# \

  40. 1 Z* Y& x) R. m- j# r
  41. int  EQ_is_lt (double s, double t)1 m9 C& W  W+ ^" ]% F

  42. ' \/ F' o* ?- d: ^# ^: H
  43. {+ t1 W$ Y( u( M- _9 x+ r

  44. " y8 u! \: P& C$ Q% f
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }( `. }1 A/ P  e% p0 x+ Z& d

  46. * m- S1 ^) M' |7 I* g7 Z  ?2 c; \
  47. }' @- b! k' A; s  M/ y/ P' ~, a

  48. 4 C' L' S7 a9 J
  49. /***********************************************************************/% w) D; _5 F: T7 Y* v: ?
  50. $ R: k8 Y: ^2 E- Y& l
  51. int  EQ_is_zero (double s)
    3 k" ^# j* x$ d6 l& N1 u

  52. 5 A  A) P: n& r# m. L( Z
  53. {
    * @+ N  v- t2 f
  54. 8 E8 }3 v6 ?+ A( T- Q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 M0 g  w1 Q5 t" p4 F% r7 [* G& W0 G, f

  56. : U1 P/ h8 L4 _& d$ A/ ^4 x) E5 _
  57. }' T( O$ `4 t1 a$ G8 f9 R; x2 M/ y. b
  58. . F9 r0 E' n, U& b! V$ `. g
  59. //=============================================================! Q5 \) U5 v  p3 R

  60. 8 |) A' e5 V8 `. }" y# r: x5 C
  61. double ARCTAN1 (double y, double x )
    / x6 S8 F, U* R" f2 O* H

  62. 1 k# c( \% i5 B* Y
  63. //#=============================================================
    : L+ e! @5 S" G  o' I

  64. ! H8 ]0 J2 y8 t/ Y8 b9 ]
  65. {7 z8 s; d% l- k

  66. 7 _' f  a; x! G- d  n& ^' Y: U
  67.    double ang;
    + a5 D5 A- b9 G, G8 D* ~
  68. 9 j: {! V/ |0 o) G
  69.    if (EQ_is_zero(y)) { y=0; }
    + H5 m6 k" c1 ?
  70. ) R, `( v) l/ R7 |
  71.    if (EQ_is_zero(x)) { x=0; }) x( S7 C0 o- I8 k0 F- N
  72. " L$ [. j6 I% ^% l. m+ |
  73.    if (y == 0 && x == 0) { return(0); }
    & w3 v- ^) o0 z0 e9 F# b7 R
  74. 2 C9 [! ^; S( r0 ?  G) D4 {* J( c
  75.    ang=atan2(y,x);) o/ Z% {3 T# u' D3 t. Y& Z% Q
  76.   d1 a4 M5 ]* v) J+ s
  77.    if (ang < 0 ) {
    6 |7 I9 V. k* ^6 h$ i; w8 d

  78. # I% f; b5 B% G- h* \2 m0 ~
  79.       return(ang + PI*2);
    9 v# V1 s8 _7 x( |' G* r6 d+ Y
  80. ( i9 F! ?  w7 c! ]
  81.    }/ T* X( |/ M! z6 i
  82. 0 @- f. v/ W& L" V* Y0 c/ ]7 ~7 ~
  83.    return(ang);
    " P3 h2 b7 [/ j
  84. 9 k" Z5 r* k$ D; [4 \
  85. }9 P: `3 ~% K4 O( n
  86. % Y( L8 ^* G* V& i
  87. //#=============================================================
    4 b/ B* e7 g" ]' d  z7 v7 f0 O+ E

  88.   e) ~' V7 D# N* H, E$ [0 ^
  89. double ARCTAN2 (double y, double x )
    % h, }% L' P$ A0 X/ d+ C# D
  90. & h5 M" q( d3 Q
  91. //#=============================================================
    - M) u! w- t. A5 Q* j, K
  92. 8 b2 i+ Q0 V& |/ U' K( Z& M0 C9 _8 H
  93. {
    ' D9 n: J: ~5 c1 p  L

  94. ' i" _+ ?# |% b( O  f" c
  95.    double ang;
    6 |3 i/ `0 q  Y/ @2 ^' L9 `

  96. 2 X& ?: u1 `- d8 T& J
  97.    if (EQ_is_zero(y)) {4 c% U8 C7 ]1 N
  98. 3 P: v$ Q6 Y: |% A
  99.       if (x < 0.0) { return (PI); }" W9 Y- \0 f- W  u  T; Y1 ]3 S
  100.   @% V- W- c4 H, z
  101.       return (0.0);
    . A) u/ \; l3 }  l

  102. 6 k9 i4 E  A) d1 L/ b6 j( M/ L- Z
  103.    }
    * b8 Q* e4 r- [( z. U
  104. 8 R8 Z5 s8 M6 H8 b7 |
  105.    if (EQ_is_zero(x)) {, s5 @9 T0 {  m5 G, f" R" A

  106. 7 o3 \( O* ], a! \" o3 I8 P1 D
  107.       if (y < 0.0) { return(PI*1.5); }5 J* B# D, ~/ d3 T2 O* H1 f- `
  108. & M& Y6 M, b1 ~; H* z4 A
  109.       return(PI*.5);
    : _. P- Z9 S- ~6 E4 B8 t7 G1 G& l# c

  110. 6 M4 }- j$ Q2 n$ w( x3 y8 ~
  111.    }# p) k7 _7 T% f% \: @3 x  L) A1 @
  112. 1 z3 ]0 T: b9 D: P+ D5 N( B
  113.    ang=atan(y/x);, P/ y# a* ?# f3 `
  114. 9 _% _, U# @/ k; {$ N% T
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    + Q" I8 U' L7 I/ z4 P$ L- Q6 p
  116. ) p) G( R3 {( O0 Z9 g
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    4 ?) m1 v" ?1 p
  118. ) m, H, i4 a( e& Q2 R
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }' x& _5 C. r2 p4 r. X# ~
  120. + x, F7 a9 @8 p
  121.    return(ang);8 ^& B( H- M9 E% ^* f) a
  122. ! J/ k, _+ V8 j" C# j
  123. }
    * q( K! f* Z0 c) ?3 m
  124. / p2 a# G) {2 d& @
  125. //#=============================================================
    4 h/ U; n: ~8 B& N

  126. + T2 p+ o; n# q. N  u* y
  127. double CheckConst ( double angle, double constvar  )5 {2 _* o4 Y4 K' `3 e( D8 L( n, R

  128. & `) C( `) X" }# X' M3 y
  129. //#=============================================================
    # B. a& d0 n- U* y& e

  130. 0 I- E7 V4 a. a% b3 ~$ v3 B' U
  131. {
    5 O+ }+ e$ T) o. q4 J: ^' r6 y* D
  132. , `: U! m! B6 L6 j* h1 z
  133.    while (angle < -constvar) { angle+=constvar ; }
    8 z' z0 u, Q( u8 E

  134. ' d7 _8 Z" z$ T( p7 Y% r- X
  135.    while (angle >= constvar) { angle-=constvar ; }
      u! R3 S7 r- C% A! w  u
  136. ( Q1 e+ E- t2 |* M
  137.    return (angle) ;( T4 r1 ^% p3 j7 @4 S+ V

  138.   W7 n  x9 K1 u
  139. }0 W- A, q1 ~: x+ u3 z
  140. 9 V# y7 b7 ^- k3 t- e( P/ d/ l
  141. //#=============================================================. u( v! ]4 O2 |, X

  142. * m+ I: ?7 f% b, Q! w4 f
  143. double Check360 ( double angle )* ~2 n/ G+ D: C6 P2 s

  144. 5 q' ^) Y* b( x% k
  145. //#=============================================================
    1 i9 q6 z9 I" N/ R, m

  146. # }* D8 C' _7 Y8 T) u. u+ h
  147. {
    + \* c6 e, a% F, [/ c4 T
  148. + T& q  s& p8 X: d. L# C3 p  w
  149.    while (angle < -360.) { angle+=360. ; }
    * l; S0 n; S8 c- x/ a# \! G

  150. 6 ~) S# F. Z% z: \- n% T. d
  151.    while (angle >= 360.) { angle-=360. ; }
    - w2 Y' t) @: P* \- a: e/ B$ _- {
  152. 7 J$ }9 R7 C) x4 }# S; O
  153.    return (angle) ;& f; [& }1 [1 o; r6 F- W
  154. # r, M. I: K4 _- X1 h; ]4 t" R
  155. }7 Z# `1 ?4 |) I3 g* K: M% r9 D
  156. , Q& L+ g+ Z" C7 }% O5 x6 D" H
  157. //#=============================================================* C4 C7 @5 Y" r0 s; r' g; L
  158. ; ?/ n7 O0 _( _$ N- I! a1 ]+ z
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    + Y3 X, |: e( ~
  160. . x0 e/ M" I8 j8 k: r
  161. //#=============================================================: [$ g7 c( T( J
  162. ( [) y) f$ {: }9 }# \9 Z: |$ K8 f& [
  163. {0 w7 |4 c8 n' v' x% U- {

  164.   ]4 d7 m% V( a* m0 R9 {8 M
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }, b" @9 C& T) t" U7 a
  166. 4 s$ H' k2 P( o; m5 j' ^* k
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }# l! n2 i6 q  z" G# }

  168. ! b: d) m2 u) B0 r
  169.    return (angle) ;
    ' A5 p2 v0 s, j7 T& }  p' B

  170. $ m$ Y0 W' e- G1 u6 t
  171. }
复制代码

  M8 k# H& G/ J. O8 Z0 @以下为摇篮5轴计算过程代码8 c/ ?7 d# {6 E( H6 i8 O
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    ) A# |! n+ b0 B6 \
  2. ) D8 D1 ]" t' a& v2 w+ ?. A5 |
  3.          j=0.; B1=0.; B0=0.;/ O( Y9 @. {3 u- C
  4. 5 I0 S  S1 M/ }. R
  5.           if (EQ_is_ge(i,0.)) {
    . u5 e& E0 r; b

  6. 2 e$ b. y3 @; Q: J! `# L
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }* |. ]3 P* x; b( W

  8. % O  u7 D1 m( b: K- @' d7 R  Q
  9.           }
    0 ?8 V! m; x, N

  10. # P8 ~4 O+ a# o5 B6 K& `+ b
  11.           if (EQ_is_lt(i,0.)) {: d7 S- p" \0 J5 N0 t8 u
  12. 2 {, P% {1 ]6 A  t
  13.              if (EQ_is_lt(k,0.)) {9 Q5 C4 M: i$ y/ t8 y
  14. " r7 O/ y  q/ {/ u* }+ J$ `: j& {
  15.                 B0=atan(i/k); B1=B0+PI ;; q6 L& s  D$ a$ e/ l
  16. 4 r; L/ u7 _$ ?6 G- e/ X4 f
  17.              } else {
    ) \2 ]9 l1 i5 q4 G$ ]1 s

  18. $ [' C- }5 ]" A. |( E* g
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    - _, g8 ^% h0 t9 c
  20. 5 Y: Z- |( K$ P% ]2 G* u' Q: _# \
  21.               B1=2.*PI+B0 ;
    , z' d) `2 F* a; r. V6 K0 ~5 z
  22. # L: J6 E- S. i" a1 J: j
  23.              }
    $ o) O2 }! e& ]# K5 {6 Q. l4 w3 N
  24. & y9 _6 Q9 w4 b/ h4 Q3 U5 }" B, d
  25.           }
    ' L4 {! _( U- {1 g

  26. % b: d6 X! f2 V/ O" B
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    2 P/ c( v7 k. a

  28. & S, r1 Y/ k$ l" _- M
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));( X+ \, ^2 j/ @5 H# I( U
  30. : m0 Y: m1 f! ?+ U. k% a
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;- }3 b' b; ]/ N, m4 K2 S7 [
  32. ' d2 c0 o* v" ?
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

9 l# @' i: d& w- j, U" z9 p: T通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。" I) M' L; Q$ U8 I# [/ F
; \" |: v' l% x/ r, ~* x
640.png
6 X7 Y* }. a) m/ T7 w: e  y3 P# w测试结果:$ @0 F& R% s8 `+ M- e
6420.png
* t$ f% {+ U5 C& l
; Y5 z; \) d* t反向测试结果 6410.png # f: U; ^) @" B& \% g0 A* V

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

237

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-5-6 01:38 , Processed in 0.545604 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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