找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7976|回复: 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);. R5 K/ E* F8 @) }( h
  2. int  EQ_is_ge (double s, double t);9 Q) X& ^1 I4 s8 F" ~
  3. int  EQ_is_gt (double s, double t);
    + L' Y: ^8 |, G
  4. int  EQ_is_le (double s, double t);3 ~! U& |) X6 o
  5. int  EQ_is_lt (double s, double t);  f! z, Y. @7 Z& M5 w9 Q
  6. int  EQ_is_zero (double s);- H' V! j- T* M% W9 t: X) h5 g
  7. //=============================================================
    ! g0 \6 p+ B; o
  8. double ARCTAN1 (double y, double x );7 W, [% G- }  X. \! ?
  9. //#=============================================================
    ' k7 R6 J' g5 V
  10. double ARCTAN2 (double y, double x );( T! k; a5 e$ H3 w6 Z0 w( e1 j% M
  11. //#=============================================================/ z( g7 R4 Q# F, D7 \1 \- w
  12. double CheckConst ( double angle, double constvar  );
    5 v: g; t9 d: ~" N( i- s; @
  13. //#=============================================================
    ; @5 F4 F2 }2 W$ l, Y: \* R
  14. double Check360 ( double angle );
    - r2 O* |; Y& m9 O  V. g
  15. //#=============================================================
    0 I# f+ y$ r- D' v. I
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    4 N+ J. ^) i+ ], \, I
  17. //#=============================================================
