找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10296|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);( n( i( U1 S, a  o
  2. int  EQ_is_ge (double s, double t);  i$ @8 Q# u6 `9 H
  3. int  EQ_is_gt (double s, double t);7 M$ p- o4 Z# {# i2 E2 @5 [- q
  4. int  EQ_is_le (double s, double t);
    3 t0 }" D0 H! w$ Y9 |2 ]9 h/ D
  5. int  EQ_is_lt (double s, double t);
    1 X1 t# H$ }/ V+ v/ o
  6. int  EQ_is_zero (double s);8 v8 a1 g# j7 g- w3 m7 W
  7. //=============================================================
    ! ^3 n. l- a& h5 a
  8. double ARCTAN1 (double y, double x );
    % p2 l0 P# f/ e% ]$ ~  ^3 c  L& L
  9. //#=============================================================  Z; s6 c; n; |3 U" |' x
  10. double ARCTAN2 (double y, double x );1 u4 r3 X, \$ K, @; d, o6 X7 M
  11. //#=============================================================
    8 C! {* g6 u9 ^2 y
  12. double CheckConst ( double angle, double constvar  );1 b, S/ _$ p" s3 ?& ]4 ]
  13. //#=============================================================
    6 i* m) D9 o4 T# E
  14. double Check360 ( double angle );
    ' ?) h  |& q- d
  15. //#=============================================================
    + H8 N6 ~& T5 r2 l: v( R
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );4 a# j9 L9 F8 h$ T! F* M" |
  17. //#=============================================================
复制代码
7 ]* u' D5 l9 K+ b; T3 @
以下为部分源代码,用于判断,计算角度等1 `: q0 M  D' C+ i% f
  1. int  EQ_is_equal (double s, double t)5 H5 d  A, i1 x& \' Y. c
  2. / R6 p( T  f7 ]6 r4 E8 i) R
  3. {
      m, y% Q0 u) r: Q, s

  4. 5 Y- a6 B, y. D* w' e  A
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    # ?' l5 M8 z1 \# H3 Y

  6. + [5 U/ z! E8 A& P  j+ M
  7. }; Y6 ~" l. I: h" O* i

  8. 7 Y0 ^5 l6 N* ~6 H. E) J! x% V
  9. /***********************************************************************// P  l7 Y; h7 t$ m

  10. 7 [. C+ H0 V% H' X0 E, `3 O
  11. int  EQ_is_ge (double s, double t)' o( k7 y! C8 o! z; x' [( @0 U

  12. ) T/ c7 Z, v' x) b0 q
  13. {
    " T: I  G2 x6 f3 t. \, K
  14. $ z" A; z% x  T  F
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }1 p5 n! P( _: G+ p$ z# L' U
  16. & S* v( z2 K: G' h
  17. }& g9 S5 R3 K1 D+ H$ K# E$ M
  18. * o$ O0 \8 x  ^# R/ p& F- b
  19. /***********************************************************************/1 j$ Q* U( Y- h0 m
  20. 1 h( P5 e& B. }# @+ V
  21. int  EQ_is_gt (double s, double t)
    & b; y1 S8 Q* J9 ^# M

  22. 0 a' A5 a$ p; ]! C$ \. ?* U. K( ]: [
  23. {
    / S7 x1 N# D8 c. F9 \  f
  24. & U$ a( l& b3 ?. l3 ?: O
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }& v' C0 {/ C- _6 j" o- f

  26. # b' g* ^5 C" [
  27. }6 E/ C" Z' g" h0 I5 k
  28. + x) O+ x) Y5 H3 {, L7 B, b8 ?' c* c8 m
  29. /***********************************************************************/
    9 u, S6 U% t" }0 G5 Q. b

  30. % V" {5 E5 ^2 T7 W
  31. int  EQ_is_le (double s, double t)
    / N& S# G! o1 e8 w+ o/ H

  32. , L0 _  \! k( z+ ?: z
  33. {
    / l, Q2 R* [) y4 g8 O' C
  34. 7 m$ U4 c9 d/ S0 M% w: r- }
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }" @7 K$ ^2 o0 R% s! w3 @! d

  36. 0 E& y1 k% |  F# B6 o" d
  37. }
    & y& ]. j6 ~# @5 j" B

  38. ' a6 @7 _0 [+ L$ @+ ?% F* V! o
  39. /***********************************************************************/' s$ i3 m) e; g1 n
  40. . ?: p$ O$ b( e: ~' O
  41. int  EQ_is_lt (double s, double t)
    , h7 k' H" S0 ]/ S7 M
  42. ) Y9 P* L5 A  \2 J, w' ^+ E
  43. {
    1 c7 v3 i+ h; ]2 L

  44. : P" r7 j% m: d9 M
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }/ _( D9 n+ E; K$ Z* j

  46. # X* {% F  K8 i; K, r! z, R2 K
  47. }
    * V/ N" S2 n* S! b- s

  48. & ]6 [( r  _' M# [( }9 A6 Q$ ]
  49. /***********************************************************************/! W- f8 k/ m$ B6 p' b$ U1 a; U( u
  50. + t6 e! o$ j! r/ c, N7 P2 O7 P5 l
  51. int  EQ_is_zero (double s)
    $ h: f# ^8 o1 K0 B8 G. t
  52. ( g% z9 u5 s6 X# d4 b. J
  53. {0 n* {0 @* Y: k* |. e6 U8 t

  54. 5 f$ y( [% k' v4 n3 R3 `
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    1 r6 s- F4 [/ ?. S  k

  56. - [( h' U% k2 _9 L. R
  57. }+ |0 @. x0 k. \: k2 b; {. ]
  58. ) [' h+ k9 X* x5 t8 D# \
  59. //=============================================================
    0 u% d2 ^  h, F1 F; n

  60. 9 ~* n/ `, V, Q4 n
  61. double ARCTAN1 (double y, double x )8 @- ~6 E/ R0 ^9 G% k
  62. " k' x8 V' L* B) D. p
  63. //#=============================================================
    % e" R+ q& B9 `2 H# d0 N' i% w1 N

  64. * Y  @; c* v! b! `+ q0 {
  65. {
      r! c9 m# C/ ]/ W0 z
  66. * l6 f! ^  E( @% l/ T6 K
  67.    double ang;8 K- m, O2 M6 }1 l# _" F# m. ^% b* j; v

  68. ; c0 }0 V% w8 T( o+ {5 F: J
  69.    if (EQ_is_zero(y)) { y=0; }9 `! p2 c8 \, ]( Q9 W6 I
  70. + ~1 K/ `! `4 V( a" Q6 K0 Q
  71.    if (EQ_is_zero(x)) { x=0; }2 N: y, Y, C8 j
  72. 7 ^2 i" K; `6 a+ V1 H
  73.    if (y == 0 && x == 0) { return(0); }
    1 r  F8 d6 _7 v9 w" r: K

  74. ! E4 o" |2 V- Z( J/ A
  75.    ang=atan2(y,x);& G- D9 Y0 A) k( q

  76. + Y! _, O. q6 H2 n
  77.    if (ang < 0 ) {
      b  G6 d/ G/ c! ]* u
  78. # F( C, i. y3 R5 w, I2 `. v" h5 q6 }
  79.       return(ang + PI*2);
    1 u3 u4 y9 g3 Z5 e4 ]$ J5 W) A1 [
  80. $ G8 `3 x& f3 a! E; {& N) @3 O
  81.    }
    8 U$ L3 a4 m- t  P9 ~# l  T9 t! z

  82. $ [) t7 }2 ~' Z  g' x0 t2 a6 p6 b8 T
  83.    return(ang);
    + ^. v$ b, ~. ?# K: v7 E

  84. : o2 j2 m. t, b$ Q$ O# ~
  85. }. \$ h+ g' W# u8 o3 ]  l

  86. 7 r1 ?9 n& L) T7 O: W
  87. //#=============================================================6 Z% d+ u* o# I& p! h! I& t8 u
  88. ( P4 ?; R2 j% y* ^* ~
  89. double ARCTAN2 (double y, double x )6 T5 f& j& b3 G8 A

  90. + t! ?+ Y" r  v# k* D& Z5 ^) ^
  91. //#=============================================================
    8 b5 f9 p6 B9 F( Q
  92. $ q0 O; ]2 i, V" }! R$ k
  93. {
    ) @+ S8 `4 i! a& q) f4 Z

  94. : F% H* q8 X9 P5 ^. h3 p4 ~& k
  95.    double ang;3 h' U/ q1 I1 M: m/ D. Q

  96. 0 R  f# A+ g+ `0 D
  97.    if (EQ_is_zero(y)) {
    1 ]% {& R! I) s3 k
  98. ! `7 j0 O, O. Y. K- `4 p8 K8 b/ S
  99.       if (x < 0.0) { return (PI); }6 {& ?! K" L4 G& I. F8 s/ {  d  o( u

  100. / j1 p! f: L+ u  U9 @
  101.       return (0.0);' Q7 a9 p6 d% {5 A1 F$ C, A

  102. ; L2 E+ t0 v# a9 A; U5 }# ]
  103.    }
    6 q% Q7 E& X( y2 r
  104. 8 c- Q# b/ N5 F
  105.    if (EQ_is_zero(x)) {5 {/ a- _6 b3 F" d

  106. 9 {9 {; _" r7 h& ~! D4 G+ R$ b: i- x% K
  107.       if (y < 0.0) { return(PI*1.5); }
    % j5 A  V7 Y, c( a
  108. / B- K4 g" u' r3 w
  109.       return(PI*.5);# [: e/ F( ?6 j# A9 y- E
  110. " |  ~$ r5 V( n- k2 ?( l/ N; Z6 s
  111.    }% X1 X' B' C* X9 @7 D
  112. 9 E5 L$ b3 y! O. X- H0 Y0 C
  113.    ang=atan(y/x);
    1 c# f* q* E0 M! o! ?# ~, l) q& H  v

  114. / C2 a- e- T& x; [" m: e" r
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ) l0 e; J) m- J0 ~+ i

  116. # x4 y0 T* H( {0 L5 C
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    + J( g2 e. A: S; g: }9 f

  118. : N+ o/ K3 i8 T) e5 F- g
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }/ h1 t; O' v  P4 S: G$ l
  120. 8 h; l4 |9 l' s  U0 V# q& ^
  121.    return(ang);
    % a8 |8 ]! w9 g

  122. * k3 E$ G% M- F0 N
  123. }
    1 {4 W3 f! h; R. ?8 `# Y( K/ [4 p

  124. * H. z, P' J/ A) C1 \$ l! w/ \
  125. //#=============================================================
    ' V  x3 w- _5 X  q. {& v

  126. 1 g2 ~5 F1 {2 C" n$ i3 l4 I8 q
  127. double CheckConst ( double angle, double constvar  )
    / n7 u+ e. k6 d

  128. " W2 z- H4 @* l
  129. //#=============================================================) t2 g  d# ]) Q* s4 N# V

  130. + m8 k5 s( D( I) k" Y
  131. {4 }2 L; V5 R$ _6 X) J; O* k
  132.   R$ n+ j/ @9 \
  133.    while (angle < -constvar) { angle+=constvar ; }% f9 E0 [  X5 a6 h4 Q7 N, ^' g* u/ t
  134. & m8 R0 X* ~/ u
  135.    while (angle >= constvar) { angle-=constvar ; }7 P, N: [, i  G
  136. ! f$ p; ]  a3 t7 a+ u2 D
  137.    return (angle) ;! X+ w* s. f5 H3 c7 {. M2 {

  138. 4 ~; g. p# K9 g% {
  139. }  x6 I5 m1 f! Q8 h; x3 d& c

  140. 1 [/ K# `8 w  ]
  141. //#=============================================================
    * ~( i" K* T) q+ T0 Z. G* Q- ]) d1 {
  142. * a% ^! w5 F5 V' Z" y( k* E0 |* \
  143. double Check360 ( double angle )& I( I/ j# f  L. P& l

  144. * h  @$ @8 a& t. p
  145. //#=============================================================
    0 v$ C; J* U, {. p, T5 C- k

  146. . C) V+ i% y0 L5 A- |# B) r; @' ]& T* _
  147. {$ [/ a8 J# x1 x
  148. 8 ?' q8 Y8 P2 K* v
  149.    while (angle < -360.) { angle+=360. ; }% O" e! i. W1 B* S/ A
  150. $ q* m: U# g, C2 c
  151.    while (angle >= 360.) { angle-=360. ; }
    ) g/ ?/ Q* m! ]% |4 ^

  152. $ K' S' g7 h, C" ^
  153.    return (angle) ;
    ( f" j: c7 `! {+ Z

  154. - w/ }0 A/ ^8 N+ }
  155. }
    0 q% x, j$ v, Y4 {; Z0 e" X2 r
  156. ) R7 E4 k& J, H: K2 _9 x/ d4 X
  157. //#=============================================================
    6 Q4 v! w! _1 ^0 @* U5 i7 A, s, Z( _
  158. * k: ?0 T* N4 P+ K1 Z  [
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )6 M1 S% m* L- n# v/ h" K9 d
  160. ( ^, l3 B  N  ^& Z- c
  161. //#=============================================================7 O- {3 z4 ]6 o6 _0 J% G
  162. 5 l( e9 I8 [# S% Z- h) V$ |- M7 T9 `
  163. {
    9 e. r! a; @% K" }* x6 Z
  164. 3 |# l5 I/ I" P6 [$ y
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    # I1 Y3 q0 `6 n

  166. $ M4 L8 p0 L8 [* n& v! O
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }5 h$ D$ s5 y) |" G9 |/ ^4 U& v$ f

  168. " }% Y2 N/ B1 W! Q% L
  169.    return (angle) ;+ q- _  E, W" G% M4 k# W3 y9 U
  170. 6 E- Q* Q! ^* K, z2 o- _* g9 {
  171. }
复制代码
& b  Z" H" N. d# j, c  }
以下为摇篮5轴计算过程代码
2 }! ^% v* v& N3 c1 K, v
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);8 s: H! x. E8 r- a, @, ]

  2. ( k, A) w2 B, L) M1 u
  3.          j=0.; B1=0.; B0=0.;+ s* g. T+ b9 \. o" A8 f, ?% `
  4. 4 W' Q3 S, S9 s! j8 I( g4 ~7 w
  5.           if (EQ_is_ge(i,0.)) {
    3 I% Z. X# R) }

  6. # h0 A; U8 ?/ r8 B( P3 ^
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }, o% \' b* x: @- @0 e. [4 L

  8. 1 r6 P, a; a/ E6 N. Q# N
  9.           }
    4 `# n! N5 S0 ~# T% y0 [1 o& ?

  10. * l6 ^# a$ d& Q) J( Q& c
  11.           if (EQ_is_lt(i,0.)) {$ E6 E8 T" R# c; w7 h

  12. ( d( Y5 \2 h4 {. u. p4 A1 r; V/ p
  13.              if (EQ_is_lt(k,0.)) {
    & w% b5 m% J& U

  14. ' G* e7 n7 Q. J2 _3 U5 H6 {& }+ ]
  15.                 B0=atan(i/k); B1=B0+PI ;
    9 Y! O/ [, e; N" ?- \3 M

  16.   i3 i. {& L" M' I
  17.              } else {& p. E) T% G$ P  G4 O
  18. / d5 T6 R( U4 @  ^+ m' w0 H
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    * g* v$ \2 U  K! [" d# K

  20. 7 l7 p% }& ]8 B! i% L+ q2 N
  21.               B1=2.*PI+B0 ;
    , q' f- r+ q2 |0 @
  22. & p" n& _& E4 ]6 D6 n9 E9 T' T
  23.              }/ R' Y3 M0 t8 {" v0 ]
  24. - |) n  v% c' a3 i+ h2 {7 y
  25.           }7 ]! b, V' l4 o" o

  26. 6 o7 ?) F! O6 h; |
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    : p8 b! `- k6 d, Z' c! N/ s

  28. / L# h, i' ^1 S0 k4 H
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    5 \0 q$ [- F2 n! a
  30. $ S. Z1 B7 j& h8 x7 N
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;5 x8 g+ Z3 }& F. M3 B2 _
  32. 0 @( }1 P, K, w) C; f
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
% m5 [) G2 e5 R6 _: `
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。3 T& U6 {, Z' r
# \, F) u- X) R
640.png
9 f6 X: R! f. T. g1 M* j测试结果:) U2 A! {' z: B
6420.png : t1 o7 r* ^+ Y9 ^7 ^" l/ `

; Y) a& a8 f5 H反向测试结果 6410.png 9 T$ ~( R7 e! [4 y  E/ ?

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

326

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-8-29 00:39 , Processed in 0.185727 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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