找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11513|回复: 3

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

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    2 ?# }$ O7 k# c2 w
  2. int  EQ_is_ge (double s, double t);; r# ?/ w- |" I( }7 F/ }: x" b0 @
  3. int  EQ_is_gt (double s, double t);
    0 i* n5 @; P+ E! Q% V1 ~( F) X
  4. int  EQ_is_le (double s, double t);
    - [9 r0 c* s! j. Y+ d
  5. int  EQ_is_lt (double s, double t);
    0 Z1 O: v# t) V9 ^
  6. int  EQ_is_zero (double s);  _% S7 b0 ]8 d. c  ?7 \
  7. //=============================================================: M. b* L. E2 Z
  8. double ARCTAN1 (double y, double x );: a$ _, W' N. d) A
  9. //#=============================================================
    % U- @9 h- q7 x6 \; [. B; E' |+ F
  10. double ARCTAN2 (double y, double x );! Y: q% B: M5 @& d( ^1 B3 u
  11. //#=============================================================
    0 w$ a1 E9 v0 v8 a  n* v- V! j
  12. double CheckConst ( double angle, double constvar  );
    $ w6 ]" a$ H, Q- s3 H
  13. //#=============================================================7 D& k7 J+ x$ o3 D, n- N6 @- t, Q7 ], G
  14. double Check360 ( double angle );8 J  K( x( D9 M8 Y
  15. //#=============================================================, s9 o; i/ `2 r# F* ~
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    $ o- U! `9 K  Q& p
  17. //#=============================================================
复制代码
: r  H# P2 [9 ?% a6 D4 G
以下为部分源代码,用于判断,计算角度等
) [% [5 Z$ e* z5 H% a0 F" O
  1. int  EQ_is_equal (double s, double t)
    , W$ H* v0 O- \0 |) _! W

  2. + b, S; h% ~/ J5 d* @6 }
  3. {
    * \! Z5 N3 W: o. I1 J
  4. & i7 w* k: I* D& }; r
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }7 i0 E+ L1 l( p) o; {

  6. 8 {3 [  D) ]/ |3 d  h
  7. }+ p' @! O1 s6 ^  y0 V

  8. 4 j& n* H2 H  M2 N# ]: F3 R$ g
  9. /***********************************************************************/
    8 W6 e9 g; s3 {/ O, K( N
  10. 6 z4 @8 W2 P1 z1 z6 H+ e
  11. int  EQ_is_ge (double s, double t)
    ; p! h( T  r" G" E7 H+ O2 z
  12. $ h6 z; F5 t! Z
  13. {
    % x' B* e5 |# e4 ?1 G
  14. $ f3 N/ A% ]1 P) p$ X8 j
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }4 U0 q- S# u  U1 a
  16. - t; Z; U  z4 x7 H  r, I& c
  17. }
    : A& J1 t* ?1 ^" u. k
  18. - d+ t1 n/ K, l5 e
  19. /***********************************************************************/
    & B$ X/ x# N1 [) i

  20. & }  d: @( l# k/ v
  21. int  EQ_is_gt (double s, double t)
    * m* C. B5 U  Q/ H

  22. 8 ^2 H# c* F* T( o4 `8 q
  23. {
    " B* B( H! n: o

  24. 1 `/ I) e: W# Q" q
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    7 u0 C  i& O  C- |
  26. ; f! }5 w& j3 H; s# N
  27. }
    - O4 f+ T% R) h( D9 J: Z
  28. # h$ w& H1 K7 \2 {2 T3 E
  29. /***********************************************************************/
    # K* ^9 X4 y! C8 L2 j

  30. 5 u2 g6 J7 y2 m6 A) t
  31. int  EQ_is_le (double s, double t)! S7 b! X2 u2 C# B# x

  32. * T) Z# b7 N! P% h4 q! j+ L
  33. {! b, L' [5 [: a3 I0 r3 l
  34. 1 ?7 v& ~2 ~7 `7 C2 D
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }* L- f4 I. _8 \- l8 F4 Q
  36. + Q" c0 x) k7 C$ Y' \# W! e# t+ V
  37. }: k2 [  \( i' V8 N2 u
  38.   v+ V& M6 m5 ~
  39. /***********************************************************************/! P) t$ W& K3 `, o6 m

  40. 0 q$ b9 ]: X; F7 Q4 _% A! W9 _
  41. int  EQ_is_lt (double s, double t)$ Z) y6 T( c  E

  42. 3 G6 M( _* S9 K4 C4 F4 z
  43. {
    % O1 j" [/ e7 K( @" _
  44. % H2 }& k  A: O9 }
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    % V1 y3 v3 V  Y* k0 W
  46. . J7 g9 |; o$ l
  47. }$ N' A4 ^( b6 C

  48. ; b- t# f, w& P) n- G. D
  49. /***********************************************************************/
    - F: s: p9 U, `/ X6 b8 N
  50. # P+ u- \: x; l# k9 |) s7 M% n
  51. int  EQ_is_zero (double s). q; ?/ \9 n" l( a) v6 _

  52. $ k, y& n  L7 g# `. K4 x, f
  53. {! x: C1 X) X% ]0 M8 t& E! B9 ?: |

  54. / ?6 A# h3 n; q
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) [, O3 G! p) P/ D2 w% G6 G$ Y

  56. * i# M6 A! J: Y1 r: J
  57. }9 q& q2 Q2 R  D9 n8 Q

  58. ) X. x; a5 ]  @7 ~- ]" {: c
  59. //=============================================================
    5 C2 r$ R2 L/ D1 ^5 \* W3 ^: c# H

  60. $ M; F2 [: }" w( q6 b
  61. double ARCTAN1 (double y, double x )) p' j5 G& D' d+ e- a

  62. / i2 l2 H9 A8 N2 }* j6 c
  63. //#=============================================================
    , i2 Z3 Y5 C+ K$ x: ]/ G, e  S" j8 E, y

  64. 6 p( p% R7 y2 j* ?$ n
  65. {+ Q) m' L: Y8 k( i: u

  66. 1 }& h- H3 E: d) u) W
  67.    double ang;* ?+ J4 l6 i" k/ Q- F0 `

  68. . a, x* r5 t& i8 U, @( Q  t9 w
  69.    if (EQ_is_zero(y)) { y=0; }
    / b+ t8 X& w) N$ C3 m/ a! q

  70. & n+ Y5 _3 t- B9 J
  71.    if (EQ_is_zero(x)) { x=0; }7 C/ G  y# W: d  u. F. k6 ^
  72. % b. c9 h# l+ k2 \
  73.    if (y == 0 && x == 0) { return(0); }7 L( v  P1 t5 R* x9 a- S

  74. 5 ^  N% I/ h  H% e4 Q$ H
  75.    ang=atan2(y,x);, ~* B+ N5 S6 }0 o1 B
  76. 0 a! y0 Q: S: S8 X
  77.    if (ang < 0 ) {
    - k+ T5 s% p: U" x

  78. ; I1 ?& \7 I; W! L
  79.       return(ang + PI*2);* r8 o4 W6 J/ [8 C) [* H

  80. % Q% Y" A  K1 T" W) [7 B
  81.    }
    ( F0 d2 |# H" X

  82. . p" S2 h0 J, v/ |0 M5 K
  83.    return(ang);* Z% I  ~% k$ }

  84. 9 U% {) ^0 L+ E. e/ j5 ~
  85. }
    7 F+ b: `' e% j+ }* A% C: Q2 \

  86. - t0 z& z8 W" l* }3 Q7 T$ a+ h, l9 r4 l
  87. //#=============================================================
    5 |" I4 ]+ O  ^

  88. " P6 m4 ^. A9 ^( a
  89. double ARCTAN2 (double y, double x )- ~- o# G& o% h

  90. 5 R; c: r/ ?1 K- z4 u  B2 h$ I# |
  91. //#=============================================================
    & C* z# p. A8 z0 z, X" d. _

  92. 5 j7 z% z1 K, \- O4 W7 @
  93. {
    # ?5 t0 z" @5 I

  94. 1 q" d5 W* G/ t- Q2 W0 {/ A8 x1 W9 {
  95.    double ang;
    . z* L% W5 Y9 c# d2 X/ {$ X9 o" ^% K
  96. , I) ^+ \- q) u6 k! p% M8 [, v
  97.    if (EQ_is_zero(y)) {
    2 f9 N, P8 C; P' _/ K

  98. , v4 h. I$ w) |/ U+ O
  99.       if (x < 0.0) { return (PI); }' Q$ N/ v3 B9 ~5 d
  100. $ e, Y  x9 n, r1 ]
  101.       return (0.0);
    ' s. n4 G- c* o1 f
  102. 0 s" b0 X8 u; X; ~% |% d
  103.    }6 F. Q) n8 g% e' Z6 `( |
  104. 3 Z# y2 U: Z! c; E( V3 |
  105.    if (EQ_is_zero(x)) {
    " g; m  _: j0 g7 O" q, c, Q
  106. 8 e* A, _" S- P& U+ ?
  107.       if (y < 0.0) { return(PI*1.5); }
    4 C! F3 N0 `" A' w% {1 R9 l
  108. 0 \. b/ y- F# A$ |
  109.       return(PI*.5);# d: }) x! Q3 U7 q  z8 F
  110. ! l7 }6 r$ G. h! o" l% t, Q
  111.    }
    / _1 h, N$ g# ]- q' o4 j

  112. ! q6 k  p7 I. e
  113.    ang=atan(y/x);$ h, g3 B9 p, c* e& A
  114. # l" \0 _" \! c8 I) T4 k
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    ! B1 c& c7 z# K% |/ ]3 Z
  116. % M: W3 L1 ?- r6 Y  H# C; `5 a. j
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    ( e0 A. O! B7 X2 d0 F) a7 Q2 a$ L

  118. 9 n; E" q/ i3 C8 a/ c
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }9 I# h: o- u5 ~" F! f
  120. ) _9 E/ F" B, b, V' c+ M
  121.    return(ang);& U* K4 g2 B7 S( _
  122. 8 I" R2 R  d: U8 Z+ k; [2 x$ Q: w2 C
  123. }
    ! D( x: {  g, H7 x+ x6 W5 J

  124. 7 z: R" S0 H/ |1 S
  125. //#=============================================================0 p6 u' s" K% U/ u" N
  126. 2 p1 Z; B1 h; V% v" A! v
  127. double CheckConst ( double angle, double constvar  )  U/ k" Y+ a9 v# _0 l
  128. 2 Q2 A$ H5 W; _) j, {& k
  129. //#=============================================================1 g" u6 \' E/ W( O7 T) n
  130. 0 L) h0 e) u7 a3 x
  131. {
    ; W$ j( }/ j" m) U- ]

  132. 2 X( l6 ?0 t! t7 e) G: ~# H2 D
  133.    while (angle < -constvar) { angle+=constvar ; }# O. c' h- R5 F# F

  134. ( P) T/ J3 ]: b3 w. J
  135.    while (angle >= constvar) { angle-=constvar ; }5 Z& F: q5 Y2 w2 I6 t- _' j
  136. 6 q5 p& C: w6 S9 r) Y2 u
  137.    return (angle) ;
    ( p+ ]. o& s) a  ]& K3 m
  138. & B9 H3 z8 r1 N% O+ `1 ?9 Q& v% ~
  139. }; t8 H1 g( ~' L

  140. 3 w; ]- R; E" R. `
  141. //#=============================================================+ E4 T1 z6 d: }  R" c' l- L/ i
  142. 1 |: E# e! Q0 x( X6 Z2 I
  143. double Check360 ( double angle )
    . B, v8 T& U  h. H! B0 e

  144. 8 |) t- |# L1 Z/ x8 r. ^" v# V
  145. //#=============================================================% A, q; U7 _0 ^* j- E
  146. & _" A3 e# s: C! Y6 K% T
  147. {
    6 Y# G+ w, M- d  n6 n9 I+ O$ `& C

  148. ( ]. ]* A5 i! F3 W
  149.    while (angle < -360.) { angle+=360. ; }
    ! f% E" F# i  P% {2 `

  150. % t! ?$ C: T+ U* Y
  151.    while (angle >= 360.) { angle-=360. ; }
    & ]& Q6 Z% i8 B3 }
  152. 6 Y6 `- }$ a. x4 x2 w4 F
  153.    return (angle) ;
    * i8 Y# e- ~. H+ ~
  154. , b) H- q  D* ^1 |
  155. }% s! ^: o/ z, c, X
  156. 9 ]8 x( P& X& \% |0 r
  157. //#=============================================================
    4 X& J$ h, Q( f
  158. 5 ]. Y5 k; Y3 p& z% ?# [
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )& j) b: I4 I0 d) b" p! L

  160. ( l# L8 o! i% a2 a+ V& K1 t
  161. //#=============================================================" ?8 h  W5 g$ \' _

  162. - q2 v  D. O! V% N4 n0 G
  163. {
    2 q5 J$ H# f% [9 O
  164. 7 }( D1 F5 ~8 ]
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    ! A) f. h6 s: F: n

  166. 9 s- _4 Y$ T( t; L, c
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    6 F5 X% I& t; U4 P1 B
  168. . Q" @# }; r, z2 a, F+ X/ Z% Z
  169.    return (angle) ;
    , O" e. U2 E' C1 r8 n5 X: b

  170. 0 q; H+ J2 o- S. l
  171. }
复制代码

6 y: L) p, m$ B8 |, V以下为摇篮5轴计算过程代码
( ?. K% A% h4 K: F1 ^
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    1 |) b. h4 `/ R1 }9 @3 o( a+ u
  2. " T* ]' w" n7 N5 A. k! C
  3.          j=0.; B1=0.; B0=0.;- M+ \$ T" I0 @) e! e' j8 e
  4. 3 M9 x. V0 E0 f$ o; ?- @2 O
  5.           if (EQ_is_ge(i,0.)) {
    8 x6 B3 E! D6 l* o2 Y5 o' m0 J: z
  6. 9 |( Q4 ]8 K3 i$ c2 ?
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }4 G/ P) d4 G( n! Z9 _( Z$ |
  8. + w- ~* l+ ]. V& X$ t. Q
  9.           }
    # b! J: v9 f0 d3 M7 d3 v) s+ r

  10. , H6 `( q7 Q9 m0 S; Q, W$ ]2 F
  11.           if (EQ_is_lt(i,0.)) {
    / U0 K3 O# s  [: o
  12.   ~, t2 }/ g9 z0 i9 Q7 I8 G
  13.              if (EQ_is_lt(k,0.)) {
    3 g6 A& Z! G/ x7 \

  14. 6 K2 ^1 R0 ^% b8 ~+ g! i6 d9 w/ f
  15.                 B0=atan(i/k); B1=B0+PI ;, y( |* w) F( B& N
  16. 6 D& {) d# h. O% e; H1 e3 q4 b# {
  17.              } else {
    ) O  b" e- @- I4 U; ~+ U
  18. 6 H1 z1 G( `' k+ v: y
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    3 ^6 ^1 q2 U$ B
  20. 1 u! v; Z2 |! I2 K! x" l3 U7 O
  21.               B1=2.*PI+B0 ;& t4 N% U, r+ z# E8 |6 h, p
  22. ( g/ o3 B5 c4 e0 t/ s( N9 p% Q
  23.              }
    * j: w) ^1 |( b) H( ~( i
  24. $ q) J. ?, P3 h& m0 A1 Y1 H1 w' w
  25.           }* }* S* n6 o% q2 z1 m- a* x3 v
  26. $ U$ Z  q0 Y$ N
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    1 k* ^% k" Y( ^& Q

  28. % o5 q2 o, Y- T4 v+ F. J9 Q0 d
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ; ?: E5 `% M5 D1 b

  30. 0 _; y" ^) T9 R0 x% ~& l+ X: v* K
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;$ ]/ v' H+ l9 A/ Q' F
  32. 1 O: j( M+ x2 l# {2 g
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

: `4 @6 n7 V" ?3 d: P- J, T. H通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。3 x: c7 H8 ]5 E  ^+ F( d) j

5 B; K( u& X& e; R 640.png . h0 d4 l8 b3 [, W3 b, x1 }
测试结果:: P6 C9 I2 L( w* r
6420.png / u% d6 \% M) \

/ x0 o2 j9 W) ~+ B+ p; D; s) y) y反向测试结果 6410.png / c; [1 U* t+ `6 l

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

346

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-9-23 21:33 , Processed in 0.163852 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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