找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13912|回复: 3

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

[复制链接]

434

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);  d4 Z" `3 C7 q- c1 y" X0 l4 ~( ~
  2. int  EQ_is_ge (double s, double t);
    - s8 z  o, @* d
  3. int  EQ_is_gt (double s, double t);# r# L, {$ [- j1 B
  4. int  EQ_is_le (double s, double t);: @$ N, @( I9 T7 V" K" ~8 p7 w
  5. int  EQ_is_lt (double s, double t);
    ; }, S! Q' j4 n) f6 t
  6. int  EQ_is_zero (double s);- e" \+ I6 \0 `9 R- z6 H- p2 c% K9 b
  7. //=============================================================
      s6 A2 X3 s) T1 s  }
  8. double ARCTAN1 (double y, double x );
    ( M# @. D$ q, k/ m
  9. //#=============================================================& z1 i$ \9 P6 c& }0 f1 Y
  10. double ARCTAN2 (double y, double x );
    3 F4 E' C. B% |. F& m
  11. //#=============================================================( G+ h- u, b  @& ]; U/ m, ^* N
  12. double CheckConst ( double angle, double constvar  );" D# j! K8 r0 f( R  n% i
  13. //#=============================================================& u4 D% M; N; R- R  m# ~
  14. double Check360 ( double angle );+ U6 N$ T' {8 S
  15. //#=============================================================! @# S- V4 d" L1 Y% N- w# g
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );% p, q' o- O! K
  17. //#=============================================================
复制代码

