找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8058|回复: 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);
    3 M2 h4 s* s1 x; Y' S" V
  2. int  EQ_is_ge (double s, double t);
    ( e+ H/ W/ n. s2 A! S: p
  3. int  EQ_is_gt (double s, double t);
    ) g- E9 N; d3 o2 b# i) k
  4. int  EQ_is_le (double s, double t);
    & u& Y) K  @0 }& W6 e
  5. int  EQ_is_lt (double s, double t);
    ) g1 h5 T  ]% X: m. E7 ?+ M
  6. int  EQ_is_zero (double s);$ b" T6 h- C3 D; G+ K% @7 Z
  7. //=============================================================
    : B" y7 p! i& ]$ m: b
  8. double ARCTAN1 (double y, double x );
    2 D0 `9 E* U" t* V2 c, u
  9. //#=============================================================
    9 t/ U  m: Q( ?4 V
  10. double ARCTAN2 (double y, double x );
    . L2 V8 L6 |' r+ U0 f
  11. //#=============================================================
      N: r" }; q. h1 w  p: x8 Z
  12. double CheckConst ( double angle, double constvar  );
    / j& t1 f. g& t7 R0 D& D1 s
  13. //#=============================================================1 A6 ^; [! M% d1 {
  14. double Check360 ( double angle );. m0 W8 Q( q: B9 W# e
  15. //#=============================================================* V+ W2 T1 T( \' ~
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );' a. w3 x, r" ^# K, u" }$ X
  17. //#=============================================================
复制代码

$ H& d# q: A5 w* a5 j" p以下为部分源代码,用于判断,计算角度等
& U6 a5 ~% V! Y3 R! |! a+ c1 F
  1. int  EQ_is_equal (double s, double t)/ J1 z; H# ]$ \! H7 P5 g/ c+ A% V

  2.   c# E: \1 u/ E- c
  3. {8 R8 A: R# {) H- F

  4. 7 `8 X2 t  n- p) v# `" J5 ?
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 z8 }/ X4 R, F- R1 N& j& m
  6. ! H# Z# e' Z* m) B
  7. }# D+ {* |3 M" l0 X4 \' H6 L

  8. . C# m/ l0 E' W% C: t2 R
  9. /***********************************************************************/
    . c0 D( e# n9 v0 _. q. d) ^

  10. $ A# T' q" y: ]4 C$ o4 F+ {: O! L
  11. int  EQ_is_ge (double s, double t)1 p2 R% N6 W% X4 @3 }7 L1 t
  12. & T8 s) ?" O; X3 e7 n' T
  13. {
    5 p2 T# S4 E+ i8 w2 b. k/ R

  14. ; k: W0 l+ K2 e# z. O
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    6 N4 {# p7 l# K' t

  16. : S- f6 X$ I5 W. x3 h8 ^5 G. r2 k
  17. }& |: U6 {7 a) J/ a  d9 V; T
  18. ) \7 U2 G" x7 z2 p
  19. /***********************************************************************/
    * |$ v1 }4 w3 ?# v( |" h. ^2 t
  20. 2 `  H& }- O! g0 y) G
  21. int  EQ_is_gt (double s, double t)0 g. ~" \- O2 a# b
  22.   f7 |" ~/ \& }
  23. {
    , Z3 q: m4 ^' R! g) v( A6 ]! k

  24. 4 Z1 W8 V0 {0 I6 c  ~  w- c; n
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    5 L# ~0 p2 C2 q! Q5 K
  26. & C+ Z" M3 ]- x& f+ g6 ^. R0 }+ h
  27. }
    ' _6 s) d2 u- J1 Y& S$ u( W

  28. 8 A, B  N6 h4 k( n# F
  29. /***********************************************************************/
    4 `* o! b2 ]# M8 g
  30. 5 X/ c* L" Z$ B
  31. int  EQ_is_le (double s, double t)2 _4 U) L" m/ @$ T
  32. - _. a$ N, s- s+ h! z
  33. {
    ; q; |1 a9 F0 {, q  w) m
  34. ( A+ B4 I+ m, Q* m
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    4 C; C, I- n9 e

  36. 5 I0 b# y' F% q# V
  37. }7 P/ i" e3 ^/ T3 u) I  |& I

  38. ) X* }9 A* l% K) m8 p0 y, v/ _4 H
  39. /***********************************************************************/
    , G1 O, \# f5 C2 f

  40. / V7 L0 C+ \+ |& `! X! g, u
  41. int  EQ_is_lt (double s, double t)
    ' H# ?$ w/ G* G( I2 z9 d  [5 q

  42. - r$ C3 W  N& l# S0 z& {% O/ z1 [0 w
  43. {
    % L. X! T3 _" L4 U2 t, c) b
  44. 9 C( N( x) F, t  Q! S; y
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    / c7 f+ `, _! Q# T( R

  46. * Z3 H$ M2 p0 H; `# v
  47. }
    2 {8 |3 `+ M  ^' K! \

  48. 9 T; _2 P5 R  r) O! }. a; {
  49. /***********************************************************************/' _7 L3 Y! |; l3 N# H
  50. % ?1 x& b) ~4 y) ^: @" _
  51. int  EQ_is_zero (double s)
    ( E4 g, C8 q" v8 m
  52. 0 |  p% D8 `% j
  53. {( C7 B, m1 _6 N& N
  54. 0 E- t' \5 `! E0 X* d# t" Y
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ! ~8 m! K  n4 q: u, c
  56. ( j& l5 v  ~+ p
  57. }  `* z9 E& W$ c; M1 ]

  58. 0 @. S+ _2 s; L# i8 j5 s' C5 y
  59. //=============================================================
    ! @  a2 p& p9 B4 Y( \. r
  60. . f! t# v$ \7 S7 B& g' x) c
  61. double ARCTAN1 (double y, double x ): K6 G+ s' ^+ W% s

  62. / i; K* K3 m) T: G5 K
  63. //#=============================================================5 n' H( B- b: v) r# @& C& p) z4 N

  64. ) n  ?2 l8 K3 Z7 S$ R( N
  65. {
    ) F9 X' y3 M' J( l' U5 S  {
  66. , |: m! H1 `2 ~3 Q; {( W5 X
  67.    double ang;2 ?/ S1 ^% J  G1 s. E

  68.   G9 d# L2 ~2 K" s$ z
  69.    if (EQ_is_zero(y)) { y=0; }1 T! u) W9 Q' n! |

  70. * S2 z- }4 {6 Q
  71.    if (EQ_is_zero(x)) { x=0; }
    " I* @* U5 Z  r" u9 a( x5 P* P+ P
  72. 3 r- O0 j+ b% R) t
  73.    if (y == 0 && x == 0) { return(0); }' B$ M5 |) B, c! V

  74. . i2 ^" D  V* ^0 e2 T
  75.    ang=atan2(y,x);
    / S5 j2 V+ L9 u4 o- w: v2 H( `

  76. 4 W" R- ^0 ~/ C  p( e  b) V
  77.    if (ang < 0 ) {
    8 X: Q4 g! P4 v8 }) o0 ?
  78. 7 J* _- g" D( s9 Y7 ^; b+ ^
  79.       return(ang + PI*2);* y2 u" b& ^1 c: Q  n, P
  80. 3 `5 ?8 F% V$ C9 }* Z/ O
  81.    }+ c5 C  |( w$ I& W' S
  82. ( s# y9 v. t" z. _* M2 K  {1 }
  83.    return(ang);
    1 Q/ B6 {* ~5 \* k4 ^" G- z

  84. 0 O9 F, ~6 j  \0 h# K4 U* t
  85. }
    * H/ y$ ?2 `- N$ g, Y* h9 A7 d
  86. / ?# l; P5 R' b  o5 `" i! ?0 o
  87. //#=============================================================% z# m. O8 `0 {+ I6 \, ?
  88. : Y3 ~& d, y7 L% I
  89. double ARCTAN2 (double y, double x )8 j# P! [, s+ H# D& w" b3 W
  90. / j- I3 z; I1 F4 Z; W* Q: G
  91. //#=============================================================9 _$ Z" h$ K& o, v3 e
  92. " g9 m$ ]/ g$ R
  93. {
    9 F; N1 w0 Q0 _6 ?8 U9 S$ s

  94. ( b! L3 c  |9 h0 z$ X5 H
  95.    double ang;
    # g6 @1 m8 `; k4 ]& Y/ M5 e$ T

  96. " Q/ O# s. q5 S! R+ u& s
  97.    if (EQ_is_zero(y)) {7 ~) Z: x+ O: r' {% E4 H9 H" d
  98. 1 G" j: s/ z9 g0 x
  99.       if (x < 0.0) { return (PI); }) d; P! A9 ~" l% j* K$ P

  100. ( Y; ?1 d: i6 ^; X; o, j. q3 p. j
  101.       return (0.0);
    - s- R/ S! Z6 v$ ^4 b
  102. 7 J3 E: ^$ d  E; {
  103.    }
    1 F1 o4 {) k/ v- V& r

  104. ; p1 m: u  z6 a' N. n* j
  105.    if (EQ_is_zero(x)) {# \" f+ v. z5 v; N

  106. + w7 K% Q9 u9 z) X
  107.       if (y < 0.0) { return(PI*1.5); }( {' d* f: _- S
  108. $ a" S7 C* b: Y& r0 S+ x$ G
  109.       return(PI*.5);
    % a% k& V9 r  I0 G( T& z% f( {3 a  {) S
  110. 5 ~! e7 D. e% A
  111.    }( b$ D+ j0 {0 @( @9 j. C

  112. . g, N& u* C1 N$ q- d' ?
  113.    ang=atan(y/x);
    ! E/ H3 y. x) [% V0 N

  114. ( P. t9 Q5 z$ M) g; {7 j1 e
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }( ^: O; B" i, X- d

  116. 1 _, ?6 `( }8 l/ ^
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }* V8 y" A1 u8 f& y! \. d4 d
  118.   b2 c" S4 d6 I/ Q% U: e( a
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    3 `: ?+ b  Y9 Q& ^3 W

  120. ) e! D' W9 G7 s# F- o5 E* j8 U
  121.    return(ang);
    6 f4 E8 n5 e! @- x, d/ i) s
  122. 5 X: \, M; T. m+ C. l
  123. }$ @8 l0 ^% V/ Y6 o
  124. 9 ~* X: S% f4 k* w, d9 {
  125. //#=============================================================
    9 a0 e0 T. M9 `/ N* W& J: G

  126. ' _+ l' _5 r  G4 j' l9 {
  127. double CheckConst ( double angle, double constvar  )# A6 l. N: n: x7 q- U: }

  128. * q( a5 n9 Y' k! z$ L
  129. //#=============================================================3 q1 p3 H- ~3 i9 }% p/ v0 G6 `

  130. 9 S' X3 u2 z; l* p0 E
  131. {4 }9 i! W4 ^9 Y) _

  132. + s/ _2 |% m# T7 e2 X" g1 z& N# V
  133.    while (angle < -constvar) { angle+=constvar ; }& }8 K) @2 G  y1 H, U: v4 @: ~
  134. " A% q7 ?) ^/ ?2 I/ b$ O% l5 k
  135.    while (angle >= constvar) { angle-=constvar ; }6 M2 q9 _# q8 a

  136.   j& F& r3 q6 x: W8 u6 ^* @+ W
  137.    return (angle) ;& Z3 p$ B4 [+ z+ \! j( m

  138. ; q5 z. b% s9 o/ o$ [# }
  139. }
    * m6 }1 r- k6 W9 W! A
  140. ; k9 s4 E- ^3 v  u$ x
  141. //#=============================================================
    ' _+ X2 P& N4 y# d7 m

  142.   N, ~% z0 O8 r2 T) N7 X4 }1 k* V
  143. double Check360 ( double angle )* H6 _) V3 B$ J0 W1 I. [. e8 a. l
  144. % s" @: F0 w: u+ Z" [" Q- @
  145. //#=============================================================  c9 ?9 i; I3 I- g

  146. 7 ^- y% x' n8 Q  ]% |' ^
  147. {5 ^! J/ a& p8 s

  148. & k: y* V* @9 w6 A7 @, T9 _
  149.    while (angle < -360.) { angle+=360. ; }
    & ?- i7 Y- l; W4 h+ E
  150. 8 }' e: I. t; S
  151.    while (angle >= 360.) { angle-=360. ; }
    ) s4 `1 X, D4 d! O. u/ U5 N# [9 `
  152. * p# ~2 u# W: b/ d7 p
  153.    return (angle) ;
      V5 e2 D8 n- E- G0 h

  154. 5 Z& F) O) o' G  g4 i) E" c$ [
  155. }& N/ Q! [* I, a, }7 e0 c: ^

  156. 3 |( x: u4 k: Z5 c9 Q( `2 j
  157. //#=============================================================
    + a& b2 R) @6 Z" G% N/ @( X
  158. 2 w. S# E1 v9 y5 Y( n
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )# ?; @/ n# C9 }$ u

  160. - W. s" r- R: X- _" u
  161. //#=============================================================
    9 v$ I/ f5 A7 f; r3 q

  162. 9 a1 M# u2 ?* f; _
  163. {
    1 S. A  C! N2 V1 m" k

  164. 8 I9 n- ?" Q9 R2 _- S3 f& S, u
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    9 [4 C& S9 O- m+ I
  166. ; f  W: l$ G; {6 \1 y. r# F7 n; T
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }) L* }+ G2 m2 d2 J

  168. + i, g% E. c( O. t  j
  169.    return (angle) ;( W; R/ _, E) E: F& d

  170. $ b& j+ F+ `# [# I# O& a
  171. }
复制代码

! e" @0 U( x2 y" Z以下为摇篮5轴计算过程代码% [# y, D1 R) m- u- W& F0 L$ V
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);$ K* N" Y6 I" \$ b

  2. 6 w- r; Q+ J8 f: b% Y
  3.          j=0.; B1=0.; B0=0.;
    ' z) A3 u" h( ?
  4. * k% b9 a( P8 v* d
  5.           if (EQ_is_ge(i,0.)) {
    8 a" J2 _5 \6 |( U! k: ?7 i
  6. 6 z2 ~) D, U/ A; f! D$ ]
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    , D7 X# e! l, R! @
  8. . _* G) s. V: m/ f" P( |$ j
  9.           }5 _/ r  l" S% g( u# a- w
  10. ) R$ q. O8 m7 c
  11.           if (EQ_is_lt(i,0.)) {
    " s  C2 `2 U  q( Q( ]% V

  12. . R  {1 F( |- R% o4 d. |& j
  13.              if (EQ_is_lt(k,0.)) {9 g+ X* P, u9 p4 H
  14. 1 b- o' G( ^7 i4 F6 ?" U6 ]
  15.                 B0=atan(i/k); B1=B0+PI ;( x% h' v: e! V7 A
  16. 9 l6 e( g, S: a0 Q
  17.              } else {
    ' k8 z  F8 q& T
  18. - a' o# P) y# W0 v9 ]7 r1 x; ^  a
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }- y. V% U7 @' r& D/ z5 `# Z
  20. " N1 u, n! ]7 z( H& k0 K" S
  21.               B1=2.*PI+B0 ;
    8 J6 F) c/ k' J; J* H

  22. 5 R) G; W! j. i7 I% j) X" r! B
  23.              }
    + l3 i; C4 k' g/ C; G7 r
  24. * b" @& \- `1 K3 z1 O4 b
  25.           }
    * H5 e: Q8 u1 w3 d+ R

  26.   M: ^) E4 R# R
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    / r5 Z$ b* A! P. b; X( Q
  28. : k* X0 i, k0 k
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));9 J0 K1 Q9 ~$ i  |9 U: m( w

  30. - Q+ ]5 A" Y- r6 o
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;9 p9 T& d( _* j
  32. % ]: t1 A! ?4 B/ p
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
: O+ z  `. e! m0 ~
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。  L. Z3 o/ o% d2 x' Z  U6 {
+ v  O  \7 n( m7 t
640.png
  d: y/ `0 |. i' I) Z: t! j- B) K8 C测试结果:
: k4 x( N! P& b5 j' _% M8 d2 w 6420.png ' u$ x$ m4 n% X7 U

& B# p9 S' v% w; r9 q# \' w$ x* `反向测试结果 6410.png
0 F& L0 s" m$ i" V* t- q. n

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

272

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-23 02:25 , Processed in 0.505956 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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