找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5168|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
      {+ q% ^/ A# `# P1 L6 J) q
  2. int  EQ_is_ge (double s, double t);
    , a% o$ x7 f) A) w1 C
  3. int  EQ_is_gt (double s, double t);2 C& O, A. f+ f: d, s
  4. int  EQ_is_le (double s, double t);. O% m/ C1 e$ z# D/ d! c, _
  5. int  EQ_is_lt (double s, double t);! x: y% K4 A% h+ }
  6. int  EQ_is_zero (double s);0 J! l4 r; S( A$ X1 G) w, l, T9 A
  7. //=============================================================
    % f2 D. k% A4 ?, V6 n+ r
  8. double ARCTAN1 (double y, double x );
    ' M2 V3 X9 ?0 s2 `8 a. I8 e5 j% l4 g
  9. //#=============================================================
    % V- K" p/ D8 z% o0 y4 b
  10. double ARCTAN2 (double y, double x );! s/ p+ c9 r  i2 V' Z) ^
  11. //#=============================================================
    * F+ Q) L1 c. l* g) U. d% [! v
  12. double CheckConst ( double angle, double constvar  );/ Y7 J" S1 E1 p) K/ F" S! ]; J/ d# ~
  13. //#=============================================================; e2 S( e$ G0 N
  14. double Check360 ( double angle );$ o: M, ~8 S  K$ z( ?
  15. //#=============================================================( d2 C0 ?( \- P$ V9 Q/ H9 }
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ' {; }7 L& V  q9 I
  17. //#=============================================================
复制代码
* |( A" c* h5 }& L
以下为部分源代码,用于判断,计算角度等
1 m" Q" S' W$ g9 `1 j- n
  1. int  EQ_is_equal (double s, double t)
      _& |1 u: u9 ?  S8 p/ k8 A. F

  2. * z7 \0 d/ N3 l
  3. {$ H! x- }6 O& l0 R: v% T  W
  4. 3 x! Z: E$ ~6 \" v# E4 j
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }$ W9 n6 p$ W3 b7 t5 q0 y8 o
  6. + ~/ s8 ]: p/ l2 u$ a% y% \- N
  7. }
    - v7 u* l% c. n7 G0 O4 `# L
  8. ' g, V; N/ z9 e# M- q6 n
  9. /***********************************************************************/7 T$ G6 [8 e. h" z( N1 v: w/ Y" {

  10. : ]" b4 V. J4 n
  11. int  EQ_is_ge (double s, double t)2 M# ]4 H: ?3 |) b

  12. ( ~9 t" M" F8 ?" N; S5 b6 Z
  13. {
    7 v' X3 J$ l3 D; y, w

  14. % y" y. o5 \( P  [* `
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    * Z$ |7 t. x1 o, K# r1 O8 I0 c
  16. , n9 ?+ y( n% D2 t4 [
  17. }
    + ?- ]  g# S# @

  18. 3 Q9 b: G; t/ p) F$ U3 C
  19. /***********************************************************************/' I4 @, V/ j( l( i
  20. , p+ f% y7 a' y2 t! {
  21. int  EQ_is_gt (double s, double t)# ]$ u9 r; Z5 p, g+ j/ I) p8 k

  22. 3 r7 m8 q$ i* Q% I# Y+ [, A8 o
  23. {# U' w$ {1 B% |; R8 c! K
  24. % e7 l( {8 M7 D: \. ]+ N$ t) q4 b2 D
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }* J3 d0 r5 i. H

  26. . z. H7 E* I5 D
  27. }+ m1 m% m9 C6 U1 S& ]9 P+ x/ I

  28. 2 n6 ?3 Y" o3 k" {
  29. /***********************************************************************/
    * k! f- H: P7 M, v8 F0 G& d
  30. 9 \) e5 j4 b$ U, r+ L0 I
  31. int  EQ_is_le (double s, double t)% w& X  q, g2 B& o* ]8 |1 D; ~
  32. * C  e% S7 B% [+ C- R5 u
  33. {. Q; d/ r% N4 }* X, B& T
  34. % d, X; h- @% I, Y" S
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }# @" ~0 [9 d  B+ j# |
  36. * y& m6 r4 ~  o8 D2 y' F0 I
  37. }! {2 x/ j+ h5 ^" W! Q* _
  38.   k# e1 \& y3 ^* S/ ?1 ]
  39. /***********************************************************************/8 v0 K0 v- q9 C
  40. * K+ U2 M+ y0 d
  41. int  EQ_is_lt (double s, double t)
    ; p" z9 E+ b# f8 i
  42. 3 y3 Z% U  ]' A! W
  43. {. D/ L) I# ?! V, D& Y

  44. . u2 q1 a. R2 s
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    8 Y3 Y! m! z; a# T+ T3 F1 S5 ]  R
  46.   Y+ v0 R6 n& p7 P0 a: j
  47. }4 e: N3 k: ?% Y/ g% ^& n
  48. 3 d2 s  k, f* y9 _
  49. /***********************************************************************/
    % b% P$ {1 |- K- J( e# Q5 P
  50. ( o- h' a: {2 {
  51. int  EQ_is_zero (double s)+ M. @7 ^2 z. D6 P

  52. 5 K  w0 M' q& m# _( k$ y
  53. {
    + P# A0 R& f# k

  54. 6 \" Z5 h, W/ b5 s
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    ) x& w1 v/ }& s/ j  x# v

  56. & h/ v7 x* l  C$ I8 Q8 z, M
  57. }
    , }- w# y2 O; `  ~$ ]4 ]0 Q5 J
  58. 7 k5 T# p+ u  Y4 ^0 t, }7 h$ n
  59. //=============================================================8 t# u" M+ B& u2 y$ F

  60. 0 u# B1 n$ d- G9 \
  61. double ARCTAN1 (double y, double x )
    : Q5 m( K: U8 a2 `" m1 w

  62. / }3 q* M$ J) b* `# x' v3 |
  63. //#=============================================================
    ( [1 b6 S  V  s1 v, T7 r- u
  64. . o" K$ g( ]! }: `& m8 ?. V
  65. {
    * h4 `1 e$ k. w" d

  66. 7 K8 _/ v3 ]% S2 P) b5 S, h
  67.    double ang;
    + }+ o2 }% ?# j$ r

  68. 5 ?- P" l7 X# W( X) `6 ~
  69.    if (EQ_is_zero(y)) { y=0; }! o, X; P( F3 A

  70. 2 n2 [" ?. z8 O- {9 C  F
  71.    if (EQ_is_zero(x)) { x=0; }3 m) K: s; W" u9 c5 k5 `

  72. # @2 K' b+ l  e0 _3 o
  73.    if (y == 0 && x == 0) { return(0); }& k# M- E. _. ^2 `! G+ |

  74. 9 u; D+ H  H* o
  75.    ang=atan2(y,x);
    4 s# |7 P+ B9 E/ H; q/ S1 q

  76. $ B: p, [! L& Y* S
  77.    if (ang < 0 ) {/ x- \: f+ G7 d5 @) ~
  78. 7 s: ^' H  |2 b7 D% ~: [
  79.       return(ang + PI*2);
    " _( s0 R: x+ R% H# q

  80. * A) l$ G7 {+ ^& T
  81.    }4 s. c! O6 u8 f& ?/ M

  82. + K9 I& e! x1 K$ w) b# \
  83.    return(ang);9 a& g1 z- |- e/ o4 e* n3 Q

  84. 0 ]4 T3 `# S' @6 W9 ^
  85. }8 h. B- Y, B0 j! M2 N

  86.   ?/ m9 G  T8 u! c! A9 {7 t: m
  87. //#=============================================================. N4 X3 R+ u" M3 T

  88. " F; V8 e& }& T1 @) x/ M# w
  89. double ARCTAN2 (double y, double x )
    / N, W6 R+ n9 G' X! W" b
  90. , x5 |9 T4 F, N. q  f% v0 A5 E7 {! C
  91. //#=============================================================
    0 W( r2 h+ R0 g( e: X4 f9 c7 Q
  92. + F3 b9 s- K% w! g
  93. {
    * _& Q- ^1 ~# Z  s% k

  94. " F& E- h8 N8 t" Y; d; o
  95.    double ang;$ B; I! a4 k+ {- c/ M
  96. 8 y- b" O0 R, K4 ~, |. ^: G1 ?
  97.    if (EQ_is_zero(y)) {
    & N& G/ M5 q6 q- P

  98. % y3 t2 Q! t* J& @. i4 S
  99.       if (x < 0.0) { return (PI); }
    5 f+ G: d7 r- [2 q, ]  F9 \
  100. 5 G0 v6 z0 y; A2 T4 H. c; y
  101.       return (0.0);
    " {: h& j+ e3 M: F+ d/ @# ^

  102. # m" t# j; T4 ^# T) ]3 P/ s" s
  103.    }
    ! \6 E( v+ R! J

  104. 1 [$ N) u: D! Q& ]2 }8 f& ]$ s
  105.    if (EQ_is_zero(x)) {- g9 \* |: V  Z3 q- w  d" H

  106. 2 v( n( y1 U: k+ R- Q$ C) o" @& A
  107.       if (y < 0.0) { return(PI*1.5); }, L9 [  ]3 J4 `3 D( K' n
  108. 1 P7 o# R$ W6 w% L! D
  109.       return(PI*.5);
    0 M$ L0 Y3 w7 Y6 q! b

  110. ' e' d* j" u. F; \# f
  111.    }
    - t* Y9 {6 Q; F; t8 h+ t) S- t

  112. 8 ?& Z( {( W% x9 p) u
  113.    ang=atan(y/x);% ^9 B5 |- C/ w
  114. . K8 e! K* h0 ~# ?1 D# k$ |
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }" e+ h- w5 G: q* J- @# K

  116. 3 ?# |8 l: ]& ?* z
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    . J5 P: y$ ~$ h
  118. " l; x; ?5 h  M* m2 V
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    " K$ {  W, t, z- A

  120. + X% p3 Z) u7 ^* ]9 y
  121.    return(ang);, k+ A+ ~. D( ?; g( x5 J

  122. 4 q" u5 \) I( H
  123. }' u5 y3 P% L! o7 B$ G  _$ l& Z1 ~

  124. 4 Q( k7 q+ a' o* ]' Y' K$ t
  125. //#=============================================================
    * \" e. p3 W3 U

  126. / F, u/ ~/ C2 E  z
  127. double CheckConst ( double angle, double constvar  )
    2 L9 m& d6 J8 J+ W$ v+ k7 q

  128. ) @( S" _5 P4 n& T8 H  f
  129. //#=============================================================
    ( g3 z/ I8 G' s0 o0 m
  130. : {) p+ p+ u- c6 b4 q" ?
  131. {# O% i3 B' q$ z- k8 n* [

  132. ! E. j  _! J8 p4 T! e$ h7 H( G
  133.    while (angle < -constvar) { angle+=constvar ; }
    1 B( w0 f7 }8 `' D

  134. , I/ ?, K- m7 i( m, [! S! D
  135.    while (angle >= constvar) { angle-=constvar ; }
    2 G, b4 i' u3 ]" R; f, J0 w
  136. # [* e) \$ e. D  _3 A
  137.    return (angle) ;
    & b6 S1 E8 f+ u% k

  138. * J3 i- J; O" {) u* s! Z+ i
  139. }
    2 ]5 n) s2 }, ^2 x  ?
  140. * u, K1 F- O: Y5 W6 c: x
  141. //#=============================================================
    + X" @' ]: U+ B/ z

  142. ) Q6 H0 r# A3 l, |
  143. double Check360 ( double angle )' ]0 [; R- E; D* H9 a( ^
  144. , ^7 e, E7 y( t; {) E
  145. //#=============================================================0 a4 m. Z& q+ ^8 r
  146. - y' H0 {- o' q" x8 V
  147. {
    7 E: `: _/ q& c2 r" z1 n/ N% }, |$ X
  148. * v/ [9 \8 q1 G; w+ i
  149.    while (angle < -360.) { angle+=360. ; }
    , e2 i& W4 [! G& h! W7 b, H) q) S

  150.   G: n6 H5 v" t$ u8 t5 G
  151.    while (angle >= 360.) { angle-=360. ; }! @; v0 J& Z5 E& u2 S

  152. ( b) `% \7 d& T/ u6 a
  153.    return (angle) ;" z7 J$ c  K9 Y6 k6 h+ Y) C+ j
  154. # t8 e& J+ P4 U
  155. }
    % S# w( h, \. Y1 n. n+ B- e2 U0 F' u
  156. * @, C( x& w1 ?  ^+ z3 _
  157. //#=============================================================
    . M* o2 }  ~) y

  158. 8 k5 j  [9 {/ f. V" l. p; ^2 T
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )+ f& I& x0 R- T* O3 W: z) i8 l
  160. % M6 T+ A6 R! A: v* z% o: b* H
  161. //#=============================================================. F& a5 ^( K( {  T3 M

  162. 5 T( e, u+ v3 e
  163. {7 {- m* G. f% m# [' y% X

  164. ! }! u" Z5 I) }1 y! u
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }, P  j2 g7 ^1 ]- v( z! U/ m/ Y: U

  166. 9 I3 j! ]0 v& G) h
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }: a2 t% F. c' |: C+ W# `

  168. 6 y- d% K& ?) `- E
  169.    return (angle) ;/ i1 a6 H$ ^+ F1 ^+ f5 Q( }

  170. . i8 i/ A+ E1 Z  d3 _  U# m
  171. }
复制代码

. o. \3 E7 K& `! p3 z7 ^以下为摇篮5轴计算过程代码7 o% p! U8 Q5 Z
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    ( `+ B0 D8 E$ X4 ]% P
  2. / W" O: |" [1 ^; o* X  y, J
  3.          j=0.; B1=0.; B0=0.;
    8 h. R: f! c0 b8 `
  4. : c6 X& N2 f# i' }5 a" }
  5.           if (EQ_is_ge(i,0.)) {$ p' B$ w) F- ]; h, A
  6. 8 j6 R) Q1 t: @, E6 B7 f
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    # h+ T# |" M( A0 t0 i. ]
  8. 4 U( w7 T- x1 Q" W* e) ?" M5 g0 F9 {
  9.           }7 J# U3 q" R) h
  10. 2 H# d" F( ^- C; Z
  11.           if (EQ_is_lt(i,0.)) {
    ' \1 n( G& I+ S! H3 s  \* U8 A( L

  12. ( f* Y+ m  A# Y/ v
  13.              if (EQ_is_lt(k,0.)) {& W9 B1 j% t+ ]9 I& A- m: x. U

  14. ! U' c' ~1 T7 j5 b# ]1 H' V
  15.                 B0=atan(i/k); B1=B0+PI ;0 o, c6 W, E- K5 {* M* p
  16. ' L* T9 a) G4 W5 G
  17.              } else {- K+ {% m# p7 s& x
  18. 3 B& s, c( ~, o+ V( ~
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }" u9 u8 b, O; T) X' B7 ?% \4 T* B

  20. . G4 Y7 q+ |$ P% H: A
  21.               B1=2.*PI+B0 ;  k# ^7 c! w" j4 F6 ]; S9 E
  22. $ J; g- H9 h: b
  23.              }, J, _0 k# u( M- V1 D: m! e7 C

  24. 6 q4 m7 `, k) n4 n" z
  25.           }
    ( O# }1 B( ?. M1 u) \! m( K; m
  26. 6 T( n( Z- \: _9 C, j
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    1 F4 v' h  y1 o( e
  28. ( ]4 c3 F+ w8 b' `7 w
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ; p, @; s8 Z9 A
  30. % A  u  D' n) a4 N: K
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;. g' L) W$ h: e8 g9 v

  32. 7 y1 _) p$ ]; `3 T8 ?9 i
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
* y8 j- o0 @6 Q6 Y
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。) g& J7 i6 L6 a6 j5 ?: r- D

4 z& D- ?) F3 w6 m 640.png ! M+ S7 a, ?6 V
测试结果:1 z  c+ f: x$ o5 K; {
6420.png
/ u4 [& S' q# P% m% {' P5 d# y* _( s" z
反向测试结果 6410.png
( T; T/ C! \7 H+ W

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

324

积分

中级会员

积分
324
发表于 6 天前 | 显示全部楼层
谢谢分享
回复

使用道具 举报

1

主题

136

回帖

157

积分

注册会员

积分
157
发表于 6 天前 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-10-21 07:53 , Processed in 0.231296 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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