找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13743|回复: 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);* Z4 \! f! d6 p& o" m) Y" h" x
  2. int  EQ_is_ge (double s, double t);; d4 V" W$ Y' z& M% J
  3. int  EQ_is_gt (double s, double t);& \( A  K/ K0 W9 E! N  [1 b, I
  4. int  EQ_is_le (double s, double t);
    1 R$ T, t& G, O, @+ O* g* Q
  5. int  EQ_is_lt (double s, double t);: S3 J8 U' Q9 [5 R  Q1 b% X
  6. int  EQ_is_zero (double s);
    3 @# Q* ?3 X* h) U6 \" K' U
  7. //=============================================================; R3 e$ C" I" H2 g1 a
  8. double ARCTAN1 (double y, double x );
    / `. O/ ]6 L4 k% p) `
  9. //#=============================================================
    9 P0 z( b5 F8 ?, w
  10. double ARCTAN2 (double y, double x );
    " P; E3 ~0 a3 _" ~: R. ~
  11. //#=============================================================$ W  F% H7 n( s
  12. double CheckConst ( double angle, double constvar  );0 i. ~' a: n1 Q& |
  13. //#=============================================================
    " ^4 b- {: n5 a
  14. double Check360 ( double angle );, D( Q2 r$ k) }# g( c
  15. //#=============================================================
    6 @; N# D# |  c
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    " W7 x8 ~$ c3 \
  17. //#=============================================================
复制代码

4 Y3 R$ F  D* y: |5 k! Y以下为部分源代码,用于判断,计算角度等
: l3 C- T: N0 X9 D* w; D1 i* A
  1. int  EQ_is_equal (double s, double t)
    & h0 i% r5 I6 A. @/ ^9 ]

  2. * r( M! B3 h' o0 X( H8 ?
  3. {
    1 p3 J7 x7 B. Y: D/ p
  4. 4 p, N+ z. p5 \9 G3 T
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }% B7 d" u" N7 M4 n
  6. * F9 I" F; D$ F% q+ g: Q4 \+ E
  7. }( h3 \) K( F5 a6 n
  8. % }" x9 m! V) R2 h- L& A8 d
  9. /***********************************************************************/
    4 o- ]3 U( G8 P- V! F3 f& G6 N
  10. 0 g/ d: y9 y  V# p% a" `" I
  11. int  EQ_is_ge (double s, double t)" @$ e1 G8 d" {" A& Z2 d
  12. 7 h! T. i6 _. \5 x8 \
  13. {
    / `# B' h6 N, h, }7 E# z/ D- r7 d

  14. + ~' ?0 q% D; k0 H7 G) A1 J6 I; S
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }! n8 F- {) b5 @2 C6 N1 o+ T* m

  16. * {) ]9 x! o3 l
  17. }
    + J- F8 ^  U, ?& d7 k/ `
  18. 5 q# N( C2 j0 A$ Q4 [
  19. /***********************************************************************/
    4 g5 C# V; l4 B( E
  20.   I1 z) I, I1 r* C& _3 }9 }; X$ V/ M
  21. int  EQ_is_gt (double s, double t)
    : d. z$ v+ _8 Q" g  k

  22. & ?$ K3 u$ w& V* I- }" m
  23. {
    7 M1 F3 v2 c; `# n
  24. - D1 F) p' f0 l0 S, y9 S) ^
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
    ( ~$ W% r: w2 l# b) e8 Q) E

  26. 0 N, V3 r$ ~! t8 v0 d
  27. }) c+ ]* V7 {, O, B( B
  28. 8 U3 _8 z" l$ }" X6 E
  29. /***********************************************************************/
    - y6 X; g0 I* ]: L

  30. # S$ n& A: O3 [
  31. int  EQ_is_le (double s, double t)
    + C- O. q# y- y% l6 h2 {' |; S; y

  32. $ L: ?+ {8 Y5 S3 ]3 s
  33. {+ h0 c9 _/ U- u0 l4 W2 s. J
  34. * U& ~7 r3 y( d( X  h
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }5 S9 x* g: o" I/ w

  36. & i# K' ^4 A. Z+ G6 N! a
  37. }, g2 P& @3 [& U9 y8 O6 S9 N7 }# i  ?
  38. 1 l& M* k" W7 v& |
  39. /***********************************************************************/7 f/ y; d' A! X" O
  40. , m5 [3 s( Q- e4 f, U$ k7 J
  41. int  EQ_is_lt (double s, double t)
    * U6 D! N. j: G( r% `

  42. ! a: z( U% W/ T! Q
  43. {
    9 b- ?' D9 K, P5 E9 X  y
  44. 8 f' ^. H4 S" P9 T' P) }. k
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }9 n8 G% b% K5 N. m* G# ], O

  46. " q3 T: X. p7 w9 Z# ]' O2 l
  47. }
    8 X0 c5 n' E! S# I

  48. & p( l  i7 `$ Q# q" N; Q
  49. /***********************************************************************/8 x6 k6 B+ U$ ^, t/ A

  50. ) [9 C, J" }# Q1 ^* r  A* n
  51. int  EQ_is_zero (double s)& L4 h1 r$ F" q! Z! G4 H! v! L) A8 G

  52. ! t9 K5 a; z0 G7 y. ^
  53. {) o8 F5 h( Q3 H: X4 @7 ^+ @8 Q& l

  54. 4 a  z) J" V1 X. x* u
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }" X) S8 k+ N& }" K% x1 }

  56. : M0 h; W: v' z- d! t: z  q
  57. }) |" l0 t- n; G9 W
  58.   {* M9 d) C' p
  59. //=============================================================' j: p8 {' F+ r1 J/ S9 x: [9 D

  60. 2 ?: a! Q! z' w6 \
  61. double ARCTAN1 (double y, double x )* J& e$ H! h& f0 s, x# b

  62. . q$ e: Z8 m# ^- p' F
  63. //#=============================================================
    ; a( m+ y" T- X( m

  64. ) L) d) l9 C( M3 J( o, }
  65. {& J; l8 M% r' a; F6 w
  66. / A! ?* c4 r% }' R& G
  67.    double ang;
    ( q% s- v% C' z: A, q

  68. % k5 t- l& r0 F. T7 z+ M5 W- N# {0 E. T
  69.    if (EQ_is_zero(y)) { y=0; }% p' V5 Q4 f, u( A; j# E% [

  70.   j1 R2 J& q& D. {
  71.    if (EQ_is_zero(x)) { x=0; }) v6 W# g4 Y) o( j: d, f

  72. ! U. i$ P4 `$ X- [! }
  73.    if (y == 0 && x == 0) { return(0); }
    4 |: D9 c5 P6 {5 x; Q' a) v4 _$ Y
  74. - ?$ [& S! m- |+ k& f2 F/ a7 S9 @/ D
  75.    ang=atan2(y,x);+ q/ M' N  I1 `5 v4 w, u

  76. " c6 E: D3 ~. s% b( H/ Y+ ^. T3 _
  77.    if (ang < 0 ) {
    4 I/ Y6 a9 ]! U4 J
  78. 9 L# |6 }2 A4 @- ]' M$ [  }
  79.       return(ang + PI*2);! \0 V9 A& p. J: f4 Q5 @: Z
  80. $ g# R0 b2 k  r( p" u3 H7 O
  81.    }" T, @* e1 p+ J4 C5 X
  82. * J* p1 }, M) [2 O+ ^
  83.    return(ang);) D2 b# _. o9 H/ P% ], D

  84. ' q4 E' w  W3 h
  85. }
    3 Q  K' T* Z/ ~) R" c9 B- T' q

  86. 5 C4 Z7 h1 j, A
  87. //#=============================================================" P0 Y! @' C8 G/ X. d( ~

  88. & V, m0 }' d) g$ g3 G0 y' j
  89. double ARCTAN2 (double y, double x )
    , V- t. O" u( F
  90. 6 X) G: A+ ~6 [! x+ S3 O0 ]/ Y5 X, m" Q
  91. //#=============================================================
    % z8 A9 @9 m% A* t/ K
  92. 5 P. h3 E. @8 J& W. y- c
  93. {
    - q2 A, `  L% n+ ~
  94. 2 i2 k0 d- r$ d# w3 t$ z6 e0 P
  95.    double ang;
    5 e8 l: d: P4 v* H

  96. 1 D7 a! s, o/ O1 V4 |% O
  97.    if (EQ_is_zero(y)) {2 S* Q% P7 s3 p. J1 H8 M$ h

  98. ( Y( c$ [. \3 P  T0 ^
  99.       if (x < 0.0) { return (PI); }; P/ j! ?$ Q  [8 ]% {+ V; z
  100. ' M1 x0 _9 D/ z' ^: a2 S+ y
  101.       return (0.0);3 R( F1 B: U' ~- s$ l6 z

  102. 5 Y) s0 p0 U0 o- q% h' X
  103.    }" J& ?% M; f# e* G  x3 O7 h
  104. # L) r0 |) o9 [4 A
  105.    if (EQ_is_zero(x)) {+ E, F" a# w( ?+ V/ W* Y' x: M9 ~  d
  106.   o8 [7 o0 Y# ^  F2 K" e
  107.       if (y < 0.0) { return(PI*1.5); }' R5 b& Y8 L" w% [. G/ Z
  108. % D* p# h+ H& s! i# u
  109.       return(PI*.5);* O% e. N9 h, }: j1 S
  110.   J5 @+ K* \2 K
  111.    }
    + B8 U1 K1 G% p! L
  112. ' @9 s" W9 _& I2 L
  113.    ang=atan(y/x);6 N$ B& U9 D" `5 _  x+ l
  114. * P1 F! y% L, A+ @; e* r
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }" t8 ]9 m4 P; v3 o( H
  116. ) h, _5 e+ K9 _3 _( s+ Q
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    " }, Y6 I/ F6 r0 ~  E
  118. * P( N& Z6 u( i
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    . |2 f; B7 U+ \  V. T/ G

  120. 3 z2 A( c- a0 C3 t* S9 q- E
  121.    return(ang);$ I7 b+ J  R/ R  R- N( Y
  122. & G- P  I* M6 ?% S' g* J5 |
  123. }3 Q- h& x4 O9 D0 \. h" k( |/ r

  124. ' A7 J) `" o- F* b
  125. //#=============================================================& p6 y/ v4 D$ J) _" t( N

  126. + Z+ ~, v$ z, r& R! L$ j) W$ ~' k
  127. double CheckConst ( double angle, double constvar  ), ^* u2 D, R4 t6 f6 w

  128. 2 C. Y1 w. k4 b  C
  129. //#=============================================================  D4 P5 ?, {4 @6 a3 `" c# U8 H
  130.   u4 W% p5 {# |. U1 O# b- S
  131. {! U* y1 j* Q# P/ {% x
  132. 8 R/ |$ M  b9 l( ]0 y8 r; V
  133.    while (angle < -constvar) { angle+=constvar ; }  V+ i, v- k8 r0 _, W0 V
  134. * R: |3 r, [1 f& V0 j3 J1 o
  135.    while (angle >= constvar) { angle-=constvar ; }
    7 @" {" |. N, {6 r9 E  l/ s
  136. 1 n# _0 c0 O/ y3 a6 n
  137.    return (angle) ;  Z4 V; E, w7 I+ g! W" I0 o3 L- K

  138. + W  T2 o1 @" M
  139. }
    4 p6 j7 ^6 Q) e4 O

  140. / T  W) p5 h9 q  p1 y, ^
  141. //#=============================================================
    2 b$ K0 j  i4 @5 C8 |  r0 f6 `
  142. ) K% x! i7 Z9 |$ h7 V6 i5 Z
  143. double Check360 ( double angle )7 x1 Y6 J& s4 ?+ ]7 ~# j

  144.   F0 ^+ v- M6 ^6 [6 o/ ]" j. `( e) G
  145. //#=============================================================4 y( j; d& y1 o2 L5 b) F1 C1 F

  146. ( e' ~8 Q. ], \9 Y
  147. {
    ( r7 e  ^5 W0 {0 `" G

  148. $ n6 ?: q- U4 w" C5 d7 ?
  149.    while (angle < -360.) { angle+=360. ; }
    " q  D- H* u- S6 e- Q9 s0 ~( z
  150. # a  ~/ i2 f9 h+ Q7 X$ }/ p' M
  151.    while (angle >= 360.) { angle-=360. ; }5 J0 p; L4 U" V7 d( s# U
  152. , ^% l! {/ K9 R  S, Q9 Q
  153.    return (angle) ;
    : v2 J( x( Q1 H2 O

  154. ) h. o" b+ o: M! y5 Z, J
  155. }
    , G. t3 P9 N  G

  156. % q+ F/ k4 ^0 f, A$ [+ }7 n
  157. //#=============================================================0 `% N: {' x$ b& z$ c

  158. 9 }" w6 O+ F( e6 ?/ F
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    * Q4 \) F8 p; a4 o

  160. 4 v  w% d  {9 X; a; X
  161. //#=============================================================
    9 \+ X  _2 U, i2 ^2 x4 W( `
  162. ! C+ X$ P: @7 K4 ]: i- I
  163. {7 f- R) |& Z4 w; T
  164. 1 |- H# s/ w0 }3 T
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    + D/ s- ?$ C. r# J8 P% @( T# i0 d
  166. 5 D& k/ g' J$ r' ~8 ?- z1 W
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }
    & j# M4 q/ z# k5 j& R# d
  168. ! F2 n! f2 l% S+ y5 e: C8 Z, s9 }
  169.    return (angle) ;8 U, ^! o! D2 z8 F
  170. 6 N& R1 V; W* {) }, `
  171. }
复制代码
) m) Z  P6 _* C" e
以下为摇篮5轴计算过程代码* E& @  ~! z' X  F& w+ F+ K
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    0 {0 @9 P! @+ A0 T3 l
  2. 8 o2 c  {* w$ t: _# w: |: P; x
  3.          j=0.; B1=0.; B0=0.;, d8 \% _6 G+ W) s, x; Q9 j

  4. / V% L7 @3 c; p( p7 o( n! ^% _! V
  5.           if (EQ_is_ge(i,0.)) {# d* y8 \1 j: q) T: q/ h9 O$ q/ x

  6. * S: K  G6 p0 R' {5 \9 U9 n. i
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    4 o0 x% i  }: G0 O8 W
  8. & j* f: o9 w8 y
  9.           }
    $ P  h- e# r& l

  10. , Z" l# ~" A+ o( P, a
  11.           if (EQ_is_lt(i,0.)) {1 p2 y4 `- b5 M

  12. 0 ?5 W! b& _2 A/ A9 B7 v9 E
  13.              if (EQ_is_lt(k,0.)) {7 ~! F- E, {$ ]$ h1 {1 s! T7 H

  14. ' P' ?* }, ^$ ~2 ~7 j& c6 P
  15.                 B0=atan(i/k); B1=B0+PI ;6 I- C$ g, u" d% p8 D* L5 g1 s
  16. 8 f! B* V8 V/ W* ^' Z4 r
  17.              } else {2 F" A9 ?! E  T  H: j$ L+ e1 a2 i7 \
  18. # M6 l# K! D) Y$ B
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ) l4 q: }* ?' s. g
  20. 1 _7 E* c; C, D5 c& |/ _; [
  21.               B1=2.*PI+B0 ;
    5 b9 o9 m! |6 S; T
  22. . ?4 N1 d; K) G9 {# O: I0 h
  23.              }/ v, s  e3 u$ P# _' v5 G. o% D
  24. 0 V; p* G% a5 d$ w+ w
  25.           }9 I5 O7 a# m& I

  26. . F, x, [7 u* N, s1 ?
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;$ ]8 y& [1 O; l
  28. , l+ p/ @" U6 d8 Q
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));+ i  ?+ S2 s7 y: X7 Z7 b
  30. ; \) H  W1 C/ e) @0 Q+ [
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;
    ; N  w  h. f9 M' i& T* G1 k; K

  32. ( M. M( H% Q/ S0 f  W
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码

/ \* w- S8 a  l( ~通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
% u( l8 Y& h$ U3 k& y. X9 D+ ?6 N0 @: ], K9 u
640.png 1 i( h* k4 i0 j( y
测试结果:
* i0 T+ P3 I0 T1 F) | 6420.png
: q. a' ]1 m) c5 r$ i. l# s& d) d# j% P8 O% l3 a
反向测试结果 6410.png 9 G' |( F" W  e' c

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 19:20 , Processed in 0.234859 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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