找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7400|回复: 3

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

[复制链接]

433

主题

5757

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);8 j/ I. b, L) i: C0 f
  2. int  EQ_is_ge (double s, double t);
    , z" T3 N8 s7 @5 W- j' j$ o* O, |
  3. int  EQ_is_gt (double s, double t);; V7 j6 i; X4 \9 C7 `9 X9 \
  4. int  EQ_is_le (double s, double t);
    . I0 J- p1 f# ~) \
  5. int  EQ_is_lt (double s, double t);! M" g1 |& _/ D* n
  6. int  EQ_is_zero (double s);9 T  ~- v. K' U3 H- ?4 x; a. m7 g
  7. //=============================================================5 N& g1 E4 z% x/ Y; y+ S
  8. double ARCTAN1 (double y, double x );
      \+ n# c( k4 |: v$ M
  9. //#=============================================================) B. V; z' u9 R9 D. C5 M
  10. double ARCTAN2 (double y, double x );* _0 T5 l3 A0 p. ], a
  11. //#=============================================================" }$ p& |9 }, u. p6 w. `% @  c
  12. double CheckConst ( double angle, double constvar  );5 i" l; R6 n7 P9 y6 e/ m* B3 P2 f
  13. //#=============================================================
    ! n1 P9 B: G( Y! L3 ]" H! q
  14. double Check360 ( double angle );
    2 P2 ]- T. @. }2 u6 U# X
  15. //#=============================================================
    ! @) i; E8 q$ Z" u( y5 S8 I
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );% L" v0 L, J( b+ P# |; s, [
  17. //#=============================================================