0 }9 ~7 F! ]; T  q7 g! Q; v3 p; I8 B以下为部分源代码,用于判断,计算角度等9 |$ m) F, w3 ?9 N1 T
  1. int  EQ_is_equal (double s, double t)/ {% z( V+ o; p. Y7 x8 G
  2.   h; @* W) q: W( [6 f0 S: N
  3. {0 R* o: |% N$ o' F$ i" t

  4. . X. h0 ?" N2 l2 n# q
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    & X% @) ^4 q1 Q/ A' I% i7 @

  6. 3 I* D1 _" Z9 J6 P7 z0 C# g: I
  7. }. U7 B) q" J  v5 P/ C6 a  W

  8. 7 l. _" w% y9 K: D
  9. /***********************************************************************/
    8 I, ^; r! V3 w, S

  10. ! `0 h! _% D: I  Q0 h/ [' J. ~
  11. int  EQ_is_ge (double s, double t)/ F' ^1 x; L& j$ ^2 G8 U

  12. 9 s4 }! D0 B) _1 ^
  13. {
      D9 o7 R( }3 T& d3 [
  14. 1 J. C! c& @" S7 H" E, v
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    , r8 h/ _* a6 g+ |2 {2 Q5 _
  16. * b. h% h8 V4 U$ }2 n- d
  17. }3 B- d9 h* j. e) G& M% ?

  18. 9 ^5 m4 `# g! M# I! D
  19. /***********************************************************************/
    6 S9 G  m8 ^; B7 }1 o) i
  20. $ M3 X1 X( l, n& B. f3 V  x) g
  21. int  EQ_is_gt (double s, double t)5 z, J$ r+ F6 J9 e% J

  22. 2 p! s2 G9 g7 v' r0 x
  23. {
    * ]+ O7 [  N1 K2 d) c# H/ G: T) [
  24. ! M' d# }: S9 f
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    2 W. z* S1 J5 K6 ~7 i8 d

  26. 2 t" Q7 t- Z4 `9 I
  27. }
    6 C+ b. {' o6 T) L# e, Y9 d% Q
  28. * T/ K0 u; {  s% J
  29. /***********************************************************************/
    ) _- I% u* f; E6 W

  30. $ \/ P% I# e. ~3 q7 H
  31. int  EQ_is_le (double s, double t)+ }! ?3 y! J4 [- M; m& t3 r
  32. ' }5 i  D# f  h/ C3 w5 b
  33. {
    9 T/ ^; s2 e. S2 W9 C$ K. p
  34. 0 t1 {# z5 h# h6 |( H
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    4 ?  y( T; K, J4 P5 D' q

  36. 3 g  k: p: F8 y% d# P& J" O1 b
  37. }6 {6 G7 [1 P  `+ x
  38. ' x% Z. A4 L  X- T* [# h
  39. /***********************************************************************/
    3 }$ Y3 W' ]3 y9 ^2 }8 Z

  40. 9 D; c$ S" m. A% P
  41. int  EQ_is_lt (double s, double t)3 U( e8 }( E6 ~3 W6 k- D( Z2 ^% i
  42. : {: b$ `4 P0 x! S4 L2 S
  43. {5 V! d4 v9 G  d" U# R1 P
  44. ( ]3 t# Z) J7 f3 m6 M" t, x* M
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    4 X. U4 ?, f% L

  46. ! Y8 C) p3 U& H( p
  47. }
      q6 a1 r: Q" f1 R% X

  48. 0 {  S+ S0 o+ S* z3 c: _+ ?& Y
  49. /***********************************************************************/
    : B7 N3 r6 b( h! L
  50. $ b2 X8 M+ A- y: s" x" W4 U, Z
  51. int  EQ_is_zero (double s)2 @1 V7 a# q) K
  52. / |, S$ y% Q+ Z0 {: f! p' u
  53. {
    . w5 k7 C% G' B. a( J$ t0 Q

  54. 3 m% q* y+ b4 w0 G) s
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }2 [" ]8 W0 q, w: [4 n: t( `
  56. ) \5 F) t- l% N; h! Z
  57. }
    & r4 X1 s7 v0 A2 \! s3 j4 \+ {5 |
  58. * C* g" |3 g% Q1 x2 b" E% M4 {
  59. //=============================================================
    5 n: ?- _9 c1 c( g
  60. " Z+ G8 ~; p, l- U3 d
  61. double ARCTAN1 (double y, double x )
    , Y6 y( r' l* p9 I0 b, u7 q

  62. ) ]* E% B) r- a* D) Y; ?* z( j  H
  63. //#=============================================================
    2 ]9 {: \0 N( y. t
  64. 9 s3 i' F' I; w
  65. {
    4 m$ g! L9 ^. [+ `( l; x3 @4 _

  66. 1 R' H# C! U; [- n' X4 S7 k/ G
  67.    double ang;
      r& q0 ~; @) L& @* F3 i- U
  68. , A- X* l  q5 k1 ^
  69.    if (EQ_is_zero(y)) { y=0; }4 N" c/ A5 ]# P6 y# e/ r

  70. ) N' a& J" ~2 U
  71.    if (EQ_is_zero(x)) { x=0; }
    7 C9 ]& v* K. n2 Y4 H8 ^

  72. ( ?# j0 W+ \& \
  73.    if (y == 0 && x == 0) { return(0); }
    - B& v. ?! l8 m
  74. 0 }! x8 j3 n4 i8 D" y& i8 I
  75.    ang=atan2(y,x);! t) }' J: z! P$ |$ J. H- F

  76. & A" q1 m: H3 t% h4 j5 |, ?# Z
  77.    if (ang < 0 ) {
    0 |  v1 J4 t8 n  m7 D
  78. , h( ]$ N4 ?, X7 Y, v
  79.       return(ang + PI*2);. r& W2 c. J5 K# A; A/ `( O

  80. 1 ]; J1 @/ ^/ O
  81.    }# a0 U# V4 f# H

  82. 8 d! t: K1 I  W# K
  83.    return(ang);4 L, {$ K. ?' s9 |- q( j8 r6 k
  84. 5 R4 T+ z. g' |8 [( k( O5 F8 L( t
  85. }
    2 E$ }/ |) w6 E6 Y4 a! }, R

  86. 9 ]5 E- _2 m& \7 d: `
  87. //#=============================================================
    ( U. \- q# `) S6 ~, L
  88. . s3 u5 C/ m6 A; U, J0 E4 K4 B
  89. double ARCTAN2 (double y, double x )( y2 f9 S/ s: w7 N0 p# w
  90. * e( Z* o% R5 v7 F
  91. //#=============================================================
    8 Q* b% P+ d! ]! Q! r; Y

  92. ! E' P2 W# k* l7 D& G4 r- r7 c
  93. {- |) X! W( t0 X. \; Z; d' R5 C

  94. 5 p: I5 x$ u" |2 i- O2 f6 g$ d
  95.    double ang;( W, ~8 a7 Y8 m5 X
  96. . z6 n% i# N' s8 W4 z& V# p
  97.    if (EQ_is_zero(y)) {
    0 A! _* v0 S# C+ p

  98.   Z' b8 L  b" E, J
  99.       if (x < 0.0) { return (PI); }
    ; U- r+ L, K3 i+ `

  100. 7 n9 K" A  B" z/ L& [. ]8 X! _# a
  101.       return (0.0);
    5 ^& F; |3 w! E( m: G- w$ P3 }! v

  102. $ s' w1 k/ R7 W' V' l% w! e, T% N
  103.    }) E$ l  @( r+ g  \

  104. . _7 Y5 `6 h: G" b# r4 K
  105.    if (EQ_is_zero(x)) {
    7 L& j% J/ D" F! H. I
  106. . V$ Q. n% a" r4 \# f, {( T/ p6 i
  107.       if (y < 0.0) { return(PI*1.5); }! c/ I2 B+ K/ ?

  108. % B( L2 C# k# I* a9 [# w
  109.       return(PI*.5);4 ~8 L9 t0 E! P, P8 }" w

  110. ! ~* F7 c1 W  U
  111.    }
    ' r( }; K7 B  v8 s7 p- @

  112.   U3 w# m) H* Y0 ~* H
  113.    ang=atan(y/x);1 ~* K2 r& p. p9 M* y7 Y

  114. 1 t5 T+ M# j$ L! Z8 J* ]
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    7 p" A8 _9 ~) K4 W5 A4 i! H
  116. 7 T0 u- D- H5 r7 P5 f8 T
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }8 p6 ^5 r, |+ U7 n

  118. ' W# ?2 R  O' w0 N2 ^' w& h
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }, E3 X( b3 m8 F" }+ b; W/ L( L; _: B, p

  120. ! a$ p) `, @) u8 I) ]2 `
  121.    return(ang);5 K( }) a, ]  Z) |
  122. 3 }0 h6 T( G; ]
  123. }
    : g8 C" O" \4 }; \) Y
  124. 6 ]5 L! [' i: e1 z- x" w
  125. //#=============================================================' D, A  @: @9 ?0 N6 `% e

  126. : j! @2 e+ d* m$ ]" d- J
  127. double CheckConst ( double angle, double constvar  )
    6 K; O, `5 {5 y+ P, k# e) q/ m

  128. 7 V9 @# X7 L: }7 ^$ H; I
  129. //#=============================================================4 t( R' _% p3 f) N7 J6 S

  130. 9 Q" D! w$ t0 \
  131. {
    % D5 V; K5 j0 V1 {
  132. 0 @- b2 v5 g  q* P* i6 a, k
  133.    while (angle < -constvar) { angle+=constvar ; }
    0 m" o$ x" c4 [! n+ j6 t- O3 k
  134. 4 T! e6 ^1 }$ G  s2 ^+ @
  135.    while (angle >= constvar) { angle-=constvar ; }# ?8 h7 T, o2 y' ^: ?8 e

  136. , }4 m2 L% _! Z# P3 f) y) D* ]7 E
  137.    return (angle) ;
    - }- y& b, z+ K- _$ i+ z. s# K

  138. ; t( L, }3 |5 K1 V
  139. }1 C1 G$ N# t5 w

  140. 8 V- _% ~& X+ P
  141. //#=============================================================
    9 B& j# G+ x0 \3 I

  142. ! v$ v- _& z1 I; n* b/ k
  143. double Check360 ( double angle )4 D( [; Z) [; w+ I9 @

  144. % J! \' y4 P+ M/ M# r/ I
  145. //#=============================================================
    * i4 i: ?' O( v/ K/ b) {4 m* @

  146. ! c0 Z2 l) }9 e( C- z. Y
  147. {
    0 H0 a+ Z- G1 X
  148. 5 G; O( \) v: _3 w; A" Y
  149.    while (angle < -360.) { angle+=360. ; }$ S, Y: l5 s. a' r2 I& g
  150. 9 ]  W0 \; k4 U% Y) j& @  V
  151.    while (angle >= 360.) { angle-=360. ; }
    % }: p: S, L: [, C( g( ]7 \! {

  152. 3 {. V5 X9 X: a  X
  153.    return (angle) ;
    . h. A& {$ F- [$ Q; f8 O( {: t! ]
  154. 3 M; n4 ]0 x. r7 w$ B% w" d
  155. }
    $ l  p3 Y1 {# {' Z* x

  156. 6 l' r/ e6 ~0 Q; q5 B# o
  157. //#=============================================================5 z9 ~/ Z) L( o$ j: Y  P7 c! b
  158. ; F* z% \  i9 Z' O3 `" @
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )- g) }' \: f( v5 P( s0 N

  160. ) R3 L# S7 o! v
  161. //#=============================================================, B0 j! h* j1 z, _0 s
  162. ; |5 h, E- s( \; C& u* E: p3 P
  163. {
    , c8 |; H, M! i0 I8 ^

  164. + G3 ]& H# P; O- I  h
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    9 P3 ]+ P$ r* z0 X% h
  166. 3 w3 |+ L& J& V* g( y* O" Q
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }  l( W; n5 D) p3 @) n
  168. 8 K9 e2 c$ S  Q4 l5 s
  169.    return (angle) ;' h* G. P! H7 Z  B6 x% n+ h

  170. 7 @. m9 v6 A0 `+ Z
  171. }
复制代码

& P6 l* F, C- [' o/ w以下为摇篮5轴计算过程代码
& T% d+ e2 P0 j
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    1 F* o; L0 F! b6 e$ n2 y
  2. 4 g0 N, f) W# D( c$ F) C( I
  3.          j=0.; B1=0.; B0=0.;
    : o$ \0 M# U( ~9 v' ^7 J) V4 n
  4. ! x; n0 N7 I0 R* x
  5.           if (EQ_is_ge(i,0.)) {$ J4 N' t: ~4 {- ]

  6. / z1 }, r' q" R" d
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }% R3 n7 S: O' V# j& R. J, ^1 y
  8. 1 L4 D2 {- A- R) @
  9.           }" B8 p/ f8 o: j/ s9 H

  10. , }; q& n: Z! O- N- u: s) }& M
  11.           if (EQ_is_lt(i,0.)) {
    & W4 q6 i& g5 P5 U
  12. # h% z: U& y* ]9 N8 v
  13.              if (EQ_is_lt(k,0.)) {7 s! q! y4 g, \

  14. / R5 A. D  A# u/ f
  15.                 B0=atan(i/k); B1=B0+PI ;8 @  R) T, t( G7 t, [/ ^

  16. ; D3 W8 P4 @' s' F8 @
  17.              } else {
    3 u  _$ M0 `2 {* N) c, j, a3 h; V

  18. : Y* ]: \9 ~5 s  ^
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    - S' `; |) A. h* b- A0 T
  20. : q% a( H5 A6 q" h4 \% v
  21.               B1=2.*PI+B0 ;# S) C- n) u$ z4 R4 m8 Q# A

  22. ( K$ {9 f4 f4 T3 ]3 K- ?
  23.              }( ^! [* ]% B/ [$ s

  24. 1 O% l4 p3 m. c1 d7 z
  25.           }. N1 U% H  D2 R; [' C  Q

  26. % n& @  V  I% w( R9 `
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;# P2 E7 R- W) Z

  28. , y0 Y  ?! I4 a9 }9 A
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));- W$ f- {4 v! p: n
  30. " @+ }$ |: Z7 Q! k7 q8 u
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;1 R5 t3 M: H4 o8 P) o1 W/ A" ~

  32. 3 V; U: }% P9 R5 R& t3 I$ g
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

0 O4 Z  R: t5 K- l' o通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。: K0 {5 b4 i; m4 A& e

1 e! ]5 Q- \3 u# M/ b0 D" v; [ 640.png
0 n0 d. V, k0 t4 q测试结果:0 s; A8 W4 S/ ]3 x/ @+ y
6420.png ( o: B) g6 D# p% D' b
- ^# A; N+ C2 N% F9 B; m. c
反向测试结果 6410.png
+ ^/ b+ o7 s2 L8 `1 K# E' K+ U

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

378

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-11-8 01:29 , Processed in 0.234231 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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