找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8758|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    8 W; O/ g4 I& K1 ^; G) g  U5 d& u
  2. int  EQ_is_ge (double s, double t);' s" D6 p0 H( f; i
  3. int  EQ_is_gt (double s, double t);3 X0 t- ]8 ?& k# o2 G  N
  4. int  EQ_is_le (double s, double t);
    ) ~; u( m  x. N' \
  5. int  EQ_is_lt (double s, double t);" ~' y* E: C0 D- E1 j) D+ m3 b
  6. int  EQ_is_zero (double s);* @% u) p$ |- O. z: m1 o) L5 A' M
  7. //=============================================================4 J" u$ J3 z5 m' k# H$ K
  8. double ARCTAN1 (double y, double x );
    % ]1 G9 A' s, d; z! y; G
  9. //#=============================================================
    # K# c4 D1 S1 V
  10. double ARCTAN2 (double y, double x );
    3 G: b% X- P9 r/ u
  11. //#=============================================================
      s! j. I( e: A- B: ~
  12. double CheckConst ( double angle, double constvar  );0 M# p8 @1 S8 {# Q
  13. //#=============================================================
    ; H; {% z2 @; |6 h
  14. double Check360 ( double angle );
    $ p7 T& Q$ c  G
  15. //#=============================================================! N* S6 @' \' C
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );9 C$ ~3 G4 H9 F6 S! K
  17. //#=============================================================
复制代码
' a2 l/ x; g$ J) [+ Z" @
以下为部分源代码,用于判断,计算角度等
5 s' N4 N/ q. r% n! T
  1. int  EQ_is_equal (double s, double t)# z1 l8 j( B- \% u! a: u1 m

  2. $ P1 E% E- f5 M8 {% r
  3. {
    , ^7 A  @% Q( s$ E

  4. & {0 ]+ f" D8 E; u& Q2 D
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }9 b3 W( a- `9 j0 {  |
  6. ! n) I* _* Q5 S/ k1 T0 Z
  7. }
    9 b! W1 a6 I# n, i9 |3 B5 C) s

  8. % T$ i6 n3 y( U$ U. d9 p7 A
  9. /***********************************************************************/
    ( A+ V5 O* B) W3 {2 R$ F8 p. k

  10. + ]. z1 }8 h$ i9 d% r% q- U
  11. int  EQ_is_ge (double s, double t)8 }* u7 _3 @1 }8 ^. h: U5 F" s6 f
  12. 0 _$ X% }/ X0 o, V* F* y
  13. {
    * _! ?! `4 f& G6 D  N/ S

  14. & {+ j7 Y2 q# K5 o9 v$ r
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }: t9 e0 {. t( C. }: \- `. s9 v5 t6 g
  16. 0 y4 x' Q* h( t3 E6 |: S6 M/ o
  17. }
    ' V5 h6 X6 z9 D! ]: t
  18. 1 Z4 x! n! N* O: K, o
  19. /***********************************************************************/$ \8 x, d* c/ G5 O) j7 w

  20. ! Y" b) m8 h3 u7 ]! ^; @
  21. int  EQ_is_gt (double s, double t)
    8 }/ `$ E; g9 k' b
  22. " W2 a4 P' B" y
  23. {  y2 H: H' ]6 j4 z. g2 D

  24. 8 m2 S9 {8 u' a; p
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }& T1 V# S- A/ K/ m+ B1 N5 z
  26. 1 w6 _- f6 E( F  k" o( e' @; X5 j
  27. }
    9 a1 B8 B, U; m$ G  `5 I% g- b

  28. . K' j1 G( N( w0 [9 |0 U9 H
  29. /***********************************************************************/
    7 A% E* H* t/ ]* e! A7 P
  30. 4 P/ U7 l; ~# y' g6 s
  31. int  EQ_is_le (double s, double t)8 k5 g) {5 t2 T& j! P
  32. / O' {6 B6 w, m" q1 N, t7 L; D
  33. {4 h5 i7 ]7 b9 b4 G4 e
  34. 6 O! a( ]% x: v/ r: L6 W' T
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }6 @0 k& d# ]6 k# e1 I- }! d5 ?- a

  36. % e/ @! _/ @' E( t
  37. }" z% Q* T! m) N; N& [

  38. & X8 G/ [% a; G% {- u7 h% Z- \
  39. /***********************************************************************/
    3 I& c. Z/ Y/ a2 a$ V' [4 Y* q

  40. $ m6 B, G1 |% u* L& y2 T- e
  41. int  EQ_is_lt (double s, double t)
    - f$ s, K& N* x& ]

  42. ! p2 h1 E6 L/ o; c* [- j
  43. {
    4 N! T9 p4 Y* Z% T# [
  44. 1 _) s( H: n8 L5 V7 Q5 I
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }3 `& |! ]2 Y- x2 z# x0 E5 F

  46. & U1 H7 a1 ~6 f( m( N/ O3 p" l
  47. }
    6 C- |4 W, U( s/ Q

  48. 3 \5 W. e9 Z# \, r  t
  49. /***********************************************************************/1 G+ \# m0 x% R/ B  r* |
  50. % V5 P$ I4 f% s9 T9 a; r: g
  51. int  EQ_is_zero (double s)/ u- x; _7 {% |" v; M

  52. ) M0 }* R# D: g0 D. V
  53. {
    4 x/ ~1 j" e3 S$ W+ Z9 L% I

  54. 7 k) Z1 E+ R2 F. x
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    6 x3 }3 K) V: L! L7 O5 W* ~/ x
  56. 5 P- c/ {* Z0 T* B( {2 t
  57. }
    : t" a. _# S7 I- ^! ]; T
  58. ; A* L" o4 [. }! m% w
  59. //=============================================================9 q5 b* z; Q; j: b% e. e$ s
  60. / |3 e' v8 \% ^  L: M! p
  61. double ARCTAN1 (double y, double x )6 Q% s1 ]4 N, ?0 v. `4 v
  62. % b* l1 Q+ Q9 c3 T9 q
  63. //#=============================================================) \$ F4 t; p. V/ f' K2 J
  64. ' a8 ?5 M# O. S+ h0 W
  65. {
    $ q+ M# j& D* h# `6 T$ d+ ^

  66. * w+ n4 \1 P& T! Y: v9 `
  67.    double ang;5 M3 b0 ]  o9 f. R+ l) X  U
  68. , [, P) m8 N; l/ o" K
  69.    if (EQ_is_zero(y)) { y=0; }: R* }  l1 @) t$ G( a. |

  70. / @  }0 B9 r! G4 ^7 B2 N1 X- g& g
  71.    if (EQ_is_zero(x)) { x=0; }
    8 p, j$ X$ x% y. U! J
  72. 7 H) U2 y. E$ J: G: u% p
  73.    if (y == 0 && x == 0) { return(0); }
    - ~; B& l3 E9 s1 H! j/ p
  74. ' ?8 R7 l& t3 v3 l# c4 F# E
  75.    ang=atan2(y,x);8 v% q9 U  W% ^0 A  t

  76. # g1 C2 o* e1 _$ |
  77.    if (ang < 0 ) {
    0 {' j) Z0 B5 @- H8 [; [
  78. " o; \  y5 k$ j( [1 @
  79.       return(ang + PI*2);) ^- K) Q$ y" \3 Z! x2 j$ x2 _! ~2 a

  80. 4 K+ Q4 N8 Y6 l: C* m3 [
  81.    }
    # n( |# M' a+ v' y. N8 K
  82. 8 E4 t9 {3 ^) u2 D3 F1 G
  83.    return(ang);  H$ m( a& l) U, `5 j

  84. 5 v3 B0 `6 O2 d9 I# \7 e  `& o2 `
  85. }, \4 F8 x" ^* n& }9 J+ }
  86. 2 U7 C# y8 J: [) u0 C
  87. //#=============================================================7 h% V% ~6 @: @: Z# e4 }

  88. " T  w3 }2 `% y' a) \  a
  89. double ARCTAN2 (double y, double x )( P8 d0 m/ U! Y1 K! q1 {$ t

  90. , h5 v. U" d+ Y; R4 [8 W& ]5 K; k4 {
  91. //#=============================================================, h, N' V: }; E2 X! H( m" O; T
  92. ' U7 L) G% T$ C; z- k
  93. {
    ; _6 Q, Q( [8 e! Z1 U7 _1 i" G

  94. + l' ?0 K/ S. Z# D! t
  95.    double ang;2 m6 _, w/ Z; E# {/ ~
  96. " F+ h# t/ P8 d! k8 D3 }+ P9 ~
  97.    if (EQ_is_zero(y)) {
    9 @# Y# B+ b# ^+ u7 n$ E6 G

  98. / @+ B" _' A2 Z- p  Y5 {
  99.       if (x < 0.0) { return (PI); }) M1 q# X  q7 e! c* K* Q9 a

  100. 0 Q9 O& B3 V& F
  101.       return (0.0);
    - ~+ \+ ^* ]$ k" j. R7 ?6 H
  102. 7 j, j* {- I. B+ H( _  b
  103.    }& x8 e8 J& o/ _/ j& e. o% ?
  104. 8 p% Y4 D7 \- e' }/ }$ e4 Y
  105.    if (EQ_is_zero(x)) {
    6 u  a: {! t* t" m' B9 I2 r
  106. 9 E8 Y) U7 D) @2 |' E6 y/ L
  107.       if (y < 0.0) { return(PI*1.5); }
    2 R" \2 [' @: @( a1 ]: K' S- O5 G9 i  ^

  108. - S6 P. \( A7 C# m  q3 g
  109.       return(PI*.5);
    . l. i$ }9 o3 {% g: T
  110. ! z* c' V) m/ s( I, A& r
  111.    }
      o% X  @9 T; o
  112.   A7 X& d+ p0 ~1 E6 ?
  113.    ang=atan(y/x);: {' T1 g9 a- T( \. f' z% |7 z2 ?  ]
  114. 2 {9 r" n  M/ S! J5 O
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }& S3 d8 c' {6 e. @( e
  116. . K. k: n% X* P3 M. I% ?! b
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }6 A9 j& {0 Q" \

  118. + b7 ~1 b" m) i( Y! h% ~9 [
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }( g' R) U3 u7 x
  120. 0 K, E& ^% R, u
  121.    return(ang);
    6 R7 ]$ L) d6 C& N1 o# l% N
  122. 8 c; O$ t8 D( `3 O7 ]
  123. }
    $ e4 L* u: E: ?! J( q% w% J: m! M

  124. - d! P5 F/ x5 }: N
  125. //#=============================================================
    1 S5 D, n1 e1 ?) J

  126. 6 V8 z0 M& b1 V  Y) I. |  c/ R# R0 q
  127. double CheckConst ( double angle, double constvar  )
    # Y$ Z% t$ q5 w. W1 q& D8 e; U( B5 {
  128. + f8 l8 v& N. |: C8 v
  129. //#=============================================================+ r+ y$ ~2 I% U! G. J" b5 u6 L; r' d

  130. # A4 r" \  e/ J4 }; t& S
  131. {  ~; k* A" T; H2 |
  132. ! ~% e  l4 K1 u" N! j
  133.    while (angle < -constvar) { angle+=constvar ; }
    : N$ K# \4 F/ q) l9 X6 [& ~1 c) k
  134. 3 [' A* a- k  ]& _4 E5 y9 }
  135.    while (angle >= constvar) { angle-=constvar ; }( D( G4 p# q1 u. @9 t$ b1 {
  136. $ f) u! \* Q. B) @% B
  137.    return (angle) ;8 \8 G, ?  Z% ]# ~

  138. 6 ~0 i3 N  K. z, Z. g" H
  139. }. C+ Q/ i# _( ]* G# ?5 s

  140. 0 w9 H; x6 d- K! G* l" ^
  141. //#=============================================================- n4 u. ]9 l2 b: v

  142. ! w0 g. Q5 ~: M+ T4 [7 W
  143. double Check360 ( double angle )
    4 I$ k; Y  e- L- |% k, U; _/ j+ r! p
  144. 9 K& G! S: O* \$ e; b1 d7 }
  145. //#=============================================================- q! S: x& X' B2 m" a; Y
  146. 8 `$ d- p' t8 j, F. x: ^. D5 k
  147. {9 O9 m$ Z8 L: ]' y/ P" @

  148. 5 R8 g9 o7 V( B1 D9 r
  149.    while (angle < -360.) { angle+=360. ; }5 {" p) s& C& ^( I; U6 B4 W
  150. ; y- S, j8 G% I$ b. t! t
  151.    while (angle >= 360.) { angle-=360. ; }# L: g0 S$ m& ^, c/ P' M

  152. " G7 F' ~/ c+ z' i6 w7 }
  153.    return (angle) ;
    2 S- \/ Z" ]$ K: B& M& D

  154. 7 W0 Z" o6 d. b
  155. }1 Y1 c5 K& [0 S8 @/ j& I

  156. # `1 X' c9 j7 F) L5 W
  157. //#=============================================================9 }/ `% y9 h4 _/ u6 x9 Z$ m1 ]
  158. & Y, \4 _* S) k' T, f* Z
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ' B0 L. h& ^' q0 K# Y3 r. c) Q6 ^

  160. 5 j# f- ~0 r: m7 ]& e9 A
  161. //#=============================================================, B% b, V3 C/ m# M+ W5 o$ q2 R% F

  162. & S' q, z8 E3 O2 ^
  163. {
    : f* p+ a4 I9 P
  164. # j5 E% o2 v1 C
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }7 @$ ]3 ]1 s* E8 y6 t, L
  166. 0 W5 Y& l# }* |% b- W3 k
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    + a0 i3 S7 F+ F& R

  168. - m6 I! y0 z6 b, Q* o& P
  169.    return (angle) ;* H) y) N& |9 _) f1 k; J0 \

  170. $ s: R) R7 I+ P* g1 I2 ^' ?0 J
  171. }
复制代码

0 |% S6 y' G  @8 d3 O2 q以下为摇篮5轴计算过程代码8 K3 f! d+ C- N7 u- ^
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);  V/ j8 F/ T# w
  2. 1 [, ~8 C! Y7 y0 a9 B2 P
  3.          j=0.; B1=0.; B0=0.;
    # F$ m: \# S& }/ _! J* F" n
  4. 5 c; r3 Y  _  \  E& G  _, m' A
  5.           if (EQ_is_ge(i,0.)) {' f# p7 `- q6 T8 X4 O5 r$ k- l2 _' K

  6. 6 G2 _% O  N# ~& K
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }" e+ A% D+ I0 s5 S& l
  8. ( o4 ?2 e$ r! E  T6 Z: l5 s: }
  9.           }5 s" I( i* h: e# I

  10. / l. v$ W' e+ s+ r  J
  11.           if (EQ_is_lt(i,0.)) {+ N1 e# y3 F$ W/ v

  12. 6 X% U( e) E' ^# \
  13.              if (EQ_is_lt(k,0.)) {
    6 W- f6 A$ h( a. z3 g/ |8 X

  14. ) ?9 O: `8 V; ^' f: @' {
  15.                 B0=atan(i/k); B1=B0+PI ;1 Q+ h! W+ X2 a+ G$ v# @5 T  X; s
  16. , a- Q/ S# t: e: m" A* v7 b
  17.              } else {" z$ U8 `; M4 j& {" B8 {
  18. 2 k# Y( ?# w- V. }
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }- Y* Q+ b2 B% E; x4 e

  20.   i( j2 E6 j1 }9 \
  21.               B1=2.*PI+B0 ;
    4 I& R1 c8 L" _1 C" y+ R* e8 M

  22. 1 A# j1 l  \: u( L9 X- t
  23.              }
    " \; Q; x" W" ]3 F- _: O* h
  24. 0 o5 }7 E0 m4 j
  25.           }, z; A2 i8 ~) [$ U5 X

  26. ; w8 Z/ s9 V6 f$ t/ t5 b) D
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;9 J! v9 `* f, J- V5 Q" Z

  28. # v& O  P& ^4 z; K$ O/ b7 c
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    % ?/ H' y" z) y; T3 {" q" }
  30. 0 [/ y. R" U8 \3 V, ]; ~
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;1 F1 Q8 s" B) {
  32. 0 D, c" ?+ r; Y+ `0 B3 k
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

4 l8 ~7 {: ?0 m+ z5 h通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。# z0 ]8 M& c! U* U" H0 j& @0 \/ ^6 S
( n0 w8 j# B2 I1 U- K7 k3 \+ ?
640.png $ C# f3 R: ?  U# w; D1 j
测试结果:+ ~7 [* n6 M* {* ~4 Z0 l/ Y
6420.png 5 Z: D& @* E( \( g. b

) v) E" h( r" D3 C反向测试结果 6410.png
2 r- G: ?( d6 \9 @5 y( ^, [

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

307

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-8-4 11:24 , Processed in 0.140681 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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