复制代码
# |' W9 l6 b; J+ O# ?9 W
以下为部分源代码,用于判断,计算角度等7 ~1 H1 j0 N8 `$ X
  1. int  EQ_is_equal (double s, double t)- V2 i3 c0 T3 ^0 t# f; T
  2. $ c" Y6 B# b* L9 \4 h# }% G
  3. {
    6 [2 d4 D3 E% `: ]
  4. " \( W( a- M0 u  J! @: e* g
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }( i( \) g$ b& _8 U: g, t+ g

  6. * C0 X! ]4 o  D* P- \( }$ Y
  7. }5 J- W) Z" e, ?5 Q8 e

  8. 8 {$ a; r& @" C! i/ p$ u
  9. /***********************************************************************/! m; r4 ^9 G$ h( Y

  10. ! W; b6 u" b# g  G+ [5 B
  11. int  EQ_is_ge (double s, double t)
    - @8 b/ w& {; C, g" ^

  12. # j% }8 g" l% [0 s
  13. {
    5 I( K: W# _9 h) o' @

  14. # b5 \. s3 S5 W
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }: S3 k5 a8 O% h8 R+ v

  16. ; i4 X" m, `6 p% R; r4 D
  17. }% [3 |6 |) Y- H4 ]+ o
  18. . H9 O) W9 M- R. c
  19. /***********************************************************************/: Q7 Y+ q1 t! j& c

  20. 4 Z2 Z! t" @" |/ g$ Y
  21. int  EQ_is_gt (double s, double t)
    ! {0 i2 y( k; b& A. M
  22. 5 n( I6 w4 M. J) d9 f7 ]
  23. {* ]  ~4 _9 z+ }4 l* u# [

  24. 5 m. E3 L( X' o1 D" q
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }2 e' q6 R  L3 i1 P7 e

  26. - ~% _2 p$ `& Q6 J
  27. }
    3 x1 p& z, S) G9 }" u8 n1 N# J0 k3 u

  28. ! z& H1 Z7 F( ~9 F
  29. /***********************************************************************/
    4 n5 u3 T! q' ], q- z4 `
  30. " F# k6 k! X- G; w. o
  31. int  EQ_is_le (double s, double t)
    % l, \& F, X4 j6 }( \0 K
  32. % _  D# H' P, e/ Z) y3 I% ]
  33. {5 ~9 S3 }! {- ~$ G) b
  34. , P% ?: x" I* L/ Z; R
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    % ~& g$ q: R4 q& W" _! x

  36. $ ^, T3 R' Y: `2 z
  37. }
    ! _5 T1 W7 |6 N2 Z5 Y
  38. & S7 j0 R' L% l& W
  39. /***********************************************************************/
      M9 d! B, X( }: j* a
  40. 6 ?% p! K  H* r# P: }5 |9 z
  41. int  EQ_is_lt (double s, double t)
    ! \% @+ b5 G/ X! D7 n; Q
  42. ( [5 A# U5 p* f# ]& o5 y  g5 _/ T
  43. {
    8 D4 H, E- {9 j  X* w1 _2 U
  44. + y- w  l7 M$ I' m/ W+ o& w
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    7 H. [+ a0 s' {+ J

  46. ) ~# n/ Z& Q+ r, P
  47. }
    0 K  U) s7 r. r9 _8 A+ [
  48. 6 T# g& ~% I/ c1 V, N9 d
  49. /***********************************************************************/
    6 x% h/ G9 B+ v! E* s/ ^. G
  50. - A( `8 G$ }2 D3 `+ L' e
  51. int  EQ_is_zero (double s): z  h6 P6 e( V! j! q$ m/ d; m

  52. & g6 t6 h. X9 o9 o7 d; }
  53. {
    " z/ [! |0 _) h6 _4 o

  54. $ r& A, g1 k+ Q0 X
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }/ Z& ^$ e3 i! U7 v$ s! A

  56. 4 D5 E3 m9 j$ M8 h
  57. }$ k; I& ]+ S9 x) D) U% k

  58. * u1 k; i0 s+ h* ?" K
  59. //=============================================================0 W% h7 [% X' i. v- R* ^1 z4 i- ^
  60. ) [; G; V4 T$ P' c
  61. double ARCTAN1 (double y, double x )) u) ^% C6 t' w: [

  62. / t& M0 ]; ?/ w% \# `6 i6 _) @
  63. //#=============================================================
    + A! i+ e) C+ Y0 O8 t* v% w( R
  64. ; L, C3 N" r: a: z& x+ [0 s
  65. {
    % K2 _& U: r1 v
  66.   Q* W8 g% \+ L
  67.    double ang;6 R! I) x" I# L2 _2 m
  68. 4 i9 S6 t1 |- _( a
  69.    if (EQ_is_zero(y)) { y=0; }4 B# Y6 Q! {/ b4 D  |) ]! L

  70. 5 r/ a1 }! |* O: x/ S4 ~
  71.    if (EQ_is_zero(x)) { x=0; }
    " J) c! N. r/ Q3 _0 U6 u/ L

  72. 3 p- V- v0 H9 H4 A
  73.    if (y == 0 && x == 0) { return(0); }
      S% K+ B) Z( b& B

  74. ! R' S3 O8 N( J7 N3 Y
  75.    ang=atan2(y,x);
    4 u! Y# K2 a9 t9 z4 L/ t4 x

  76. / c; h; e( m# B8 y6 f/ J! g
  77.    if (ang < 0 ) {
    : S0 K. x1 t( d; |" i

  78. " B3 j  A( c+ w& i0 ?
  79.       return(ang + PI*2);& Z+ q1 i: |, n) C* n2 x0 u

  80. 3 `/ |# ~1 n: y  z
  81.    }
    0 Z+ |6 {, z/ G) Z$ X3 |/ b

  82.   ~5 G5 o- ~( t1 n' B
  83.    return(ang);% |$ _4 |" E# Q* H
  84. ( u: M0 W, i$ I# E: F, E
  85. }
    ( e) B  Q  p& W. _; y

  86. , x# L/ b8 v# c: E8 H# T
  87. //#=============================================================0 |, M7 l5 W6 ?8 o
  88. " C' P$ N! v% ^* \6 \% \% B. J
  89. double ARCTAN2 (double y, double x ): \  M, E- A8 j( C$ K* S' R
  90. " C* v2 l: x4 Z3 O0 z
  91. //#=============================================================
    * Z# d) v9 a1 ?6 B; K

  92. / n) o; N3 @$ M) q; n
  93. {
    6 j( i" E0 q8 d  `. ?2 T9 {

  94. 4 t5 V; t+ a. k
  95.    double ang;
    ( A; |: I: z" s9 X

  96. 4 i8 F* h5 x& w2 G1 |- _
  97.    if (EQ_is_zero(y)) {% n, O; k8 g* }  H: I1 P% o. `

  98. 9 [. e# y9 [9 l
  99.       if (x < 0.0) { return (PI); }  }1 j' Q0 ^2 P

  100. 0 v. ^. G0 e' u& Q0 i
  101.       return (0.0);$ N! g2 T3 I$ D; h
  102. # O, m6 l, F  k2 v8 Y- z
  103.    }
    ) j1 \4 }, V) ?# M  c3 W& Q$ ]

  104. ( H1 L0 N' {& o+ B- D
  105.    if (EQ_is_zero(x)) {
    * h0 @, m& S: ?2 `

  106. ) q  i  \* U* |
  107.       if (y < 0.0) { return(PI*1.5); }! H4 E( C# R% }

  108.   }, i  {0 S' j, N# P6 d
  109.       return(PI*.5);
    # t' s& w( n, W
  110. " M, g7 `; Y$ S1 c1 ^
  111.    }
    " ^/ g1 V' ^2 L9 R  @
  112. ) p" S: r3 L4 V, C4 q4 _2 a1 @* K
  113.    ang=atan(y/x);
    ' F. u! a0 W0 f( Z: T0 b6 H

  114. 4 i0 H+ s! x/ x! b6 \
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }8 p3 T& X# O  o; C
  116. ) S$ N% @% {' i" D
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    7 U  {% A* A/ W) I, [

  118. 1 I' [: l: L( g: s+ z
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }) E5 H5 ^8 s$ t# s9 Q0 I: R
  120. 8 M" M5 A( @# a3 f$ y
  121.    return(ang);! J$ B$ C. ^  {4 C3 j, H% x

  122. * Y) y: C( e# {4 a
  123. }5 O  e4 {3 @, Z: |

  124. 6 d, ]7 U  `# K: A6 |. y' D. I1 d
  125. //#=============================================================2 b; G. W) g' C/ W% y5 V. H8 }; C1 W

  126. $ n. F! K6 o: e8 L( b
  127. double CheckConst ( double angle, double constvar  )
    " @1 m# e9 F* `( T1 R
  128. . ~7 l' @8 W! P! T0 }
  129. //#=============================================================7 x! M; O$ A% }( j/ `

  130. , L* N1 g( g  u( J7 z1 r) ^! g5 {
  131. {
    - O2 r& {+ h% ^' g& k+ _1 T

  132.   I6 V7 x/ I3 {
  133.    while (angle < -constvar) { angle+=constvar ; }7 W. V, E0 V5 u; F1 O

  134. ) s7 m* y1 i$ O* a; J6 C1 Z) }0 ^
  135.    while (angle >= constvar) { angle-=constvar ; }
    : f4 S" Y3 [' Z2 {: e4 J

  136. 3 @# Y$ w3 o1 ]: O: F8 }8 b. Y& \6 c
  137.    return (angle) ;
    # ^  C6 q+ V& A/ ], @' s  d# u* L
  138. ( T0 z2 B) K, `& i+ h9 ^
  139. }
    $ p+ F- y+ L: @7 G+ f# Y# d/ m

  140. ; b9 n* i. u* V8 L0 y
  141. //#=============================================================
    ; y! w  z, O3 e8 T

  142. 4 v5 B- \. }. ?
  143. double Check360 ( double angle )
    ' B( M0 N% ^3 Q8 c0 I: ]; R4 B
  144. 1 M6 C2 Q( A2 w
  145. //#=============================================================
    6 r  `8 w7 |0 g+ V, s8 W% h7 ~
  146. , M+ P/ w7 _2 q( l: n2 ~
  147. {
    % p6 o- W% a# d  |
  148. 8 o) a) K$ c0 s4 f. `
  149.    while (angle < -360.) { angle+=360. ; }
    0 t, F- [, E9 u: P

  150. " V0 H5 j' U& R
  151.    while (angle >= 360.) { angle-=360. ; }
    " G+ M0 S8 R* i8 [# w

  152. # n" t0 J( C  W7 C' K$ Z  U# \
  153.    return (angle) ;
    # U3 S6 X5 e9 ^
  154. 7 U$ ?0 q4 e$ ]$ p
  155. }& S2 J/ S3 u  a! m7 X

  156. ; `8 Z7 Z1 o! e5 ]+ R
  157. //#=============================================================
    ! [) e% [; {2 i) _
  158. 7 P/ o% y' K+ G$ V# N, }
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )0 m/ C" c: B% H. O- P. J3 h
  160. & [2 u, _$ d; M' r
  161. //#=============================================================
      N1 i, H; |/ U4 _* }, ^- r  s

  162. ( N/ F1 j& n) |" H
  163. {( U6 C& t' G9 v1 M5 ]

  164. 7 ]& U0 Z0 K' {, o2 `
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    9 U( S' ]8 u2 h, X" y& K
  166. ( O' N4 [, `  d
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    # o$ h1 ~# W  d2 b% D5 \

  168. ! e/ A3 g8 n2 C; c& r& E
  169.    return (angle) ;7 y+ n* g; g! g* v

  170. ; X# s9 L2 [2 |' A
  171. }
复制代码
# S) W1 [5 r* |9 L  j, M) K# U- T: J
以下为摇篮5轴计算过程代码6 o3 \# r7 ~% ?4 Z3 j
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    6 j+ l" k  z* N+ B9 i" J
  2. & b  s3 o, p1 q
  3.          j=0.; B1=0.; B0=0.;
    ) C% t( E) S, k

  4.   P- V: T; e3 p5 F8 Z7 ?
  5.           if (EQ_is_ge(i,0.)) {0 |- M6 R$ \, l" X3 T, A

  6. ) H' V! `- b& f( T( y0 w
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }7 q/ V4 ], @4 @( _' ~/ X$ k* l
  8. ! A/ A- K) A. @
  9.           }
    1 U, }5 |5 o' U, ^; g
  10. % Y5 B/ H$ F1 K" V" [
  11.           if (EQ_is_lt(i,0.)) {- v9 C% B/ s6 T0 i) v

  12. # f1 \- e3 Q+ {; U! T  ]2 ]
  13.              if (EQ_is_lt(k,0.)) {) Y+ l! E: `" A2 B0 [- p

  14. : H9 |) G: D' ]. H7 P
  15.                 B0=atan(i/k); B1=B0+PI ;
    , \+ h6 J+ @# R3 H( a
  16. 3 \* c( p) V" p' C3 M9 `  W
  17.              } else {
    , y8 l" _1 B. z  z' x$ P

  18. ( I; q2 s0 V0 f  J6 w
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    1 }: m6 T9 D  ~- p/ j

  20. ! _  c3 q* ]  v# Y1 m
  21.               B1=2.*PI+B0 ;& g7 o) p0 f. A- {
  22. : }  x8 p9 x/ N1 H/ t( t
  23.              }
    5 r' c9 C! v. M+ I! I5 X# g

  24. : f. h9 j7 A8 A+ s0 L' L
  25.           }% V; J" m2 G$ L9 G6 v; e* q

  26. . A* l8 Q, Q9 m0 X+ W
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ! I4 [7 v0 ]/ a9 k  U
  28. / ?9 X5 N5 @: ^& p
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ' x* c% s# C  n$ \, s
  30. " y: M4 q9 S! F% y% k8 J. {/ S" P
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    % Y6 V' U# k5 i
  32. ! W  ^3 q: X; ^3 z7 c
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
1 [9 Q' i" m& J: j- H  }1 h
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。4 ]7 q* K7 g2 b

+ y( m: ~% w% Z! [$ s( ?" s 640.png + v- m+ w/ f5 c9 c5 d$ P
测试结果:# P; p+ a, U5 \$ U1 }( z
6420.png $ t0 h. v& p( `- `! n4 B% X
' N2 X7 G" `' o8 A# L
反向测试结果 6410.png ( C" {: L5 L1 T" f+ Z$ X5 h

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

231

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-4-27 03:05 , Processed in 0.655251 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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