找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4256|回复: 1

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

[复制链接]

431

主题

5754

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);0 ^" h: F$ G" S9 R- d) U# m) K
  2. int  EQ_is_ge (double s, double t);3 ?  ?; h+ h# H# R' A
  3. int  EQ_is_gt (double s, double t);; U8 o8 q: u; R# N6 o5 f# Y  G* @
  4. int  EQ_is_le (double s, double t);6 J3 s% L! j; C) d) e* Y( b; z& x* N/ S, ?
  5. int  EQ_is_lt (double s, double t);2 E' O3 \$ ^$ I# H
  6. int  EQ_is_zero (double s);0 c# Y/ n' W9 n' d
  7. //=============================================================
    # |" H* X7 v5 D  X  Q
  8. double ARCTAN1 (double y, double x );8 {4 `3 A+ J8 K; `1 w' l
  9. //#=============================================================  o* c6 t+ @( z6 Q
  10. double ARCTAN2 (double y, double x );) Y, S" y: P4 R, W, \- p, s
  11. //#=============================================================
    5 j6 E0 T' _4 R- ]
  12. double CheckConst ( double angle, double constvar  );* r# y2 N9 p4 U3 Z; Y
  13. //#=============================================================$ Y$ k% m9 N4 M& a: r' N" M
  14. double Check360 ( double angle );4 |, o4 m: a" ?5 Z( w
  15. //#=============================================================% N2 c4 C$ y! r
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    , G1 q" a: o6 v3 r) A
  17. //#=============================================================
复制代码

$ M# L, w  x0 S" }2 ?0 p以下为部分源代码,用于判断,计算角度等6 \- N. P- s$ i8 `* \/ `4 [
  1. int  EQ_is_equal (double s, double t)4 ?6 Q* L5 O- D: U; Z
  2. 8 ]8 Z+ R6 Y5 R: ?0 s& w
  3. {) h& l0 ?. K8 N8 u! C0 {4 m2 b2 `

  4. 7 g$ O4 m4 A: F% Z4 W
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 ^- Q; ]* G+ E1 J# _% z0 O0 {$ y# Y

  6. , L9 g( N3 b4 `/ V3 d# R
  7. }
    7 Z2 F/ B2 o) ?( Z3 Y5 b) {
  8. : B' Z9 h9 A& I
  9. /***********************************************************************/
    - q; j. P7 q) Q

  10. 1 Z5 F: Q1 y2 b
  11. int  EQ_is_ge (double s, double t)8 |! s( K% v9 U+ H. o

  12. - _1 M7 D( U; p3 F6 s/ v
  13. {( z9 p5 @% ]4 }. m
  14. 6 a/ [  Z6 q: L" {- X, |
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }2 c5 e8 g8 F- w$ E6 E3 j
  16. 9 ~8 B& m, J; h2 @
  17. }
    $ V  o* B- K/ C6 h0 a1 O9 t2 m2 Y

  18. 4 }( N' ~6 g& S5 b" H/ D
  19. /***********************************************************************/
    ; E: x* Y4 n( D- ?8 p: x/ W" K

  20. - G7 L" Y% I6 U4 t$ x' z
  21. int  EQ_is_gt (double s, double t)4 X' C0 {- z0 C& y, f

  22. 9 B: |8 w! L, J
  23. {
    ( o2 U& I: h$ |: Z
  24. : V2 a  L4 e+ g5 E
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }3 [# O& F3 R. {# f; y( p+ ~- H
  26. 6 ?. a7 Y* E4 b! N0 W2 ]
  27. }) d( L* x6 F. |7 F! e

  28. / V$ k& c3 \% [2 E
  29. /***********************************************************************/
    6 v# p& g- y6 Q. }4 I
  30. ! T; G8 u. Y9 a; ~) d7 a) d
  31. int  EQ_is_le (double s, double t)
    0 ?  v7 v" }. {/ t6 k+ Q7 O' F8 a
  32. ( h- a# H% q3 O- ~
  33. {4 l3 Z; D6 |4 q6 k& t
  34. 2 z' n3 t5 b- y& t. B. \; r# O
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }5 f$ U% N7 _( L, e# V$ o. a

  36. - R6 ^1 d; \) s; A
  37. }
    9 x9 X( n( `8 y3 K

  38. ( L' m* F; k! g2 C& s$ r/ y5 h
  39. /***********************************************************************/4 Q, z/ n' `: }# I* K% t6 G- j
  40. 8 ?% n: S+ W1 o* m7 J4 o8 W% \
  41. int  EQ_is_lt (double s, double t)
    # Q+ I4 y" D" Z

  42. 3 g$ M" Q- F$ q2 S* g
  43. {
    ' b7 V$ A: ?* p
  44. 4 X9 m  \% A, N- s5 M. s: V
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
      ]1 K: G' \" R9 x8 Q

  46. " M$ K- O1 m# J0 e
  47. }
    2 _: t# C# T( B) m; W
  48. 0 t2 ^) D  V' R1 e4 d
  49. /***********************************************************************/
    6 h+ r, p- @9 @2 M, U4 M
  50. 9 ?3 o% i+ R" @6 [9 _2 b/ X2 u! l3 I# r
  51. int  EQ_is_zero (double s), S& w2 h3 N1 ^& O3 V
  52. 6 Z7 q7 o9 [* G
  53. {
    9 o  Z  d/ K0 }* s8 O( w+ k2 g/ J

  54. 7 K7 a- _8 o- J  f- T; B. W
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    . k& W9 \6 g5 B- i4 E% t+ `3 v! U

  56. & z! f7 d/ Z- ]' {4 ?; ]. H
  57. }- G4 `3 e/ j8 d! ~8 {
  58. & U4 r" S5 B3 ]$ y, i) d
  59. //=============================================================2 ^- Y) P9 t- P2 m
  60.   }& o( ^, ~  l! B# f
  61. double ARCTAN1 (double y, double x )% u2 l# Z8 s6 x

  62. 6 F8 v1 R) W4 p% B4 Q  \! }5 l
  63. //#=============================================================
    ; b& X4 \& S# o5 G0 }$ @" I) Y
  64. 7 i8 J1 k4 s) m7 m, o
  65. {
    2 s. @3 K8 a$ z" h+ R  M+ g; [

  66. 3 V: S. B4 J1 {+ _+ D% g! r
  67.    double ang;8 n! c/ b" X$ M. H8 r) F

  68. $ V6 e0 x  r4 R8 S1 D# L
  69.    if (EQ_is_zero(y)) { y=0; }
    : l" }: X" y$ y

  70.   m. L% `" {' B3 b3 s
  71.    if (EQ_is_zero(x)) { x=0; }
    # ^1 n) }: s, ~0 D% Y+ Y

  72.   j  {5 l3 Y9 P# d% Q& C7 I: M
  73.    if (y == 0 && x == 0) { return(0); }) W: Y; ?3 w1 N: \+ @

  74.   S6 c' ~* Q( Q+ S9 M5 j
  75.    ang=atan2(y,x);
    " f0 y" B: H0 o

  76. 3 |/ q) k6 B+ F1 ^$ Q
  77.    if (ang < 0 ) {
    ) t/ m* z, ?8 ^& E

  78.   y2 d0 V* }" Z2 M: z, h2 ^2 n
  79.       return(ang + PI*2);
    1 n, s; G  q* \# v! c* T4 c

  80. - j' d6 E9 L- }  B) ?
  81.    }% m7 M7 H, @/ m3 [0 M  `+ b
  82. ; C$ l% M, y# P4 b8 r  l
  83.    return(ang);
    0 H& ]3 |# z- G& `4 P
  84. ' Y( A8 Z$ `/ m7 E- A* E7 X
  85. }2 ]; M4 m$ u' t

  86. 6 j" w5 A3 h$ Q% v3 g1 B
  87. //#=============================================================; ^- u5 U! o5 s. c& G, X' f5 G" h

  88. 8 ], D5 z3 S! x3 h3 }
  89. double ARCTAN2 (double y, double x )
    ; S8 P& `; a0 E! }

  90. + b! j8 `) R& Q4 x1 |8 C
  91. //#=============================================================6 C) Q7 t& E# `2 d; e5 B9 K& z) v
  92. $ D; V. D$ X( F, L3 n* R
  93. {
    $ m* b" `- [! s6 q4 ^9 c
  94. ' G% y3 {- A8 l
  95.    double ang;9 q1 [8 l# D% v$ f) f) H% X
  96. 2 ~9 t) l$ t+ e+ Z, {
  97.    if (EQ_is_zero(y)) {3 {  W4 d- K1 I
  98. 6 g" h3 d- A4 _. S$ x: y+ n; \
  99.       if (x < 0.0) { return (PI); }
    7 o4 J$ D5 r5 `# ~, {, O
  100. ! Z! D! l; O1 s+ Z
  101.       return (0.0);
    / H5 p. o$ Q+ G/ M- }) Q' k/ L

  102. . u9 G: j' O2 Z6 d5 x+ l; S# q
  103.    }6 D+ `' F" N) V% h
  104. 5 y& D( ?  _) a$ k! x" q
  105.    if (EQ_is_zero(x)) {
    ) k3 D0 O4 V  y+ L1 Z/ F% h
  106. 7 }+ E! P* L5 X. |+ F9 n& h! H
  107.       if (y < 0.0) { return(PI*1.5); }  y7 f: Q% B5 E0 Y5 t. }
  108. 6 M/ J% F6 i* u" r5 ^- S
  109.       return(PI*.5);* L, m. Y* o3 t1 j2 k! W# _  D& f  i$ J

  110. / g: n, A+ u4 z1 h
  111.    }
    $ h3 Y$ Q( C4 L7 c/ V2 c& N

  112.   r0 Y) _8 [: E* E3 a
  113.    ang=atan(y/x);6 w: J3 {6 |  c" I; O7 x2 K
  114. ' P* Q8 H- z" Y
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    4 K2 V+ L: V! W

  116. 1 l9 k8 f; D" {/ p( U. }
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    9 t  K6 o7 E7 E* ^5 c% y
  118. ' w8 C+ C! B7 Z% Z/ m- |
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }. p1 y$ H) \" h. Y6 H5 F
  120. " I+ V6 P: @& p4 J+ z
  121.    return(ang);
    - ?' j9 L2 t! t# ]2 p) A7 h2 C! j
  122. ' C6 K0 O2 a, A, F0 N, M# v+ _
  123. }1 M. c! M9 N4 l% [3 u

  124. 0 h7 U: q' t1 H- |
  125. //#=============================================================& |2 A4 F3 m( Z- E+ t3 q' w
  126. & ~6 z# a4 s3 O1 X2 T% p# N
  127. double CheckConst ( double angle, double constvar  )& I; X* @0 Z$ }7 ^  C5 B
  128. 9 P. X6 m; f7 X1 c/ G+ U  q: `
  129. //#=============================================================3 N* i& u: a0 ^: s) d
  130. 8 D, j2 n$ u  X, p6 c. w4 {
  131. {
    , L& K" z6 Y5 x% x! c; g# h$ Z7 n

  132. . W/ I* w6 e' ~- ^; X$ u
  133.    while (angle < -constvar) { angle+=constvar ; }
    , q$ @6 b9 `# y8 j

  134. - k$ ~6 s- ?$ `% F; Q8 X+ I
  135.    while (angle >= constvar) { angle-=constvar ; }. w) h3 U) ]: i" l: j; K) z
  136. : s" M& l1 W2 D. y8 ]! o5 ?* c4 i
  137.    return (angle) ;: Q( O! O: m+ c: ^& m/ _9 F" t: @
  138. ( W. S% ]2 ]/ ^0 \6 `
  139. }  e) Q% W1 D) M5 p7 o8 M
  140. 9 x/ W$ Y3 n5 _
  141. //#=============================================================: i) M, P  N0 r7 L

  142. ' r" M) |7 M  G: D- s
  143. double Check360 ( double angle )8 C2 Q" f7 e; d4 e" u
  144. - L  O! H/ d! ~0 w
  145. //#=============================================================( ^2 E9 z1 @5 u7 A" r) k

  146. 8 s. {; `  V% J" a% e
  147. {: ]8 ?( ?# T( W$ u6 o! |
  148. " m/ c) Y- n( ?9 i% j
  149.    while (angle < -360.) { angle+=360. ; }
    8 K4 V6 @, z% W$ k) I

  150. 4 j+ T, V+ b3 r! k0 u) R" b. X  S2 X( @+ l
  151.    while (angle >= 360.) { angle-=360. ; }
    - J7 f4 T, f: N1 _& r
  152. / L9 X+ m& Q9 _% O# F
  153.    return (angle) ;9 b' ~4 \2 y" n) ?5 q
  154.   R! U% V2 |- P+ P, Z+ f' S) t
  155. }+ a3 w; ^! t- Y5 g' s& V
  156. % R# I( c3 U4 ~3 w
  157. //#=============================================================  v. r4 v. f2 i' @! l* ~

  158. 0 l# c, M# P$ s, i- O" v* \
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    " Q  D$ r3 L/ j$ ~! Z/ @( L. l
  160. 3 g4 Y, Q3 z3 A; d0 n
  161. //#=============================================================& [2 |) g1 k( e3 X

  162. 9 A! }2 {6 H$ m8 U( i6 e9 Z
  163. {2 v0 G9 V& b) [) X
  164. 1 k0 h- R: y+ R0 B. V5 Y0 I) ^9 Y1 p  h
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }  s! }) r/ F6 v6 p1 _8 w: M- d

  166. * T% _% _( i8 `+ W( x! U2 M
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }& I/ d7 F7 }' X$ W- N. i( Y& O

  168. & O8 ~' q/ r( m) P
  169.    return (angle) ;- a+ U/ ^1 P% N* K

  170. 9 H- D$ v. \4 `
  171. }
复制代码
; e- K) x7 w, _, M
以下为摇篮5轴计算过程代码
+ V& U* h' Z1 `" p
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);7 Y+ t. f* y. ?9 q8 h

  2. " h( S% P2 o- J  _" @* Z9 ]- e
  3.          j=0.; B1=0.; B0=0.;5 w3 [9 s$ g! Q6 ^2 ~& m& ~) s) S4 h
  4. , P- c0 @% W* K; E5 b. f& {' {
  5.           if (EQ_is_ge(i,0.)) {! y* N( [' V8 _! ~
  6. 4 `+ m3 Z5 R/ h, n
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }/ j4 g1 N' |, Z
  8.   M& `( C, z( O- U
  9.           }
      p) I; [+ @6 S! t" |% K
  10. * r. L: s6 i; _6 e/ S% E; C
  11.           if (EQ_is_lt(i,0.)) {# W! u9 y& m5 @# @6 I/ P0 ~
  12. 1 X- p& g: O7 K. k
  13.              if (EQ_is_lt(k,0.)) {
    9 u" z( ~# C: H5 Y) g; w3 e

  14. , k0 v. h4 K3 n: Z7 _) v
  15.                 B0=atan(i/k); B1=B0+PI ;) O. ?) N$ d8 C7 }0 j

  16. + C% j8 e: v3 k3 d! o6 m9 S
  17.              } else {
    5 @6 B( X; T+ n$ Q4 [4 k0 q

  18. ! L2 p9 P( H: N
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    4 ~) [3 a8 y3 h: |7 R- W  {( z

  20. 3 l9 U( t9 X" |8 ]# I
  21.               B1=2.*PI+B0 ;
    6 o7 t5 Q1 ^/ S2 b9 F2 E

  22. 6 E3 S% f) g7 n) ~- g
  23.              }
    8 a, Y3 p4 X7 \3 G! U( r
  24. ) r: s' I/ f* X4 k9 V
  25.           }
    ; J  y7 O! v  B6 a. `7 V& b

  26. 2 z) W+ z; c: `: T% K3 g
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    5 {, h& N: [1 P7 J" J$ q  `
  28. - f1 D1 n# ~9 ^! I) W) n4 `& y: q, v
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));" _! k( T" a3 C! }+ C

  30. 3 Y1 o% J- _2 I: e( O$ t& c
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    " R  ~/ b4 D  l7 s3 E
  32. 8 g" Z- w9 d! e+ ~  w
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

- m4 J' j$ `: C通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。" }8 b2 u' A) }! x: U, U) g

: K# L, I. J6 \3 m 640.png
1 {+ G4 \0 w0 k' ^( g; o/ N测试结果:
  y4 \/ T; p7 a& K 6420.png
* l% k0 d+ Y: j1 {; A7 Q
- u9 u5 V. c, f) P/ T+ T$ M/ t反向测试结果 6410.png   ]% \% r* p" g) X

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-8-1 07:08 , Processed in 0.188599 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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