复制代码
/ q# n) W! ?! j% {) e  X1 \; G4 Z
以下为部分源代码,用于判断,计算角度等
" ?: x8 |7 m6 Q. K4 h& Y/ t
  1. int  EQ_is_equal (double s, double t)4 ^, Q" L& U. Y! ?+ {: W9 J5 e' V
  2. ' }; v- h$ F8 p
  3. {( U" ^" A# ?$ s

  4. " O) ^# Q" S0 C) Z
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }# e6 w, M9 z9 e9 N
  6. * g" f! k" H7 p3 z
  7. }- [8 O. }- K) u$ A' p& q* j0 Y! h

  8. : Z6 s) r2 ~3 Q
  9. /***********************************************************************/) ^. z& d+ I  s- `. \
  10. / [5 p: Q# ^/ G
  11. int  EQ_is_ge (double s, double t)6 A8 T$ t; u6 |& d, Q$ o; {
  12. 8 Z5 T8 i/ {8 J- B2 s5 B
  13. {( x9 v) K1 Z* t1 Q+ ~' ?4 w
  14. 3 u. V1 ]" W4 T7 ^
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }( e' @' f9 A5 `, [$ C: a( v

  16. 0 ?1 W8 t3 }4 n( L) W( J+ h3 `
  17. }6 u7 ]4 Q- U* H: q( ^% K" d
  18.   d  Q6 Y0 a' P
  19. /***********************************************************************/
    # J6 u, ^# @  d0 a; g

  20. $ ^8 h) Y: N! @# b9 I
  21. int  EQ_is_gt (double s, double t)
    8 H& G) x3 T3 F( ?; M

  22. 2 o& d( o$ M& f
  23. {4 i$ t5 T) X* i" J* `; P2 b+ g3 \

  24. ' h6 g) {1 U; D: _: W& @( _
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }9 c6 k& B3 J5 g% m4 H1 X( B
  26. , ^" \( o6 ~& B* F- @+ `4 b. }) E
  27. }6 j, x% v, Q" v# a. d
  28. % [) e+ }* N0 n# Z# T6 F
  29. /***********************************************************************/
    - r+ T1 t1 Z- x5 O- a0 j& T

  30. ' {/ j, ]/ J) t9 G5 C1 g
  31. int  EQ_is_le (double s, double t)
    4 R9 W  n& Q5 _8 r

  32. - u8 ^) R$ G' M( V& X
  33. {7 u, y) e6 v% p% A' \- d
  34.   _+ _" f5 |+ i% \8 N) P
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    : |& K' K1 g4 x# E
  36. $ e0 Y/ F* Q. ~, o% Q
  37. }  ^' N' i; h* T" [

  38. ) d& f' A; y; P$ Y
  39. /***********************************************************************/$ l' _6 @" Z  M2 x
  40. # _/ L2 J& S& W2 w7 w9 [' B5 n3 o
  41. int  EQ_is_lt (double s, double t)& z- d4 i3 S3 F
  42. 6 b5 |8 k  c( `6 }4 k' I
  43. {
    ; T$ X* l7 z7 n+ v

  44. # c/ N! E& y0 ?) [3 v
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }8 U' Q7 F# b! G* L; t0 q

  46. 8 Q  y# z( A: ]( E( ^
  47. }
    " b: p7 ?) q( w+ l+ h8 r
  48. 9 d7 W$ ?; M* N1 A3 m* `
  49. /***********************************************************************/6 i1 E5 s) L7 @

  50. 2 a% q& p( P, O- r
  51. int  EQ_is_zero (double s)
    : @( U- U; x1 T& w0 ^5 s
  52. * z% ^  u6 V. }# f& P% [2 f
  53. {
    2 @# W$ D# A, W7 p

  54. 7 T) M. G' Q5 z) o# r
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }7 ?$ B1 R/ O! A1 _/ N5 X

  56. * v+ E0 q" j! _2 z
  57. }
    3 C7 ~/ V* a0 }" I% y7 I
  58. 7 H; k( u: g# F9 p4 O
  59. //=============================================================2 k9 ^9 |; R; D3 m' Z

  60. 5 V. P! n7 ~/ J$ o
  61. double ARCTAN1 (double y, double x )
    5 T  }- `3 Z0 E' T
  62. % x% d  Z; L1 y$ ^& E* g
  63. //#=============================================================
    % i9 |  x' }0 G& ?

  64. " L3 H. p+ E6 _
  65. {4 u; h' |7 v' q) K& T
  66. 0 `# I* ?9 h3 _+ D
  67.    double ang;
    9 m! ^* R3 l  x2 i6 ^! n
  68. - K& m% V) I1 C2 Z7 f
  69.    if (EQ_is_zero(y)) { y=0; }0 X0 [( }8 C; l, N% p& Q
  70. - P/ O5 W# O) N) M+ O& v8 C$ ?
  71.    if (EQ_is_zero(x)) { x=0; }
    # T4 d/ H3 N% h5 Y1 `4 ^
  72. : |. h) f$ I' G5 B7 g% t
  73.    if (y == 0 && x == 0) { return(0); }+ k- R- \, |6 A' k, l5 ^# \& {
  74. 5 D7 N/ H' c% z  _3 F
  75.    ang=atan2(y,x);
    0 R. P9 H) V& ?6 @9 v

  76. * U% F4 C( |" a' y4 w
  77.    if (ang < 0 ) {* U& J2 o. s0 ^  @* F

  78. ! ~$ \8 ^- y; N. E
  79.       return(ang + PI*2);
    ; C; I. P6 q8 ?$ L# J
  80. . z9 g! Z. ^* X
  81.    }9 Y  x6 H) b2 t% e

  82. , U" P% U7 g" z& D
  83.    return(ang);7 G% i& Z  l' V6 C5 j
  84. . e# @. F9 }) X2 k1 s9 K7 H
  85. }, ~! |) r# M! v6 q, R2 C, X

  86. ! T" W# q' t1 w3 D# g
  87. //#=============================================================1 C( t: {7 }7 K5 j5 S9 I

  88. " n; [; C6 |' k2 C9 U* n" s, Q
  89. double ARCTAN2 (double y, double x )
    : }4 A0 R* S, S- z, ]

  90. 1 b# @7 A! Z# `- h- U
  91. //#=============================================================
    0 O7 V! Z% j9 }% v5 i* ?! g

  92. " n" |3 B! @  L" A% ^
  93. {
    ( {# ~( Q" L0 e  m- d# `* L

  94. 4 z5 R8 H0 s: n- _: V- z
  95.    double ang;
    # S( Q$ C. a' A# w) B) R& n
  96. % q1 t- M( b6 r
  97.    if (EQ_is_zero(y)) {
    $ C8 C: Q2 [8 U) k( {/ ^" y! I1 h
  98. 5 ^" a6 Y6 F! x9 g
  99.       if (x < 0.0) { return (PI); }
    8 E# ]4 ]; L/ H- ]( S3 \
  100. " h6 u# ~# ~. R5 w, r" Q( f6 Z6 c  h
  101.       return (0.0);
    # R5 k) y9 o2 q6 ]' {
  102. $ A9 v# l* f; U9 g" E) j1 |; w  }
  103.    }" C1 h8 D: c  |+ f1 M, O; D& T( d
  104. 9 j! Q& I( w$ B# o
  105.    if (EQ_is_zero(x)) {5 D" Y, D& q2 V. I

  106. / c* [) `0 k: u2 ~' ]* o( r
  107.       if (y < 0.0) { return(PI*1.5); }! W6 |& `* c6 q0 Y
  108. . m. `# `% G* H/ d7 p
  109.       return(PI*.5);
    / L- W9 ^" q3 G  F
  110. 3 [/ h/ t' F2 p' t) l9 ?
  111.    }
    ( F; M2 ]$ }8 ?. G9 R  ?

  112. 0 n# q9 h( I# a: d# T/ z
  113.    ang=atan(y/x);
    ! a: D% O2 C9 L8 v

  114. ( f; i4 D5 U# x
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }# t0 J& p/ u, W3 k. R! {) ?

  116. ; Y5 u8 M8 i1 ]  ]
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }3 f" p3 i0 t7 W; v

  118. : W! P3 g, L& t. L; o  K: V
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    - ~' f7 y$ S9 W0 R5 |# D" P

  120. - U' b2 g- |& N/ X. i
  121.    return(ang);
    ' r: [) k$ P/ z0 B
  122. % W+ e! k3 @4 h/ }- N& B! {4 m8 P
  123. }  Q" d+ a8 E' y* Y5 T6 K; Z
  124.   V# r4 K0 w7 O( g/ d
  125. //#=============================================================7 d, N" o0 c5 r- h0 l( j+ l: h" f
  126. 6 ~1 D7 H8 `& C# _9 \
  127. double CheckConst ( double angle, double constvar  )7 w& |# r* g7 }, d3 ?) u: M

  128. ; ]8 S0 |3 O, ~0 b% P+ j
  129. //#=============================================================
    2 S0 c2 T/ x+ @+ X
  130.   J4 A& K- [2 s) J
  131. {
    ) K! O( S) f5 f) a& T0 S
  132. % y8 L7 n) Z2 B  T4 T; _
  133.    while (angle < -constvar) { angle+=constvar ; }
    # m. g- v9 `5 r5 @
  134. 3 D# F/ J- |9 K4 L& P; j
  135.    while (angle >= constvar) { angle-=constvar ; }
    ' [6 i4 b$ r6 z' m
  136. : a' ^* V* g6 K3 @9 x
  137.    return (angle) ;% f% Z) e9 V7 v+ W0 f$ }4 \: E

  138. ( H4 e0 ~- j$ Q3 @; f& `
  139. }# l' k% t/ t& L- c
  140. " t6 F) D/ l9 C1 k* b3 j% [6 k
  141. //#=============================================================) N6 g! G, [3 m$ {
  142. - {7 M$ u5 b& H: h# \
  143. double Check360 ( double angle )! d" b, g0 O- Z3 B

  144. / v" F% Z+ }% |9 p$ m/ {$ L
  145. //#=============================================================
    , \9 N# r: G/ P2 _: ]' x9 p: x
  146. 1 J. R; Q/ K( p8 Q8 G
  147. {
    : @$ m  m+ l- L- e- f3 m. ]
  148. ( G1 S6 I8 ~6 W, R. [* k
  149.    while (angle < -360.) { angle+=360. ; }
    ( l  i0 u; r% ?8 v) i

  150. * f: M! G- }. x0 {* Y! n: D
  151.    while (angle >= 360.) { angle-=360. ; }
    4 e/ }3 R5 i9 D" z) P
  152. " @$ d2 P& y, r3 ^3 S  R4 ~
  153.    return (angle) ;$ ]$ D( t) D5 U& l8 U% W1 C
  154. ( r# K7 \; o% O5 X
  155. }
    6 E0 r1 L$ a% f

  156. 9 a) l+ Z$ F% h8 S
  157. //#=============================================================) u5 o6 W* q3 N- v( t

  158. 3 S* ~  t  u* w9 R+ M8 a3 L' m
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )% g7 ^7 ]' r3 ~  o- Q( D: T6 }+ E, t

  160. ( a, h5 @- u; D7 L  ?3 N8 `) f7 {) A
  161. //#=============================================================
    2 Z$ ]9 }! X1 `8 j. y

  162. . D( T8 l# r6 k  T3 k+ h
  163. {
    6 h7 l( k: {8 g5 i3 J# J

  164. 8 y/ S& n+ q/ I8 p6 D
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }8 m* U- s% C0 ~6 K% q% c

  166. 8 f# I9 i8 K& c+ ]5 }
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }5 g5 \! [" x/ [* N* w

  168. - e" S) e3 p& c  l/ W5 _) }1 q' t
  169.    return (angle) ;
    8 ~  Z. y/ N+ I' Y, y
  170. . U/ d+ ?" v0 _4 A
  171. }
复制代码

/ A# ^3 Y7 w; D7 j/ k2 g以下为摇篮5轴计算过程代码
6 F8 c+ U: a0 ~* I
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    3 U9 A( a1 \: @

  2. * ?. }+ W$ _1 a% ~7 J! R
  3.          j=0.; B1=0.; B0=0.;5 h( h6 c; |7 R$ {# }' n
  4. 7 W$ R" X# F9 g7 z4 [8 X
  5.           if (EQ_is_ge(i,0.)) {' X  P7 \" H7 U. r, p, }. v
  6. 8 c0 t4 q3 _  S- f' g' o* P1 g
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }, y4 ^. H  p$ U; z4 ~) t

  8. / x0 e3 l6 U( ~4 R, |
  9.           }
    ( o* i. r8 {  o9 ?/ f/ Y

  10. * T- T5 v. i, l) f5 F- h
  11.           if (EQ_is_lt(i,0.)) {
    " `/ b- D2 T  v  C$ ^2 }8 }
  12. ! q$ a4 @! M% z, f
  13.              if (EQ_is_lt(k,0.)) {
    , W3 ?$ s0 ~- q' g3 r1 d3 ]

  14. 9 `8 J, @' ]4 N% h0 n
  15.                 B0=atan(i/k); B1=B0+PI ;
    0 Q" X0 y' M. s/ P

  16. / K) D: ]7 F3 N( b5 t
  17.              } else {7 J1 L1 m! i  a4 @% z/ l

  18. . l  A. W5 [3 K  L4 Y, e) l. Q
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    % o5 \; H. u; @7 o$ e  v
  20. * V& ~3 I6 A/ s) H3 O6 _' D
  21.               B1=2.*PI+B0 ;
    1 I$ G+ @* B3 f: B: k8 j! E

  22. ' _2 k1 y0 C0 h, v  Z9 [  r
  23.              }8 Z& H- L  ^9 ?( O* y

  24. - b9 B' \9 L0 Z
  25.           }
    + j9 r# T6 l5 y# R6 R# L

  26. 3 m, O" c( X4 C" w; {; g  x: ~
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    ! Q- t% y$ x5 i& B3 A" l7 T: ~) G
  28. 9 V6 d" z8 N6 t1 O4 J
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ! f( i  M; C. J' A

  30. ' }  m9 ]& V( s( ~
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;" g2 s6 j( K+ f1 i- [5 Y
  32.   L$ ?' d  l# D' p. c
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

7 {$ Z: t6 E& Q) c4 n! E通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
3 n- m# ?( ?, R0 r- [. r/ \1 Q: z+ q2 |$ N
640.png 4 S3 v# ]" w8 y7 r0 U7 X6 l& j
测试结果:! g, H9 b4 H9 n0 H" Q; |9 ?+ G
6420.png
. ^" `4 F( T( ?5 k$ a' \; t) P; G, S+ H) M1 f8 \4 m/ {
反向测试结果 6410.png   J+ n. @' A7 v. c8 W4 }9 X- x

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

270

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-6-20 06:10 , Processed in 0.439775 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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