找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13751|回复: 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);
    ' R* w; b" z- m$ F4 b; n: K
  2. int  EQ_is_ge (double s, double t);1 E( O4 C( w; L! \
  3. int  EQ_is_gt (double s, double t);# l1 ]: l, G' B3 Z6 l! l. t
  4. int  EQ_is_le (double s, double t);
    8 [/ e7 n6 L2 r8 m' f* e5 D
  5. int  EQ_is_lt (double s, double t);- t& A! u! X/ B
  6. int  EQ_is_zero (double s);
    1 n& `- `! e1 k' t# \7 ^4 u1 ^
  7. //=============================================================
    % [0 q! n: E* Z9 R/ N; n3 h
  8. double ARCTAN1 (double y, double x );- m% I0 @1 r& \# j) D4 ]$ H
  9. //#=============================================================/ G: J% s+ E' o* f' }4 f
  10. double ARCTAN2 (double y, double x );: N  D# T+ Y& O, \0 Z5 `! n) f9 m
  11. //#=============================================================
    4 y1 s$ y' W# ^
  12. double CheckConst ( double angle, double constvar  );) o( z* f6 C; w* R2 G
  13. //#=============================================================
    2 v+ s4 W, C- A) R( [* m
  14. double Check360 ( double angle );* }$ @6 u+ L* `" d9 ^+ `! }
  15. //#=============================================================
    9 F( e% N: e/ \2 K  F  s# u
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    - h! ]2 M' _+ o  U5 V
  17. //#=============================================================
复制代码

: y* n! Q, F0 u( P. {7 L以下为部分源代码,用于判断,计算角度等2 i/ I  [* ?; X/ D8 |5 c
  1. int  EQ_is_equal (double s, double t)* O- p0 m8 Z4 ^8 W

  2. 2 r) M! x6 F  A) ]
  3. {
    0 }4 A0 o$ L$ j+ s" d  j  ~
  4. 2 _3 ~# D4 f* }
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    8 |) T2 _! }- o( |

  6. ' s/ P& r2 z/ q& {. ]
  7. }
    8 m7 o" r8 C3 y" Q

  8. : ]' Q8 C. `: I; C, V1 O4 o6 C
  9. /***********************************************************************/
    # L3 x8 N  X4 [& x7 ?

  10. % u% w$ f) h5 {
  11. int  EQ_is_ge (double s, double t)# o8 g$ P- ^- S: N. ~. t4 z

  12. $ U+ u2 g3 l0 z3 Q' t; H
  13. {) p' v- ]; ^. |" _, I

  14. 9 o, M, `0 u/ `
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }+ P, D) x+ E  t) u, i
  16. ; g+ J; C0 O3 e% N/ |7 _% ?, K
  17. }
    4 ]) u0 R* n( ?, U, O: J

  18. 2 C# B/ D7 p  r; y7 T) V- l) y( R
  19. /***********************************************************************/
    & T, [3 m2 z' P% x) {2 W" ?8 y

  20. . f' v4 m. J" u5 t
  21. int  EQ_is_gt (double s, double t)
    $ v, U" n- q% E& P1 m

  22.   E) c) E) L8 k: F& b
  23. {
    $ r. y6 M1 Y  `/ _8 T/ s7 B. P

  24. * `' T- V9 H0 m2 M3 Z% e
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    + p. ?! X6 k8 |, Q: P# L, v: ?# e
  26. 1 V4 M- \/ R9 U0 O# w3 U( N
  27. }7 D4 t. f% `, z" O! G" O; V
  28. , A* N# g/ k' S! q
  29. /***********************************************************************/. `2 }1 u, K! n7 A4 v/ C

  30. / o6 z, u4 L, D0 X8 ?) {" V& a: _& m
  31. int  EQ_is_le (double s, double t)
    5 `' r3 u" F. n6 }3 V5 E6 u& G7 I( k
  32. 1 |- C- e4 k3 A) Y& f$ A; u
  33. {
    0 d7 L  P- {) H9 c7 H

  34. 2 t7 }5 @2 x9 z2 E; j
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    ! S. [) @# g- C0 ?( j1 ^! U

  36.   V4 H/ l) \8 S* d8 R& \# X; W
  37. }
    ( g9 y) Q3 C. H( y# k1 |# i

  38. 0 {* Y% O' L8 G: `8 C
  39. /***********************************************************************/
    ; L1 V) T0 }9 ]: t

  40. 7 M3 |/ h6 ^9 I* S$ R4 f0 B( X
  41. int  EQ_is_lt (double s, double t)* G5 ^' h' c' `6 o

  42. : i$ I% K$ }/ ~3 G" |( B
  43. {
    0 z! V7 o- y: J9 z+ f
  44. 1 g; m7 S* c4 Q$ N9 L
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }! J! l5 X1 n' _, v

  46. 0 t; ^0 a3 y0 [* u
  47. }; h4 {3 [! _0 N; x: j
  48.   B' g7 _- X$ |4 ~/ b
  49. /***********************************************************************/+ f# C! P1 ?  a
  50. 4 Y5 ^3 c  Q- ]3 E
  51. int  EQ_is_zero (double s): @6 @) ]8 K9 G" m/ q+ n) j2 C3 I: [

  52. 5 i: V3 S0 y3 `, H) t
  53. {
    2 y5 J- c# i+ R5 d2 c8 g2 x+ m
  54. 4 ^& J0 p! G  J1 j
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    , i1 p( w- C' h! n5 i. a( N: D' G
  56. 2 U5 w& U; w- F" Z8 V
  57. }
    . m) m0 ]) d$ Q' v# ~: B: g* ]

  58. / p8 o- M3 h$ {
  59. //=============================================================
    2 J3 b$ i+ `& b5 N  b6 v' ~
  60. " i: B5 B1 D* L; ]( n0 d
  61. double ARCTAN1 (double y, double x )4 _) j* W, ~- ^' G- Q
  62. 9 J% l  W1 X: C4 x0 K1 \5 ]& ?. q
  63. //#=============================================================
    ' H( @7 _) T) x) r  d

  64. & e( _5 R" g" m/ j6 U
  65. {
    + g! X3 b8 `; T) t, n
  66. 3 N0 H& D7 c; T" K
  67.    double ang;9 o- x* }+ V  Q% H' l/ R1 n

  68. : q2 c% J8 J+ C
  69.    if (EQ_is_zero(y)) { y=0; }6 o4 w; [2 {* m8 X7 N! {0 ?

  70.   O  j+ X' U9 H
  71.    if (EQ_is_zero(x)) { x=0; }
    " d+ D' N6 O# ?( I$ N
  72.   G4 s7 @( D( P
  73.    if (y == 0 && x == 0) { return(0); }/ y  c; f1 \- O: ?6 L2 m2 x
  74. . ?4 j. @7 u  W. I! o+ [- S
  75.    ang=atan2(y,x);$ C: _. q' W- T  r+ b& e

  76. - g) u& p3 b) B
  77.    if (ang < 0 ) {% i3 M0 K: L; R: a5 ~

  78. 9 m6 T3 I6 A( h; ]9 M0 e
  79.       return(ang + PI*2);
    + U" M6 b" O/ e. L" c7 C9 ~

  80. ; X( M4 c* o+ x. N! J3 ~
  81.    }
    5 o" s1 r5 U% r6 I7 Z

  82. 6 N8 E. O$ W5 R( T3 c' W. _
  83.    return(ang);3 g( [: q! h* [: J7 x
  84. , y4 C. I7 d6 a
  85. }$ y! B4 g0 W  W2 |, d) d

  86. * _0 `( [; B4 `- N. ^9 V5 ]0 \4 U) V
  87. //#=============================================================: v& K: N) S& {  c" f

  88. ( Z& [1 b/ o) C2 R7 v
  89. double ARCTAN2 (double y, double x )3 k$ R4 |- d1 E  P

  90. 5 b1 w% v+ f( ]6 ~9 {- j6 i
  91. //#=============================================================9 X# M/ i; c1 J/ y7 k& @# r

  92. 2 o8 u9 y7 t. j& w
  93. {7 ^* O" x% o  c% w, O1 c& g
  94. 8 R; A6 b8 z) l- p0 q
  95.    double ang;
    + e- V) W& E' {5 D3 S, `
  96. * f% Z2 T! x7 \
  97.    if (EQ_is_zero(y)) {
    , v4 D4 D( E$ `( A' @
  98. : a$ q$ W" w! `- M, J3 j7 |
  99.       if (x < 0.0) { return (PI); }
    & W1 ~" v+ |/ J. `. F. ?
  100. 8 Q+ ^& ?- S6 k" [  A& P$ j
  101.       return (0.0);8 Z% I2 T& e+ u' e7 O! Z+ K
  102. ! m4 @4 n$ q& F
  103.    }
    8 P; C1 Y. v5 r( r: D

  104. + H& r- W; @; F$ n$ [
  105.    if (EQ_is_zero(x)) {
    ' }( Q8 K# G0 |3 L7 E; e+ `: @3 l4 a
  106. ; E# N- X- C: h! d# s
  107.       if (y < 0.0) { return(PI*1.5); }7 X# i: t: n  Q% f

  108. 0 p/ M* s" P; ?3 C! F/ s9 A6 _
  109.       return(PI*.5);$ H! s) X9 u; b. c, i
  110. ! v* H( K$ _4 n6 o
  111.    }5 L! f" a  k7 P! V: T* k5 S! E
  112. 4 y7 C& @' L' d) B
  113.    ang=atan(y/x);+ A4 ?8 R' D! @$ s) u+ ~2 H7 H  Z
  114. 5 C% K) q6 {1 }2 z6 v
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    * B( ^5 n: X8 R' P+ e( a8 m7 O

  116. * D* n% Z) C* b) U; }, ?4 L7 L
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }- k& C# w$ q* G2 W' j* t7 \- {* K
  118. 2 o% @/ `. U4 ?! @$ E* \4 Q" p; ?
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    2 E6 s/ v6 q2 b
  120. ' z7 X9 n" O& Z" i
  121.    return(ang);% [  L. [7 V% `# n

  122. & `7 I# p$ K5 J
  123. }
    ' ?1 O8 x' B: g! ?
  124. * I4 ?5 t, v" J; b$ M+ k
  125. //#=============================================================" c  V6 m0 X5 `( v1 _* R

  126. 2 J- N8 M, P- o- U: R: r, ~
  127. double CheckConst ( double angle, double constvar  )4 p# w" r# V* U4 a  a
  128. 9 Q( x5 }& c; i. ~1 `4 ?% ]+ x; q' h
  129. //#=============================================================  W) j0 r7 E2 x9 j0 u

  130. ) W' B/ R' v0 j/ F3 x
  131. {8 [5 N/ Z/ z' S2 b3 @- c+ i/ R

  132. 8 y2 i$ G% i. k& ^9 K. B
  133.    while (angle < -constvar) { angle+=constvar ; }
    7 @6 {  b$ D+ E* @3 p4 e' I+ Z
  134. 4 @- E- Z& |) H* G* z1 y. O1 f  x
  135.    while (angle >= constvar) { angle-=constvar ; }5 s( z& }  i) R! ~( U
  136. 9 q8 b7 V4 M4 W6 f% v
  137.    return (angle) ;
    4 x1 ?8 ]/ i5 n
  138. # K+ V/ h. q6 `) S. z
  139. }( I: }* c0 Q. s% O  g# Y) P8 I
  140. " [2 x3 @" U2 Y" q& b% S2 L5 p
  141. //#=============================================================
    + e  H7 @0 d0 ^* H/ W

  142. 8 I% M' }, f# x" h- Z: r
  143. double Check360 ( double angle )
    ' z" p  S  P" Q4 g# a

  144. " q; _$ ^3 [% o7 \, B3 c6 e- N
  145. //#=============================================================
    0 [7 Y$ F$ w  N. d8 z
  146. . u: m( g: ]" t
  147. {
    2 Q  S7 g/ d, H! s' {+ [
  148.   D2 B% X: o5 q/ m* w9 @
  149.    while (angle < -360.) { angle+=360. ; }5 M6 M1 X; [8 `) y7 h; }# M
  150. % b$ O" x# b/ M$ d+ M- ~
  151.    while (angle >= 360.) { angle-=360. ; }, l! f- }6 i  J! k- L
  152. 0 j  \# n  r! C$ X) G! W2 r
  153.    return (angle) ;5 E6 J) I7 ~: s  E% t2 `

  154. & x$ Y8 u/ S: X8 l& j7 A
  155. }
    4 t! B9 @0 Y' V) U7 D7 r

  156. ! q" @& O# U3 P0 E! C: n. T
  157. //#=============================================================" v) @8 m) v$ ?8 ]  y

  158. 3 K' b  E, L$ i$ C* o
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )& X" o0 [7 o9 b/ D

  160. 8 A2 S% ~1 f/ R* A8 [# P, _
  161. //#=============================================================
    ' s0 g, {! M; }

  162. & \, L2 @9 X8 K' O3 v, o
  163. {
    * o* N% t  ]& Y( M7 I# x6 D
  164. / k/ |+ |! L$ ^3 Z
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    8 d" ?6 y9 f1 F. z

  166. 2 ~& k; C8 r7 ?1 Q( f) v
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    9 l+ O5 ]) {4 {! ]* @1 c
  168. ; S$ }/ S; y- @% H5 K
  169.    return (angle) ;
    $ R) U5 M* \" A& `6 w
  170. 6 }# X" a" s( c4 R7 ~3 E$ i
  171. }
复制代码
- }6 G5 a2 ]# @; k6 f; H
以下为摇篮5轴计算过程代码
, {) `9 D4 e/ E5 T1 d
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
      Z1 K% X$ T( ]* Y
  2. 6 ^  f% X! s' a4 t! |  T
  3.          j=0.; B1=0.; B0=0.;4 ~6 @7 L5 s# T6 ^. {( G$ k

  4. / s( ^* F' B& Z, H4 f- k& [
  5.           if (EQ_is_ge(i,0.)) {
    & b) m  D8 o( P+ A! a' Y& Z
  6. . H% K' @4 K6 \& I) ~( F( C
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }; L$ b! ]) `$ v# {

  8. & v# d8 @8 ?6 j# I6 ]
  9.           }
    ( }( o4 G5 P( q" T, L. c
  10.   \  Z3 j7 x: f4 U7 v- y
  11.           if (EQ_is_lt(i,0.)) {
    , v% s* @  ]6 _3 Y0 h

  12. + t. I- y# q9 k
  13.              if (EQ_is_lt(k,0.)) {
    * _0 [  R8 ]- I8 C) R9 p7 s* M9 [; r

  14. : R& [' N6 |2 I& B5 `6 W7 y5 G
  15.                 B0=atan(i/k); B1=B0+PI ;
    % y" r/ H) R  {! c# t
  16. - P. N( Z3 H0 o2 K
  17.              } else {
      n: P5 f. F% A! J
  18. 5 Y8 u" L6 p- B4 K1 z
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    - T, @2 O7 q* d' R3 I8 {

  20. ; N" o( b4 H2 y6 o
  21.               B1=2.*PI+B0 ;; \/ c' D  ?9 c" s& ?
  22. 9 f% G7 U* T* {# y
  23.              }1 h( K5 H, B# b9 j5 d( I" ?
  24. & Z  k6 v( C% f2 J0 f* T. b! K
  25.           }: i- b2 R3 a: v# J

  26. 2 d; I: N8 `8 S# ?
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;: [' k9 T) D* d! [. e6 z

  28. ' M* V- |' S6 V, A7 I+ M* ~
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    9 F! m  |, s% I5 |( ^

  30. * n$ |# o* C3 f0 I- a4 x2 ^8 A3 y
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    1 s+ H, F  b6 q2 s! m
  32. ; e) z) a% z: o+ j3 i6 |9 Z
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
8 K, c8 w% d7 X) _- j" l+ @+ s
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。  ^- a' Q7 T* B! r% K8 T) s0 ^
4 B7 N2 F8 p# a& J- I. a
640.png
, K3 k. @; U0 v6 b测试结果:
% N& N- a5 B3 i, K4 \; y1 D( q' ] 6420.png
7 h. u) S  a  t* _: @) ^+ ^6 G+ v$ Q9 Y! }% M
反向测试结果 6410.png $ r  U1 v( |8 v* i5 {8 R

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

377

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-11-6 20:32 , Processed in 0.252107 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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