找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7027|回复: 3

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

[复制链接]

433

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);$ D+ q1 [7 R* s- c
  2. int  EQ_is_ge (double s, double t);2 ^! ]6 U+ d0 m* x" _4 w
  3. int  EQ_is_gt (double s, double t);
    0 K1 L0 _$ T- {" [+ ]
  4. int  EQ_is_le (double s, double t);6 ]& C2 f9 [- H. ]/ X" _3 p$ s% O9 F
  5. int  EQ_is_lt (double s, double t);
    7 \1 u5 H  z( K( x+ v& m. m
  6. int  EQ_is_zero (double s);
    2 S; e+ {/ x6 V9 d; ~
  7. //=============================================================
    # f  F0 O% {) J3 ^* D8 ^# E) y
  8. double ARCTAN1 (double y, double x );9 e' `" k) H  Y# U- w4 g4 L) E
  9. //#=============================================================
    8 R2 G% ?9 L: y  [+ f
  10. double ARCTAN2 (double y, double x );3 |: }! }$ X0 K7 l7 ^
  11. //#=============================================================
    1 l. a8 H1 s7 x4 }7 ~
  12. double CheckConst ( double angle, double constvar  );8 W3 ~# `2 ?/ u7 [; v1 I! R1 C
  13. //#=============================================================
    # D( B4 _3 P7 p' d5 o; a
  14. double Check360 ( double angle );
    # ?1 b  Y+ Z2 h5 \! ^+ K
  15. //#=============================================================
    9 _8 N$ e8 W% D
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );
    ( L2 ]7 e7 V: r8 n
  17. //#=============================================================
复制代码

& `9 w5 _$ O# d+ d+ C2 z) A& u以下为部分源代码,用于判断,计算角度等% ^7 Y' g  }% Z2 F" C$ v& K/ S
  1. int  EQ_is_equal (double s, double t)9 I5 }$ a/ C1 K/ U" M
  2. 7 w) v0 m# y3 `* n
  3. {( h; O  U% s: ]. J8 t: D" E. }9 `

  4. 1 ]  s2 X- A- o/ M
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    2 `) z1 f" V0 G

  6. + I$ i8 j: c4 M+ N( r/ a( m8 s
  7. }
    - @8 i) ^- _5 }4 v
  8. 6 T. k2 S/ ^6 [/ b/ {
  9. /***********************************************************************/9 D1 E  _# R+ b. O

  10. ' B$ k9 C, t) {: |5 @8 a; a8 p
  11. int  EQ_is_ge (double s, double t)
    - J% F8 K; ^$ `. p, `, {! K* Z6 [

  12. 2 x5 |" u- g8 y1 T* G
  13. {4 S: U& q6 D, b- \/ `, B/ s

  14. 3 _7 h# R8 w( H6 l( P
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }% B0 Q# k- O" {9 n% Q6 ~& N

  16. 8 M/ W4 P& i$ |$ ?$ X* l! X  @
  17. }. B2 F7 T0 J2 I, k+ J3 V
  18. 2 H# c1 r, Z4 v; E
  19. /***********************************************************************/
    - U1 R; ?: h, A/ t# G1 D7 L
  20. 9 p# @$ S3 Q) E
  21. int  EQ_is_gt (double s, double t)
    ' ^0 x; N  w9 W; e1 r/ v

  22. , g6 r+ B/ }; ^9 a& j
  23. {( S- u) s1 i# q$ X
  24. 4 K, B7 p4 T  e6 E: o- S/ r8 @
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }+ g$ E* _. D  r7 s

  26. 1 g5 G" r) D- z$ v/ ]
  27. }8 p9 h( a9 V! N% z2 r6 K
  28. ' d+ s/ C& a8 C/ L
  29. /***********************************************************************/
    0 N( T! A- L) v

  30. 8 I& E6 d6 ^! t: U" O8 h' ?. B
  31. int  EQ_is_le (double s, double t)
    % @+ g2 M- x0 B9 G0 w2 I

  32. 2 ^% a: g8 z+ g
  33. {6 b' Z7 E8 K7 O* [* q" f- A# Y9 x

  34. 9 z, F7 \$ N; N+ k6 j. @8 X# W- l
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }! ~) H: A0 ?1 V3 [  d, x

  36. . i, Y3 d0 g- G/ ?% W
  37. }+ h; Z  v. N0 P; O
  38. 1 {6 ^8 ^( y% m- Q# Q' g# x5 n( i7 M
  39. /***********************************************************************/
    * g0 A8 v# M# n9 z; ~

  40. ( V7 @) z; ?: H3 k. q
  41. int  EQ_is_lt (double s, double t)
    5 U* J3 ]; A4 S9 L( f7 t8 x  X
  42. 0 x+ h0 M- V: I
  43. {
      T1 p) U5 k4 {$ P

  44. 0 }8 G1 |/ `  T1 f
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }) o+ n, k! h. b0 E0 E4 i5 |/ O1 ?  k( F
  46. , S) `+ L' t9 |: B3 B
  47. }
    5 j% y  K: J/ V) B0 w4 I$ w- E* ]

  48. % T4 L6 N# O5 {4 u3 @& d
  49. /***********************************************************************// N# J" Q% o# I1 Z

  50. 5 E3 x$ X) b# d0 \* X6 W7 {* d. f
  51. int  EQ_is_zero (double s)4 o7 w# F" k: J6 A/ u* }3 z" @

  52. 8 Z9 G/ ^  U9 I2 K4 G% P
  53. {4 ~8 z" Z4 z2 H2 N, J: g8 J$ A

  54. " }# B  I/ j& a  R: d% R8 E& [- J
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }
    - _. r2 B2 i, ~6 W) h9 i- F0 \
  56. 9 k& e. W+ k# q: o: U$ Q: Q9 M
  57. }
    8 d% @9 x) D+ \% K1 d5 W: L1 u
  58. 9 Q5 E1 O# {) |/ ?( s2 I1 d( l
  59. //=============================================================& A8 p8 J3 W9 a, [3 n

  60. ) V9 o6 q* e2 p3 L1 U& G
  61. double ARCTAN1 (double y, double x )8 T6 X( ?; t' \/ J4 S: Y/ }

  62. " E/ o6 Z6 g  I- V$ l0 F' p* T
  63. //#=============================================================+ ?, x, {# G. m% {2 K: a

  64. 0 y, O7 a  y7 Z! k
  65. {' E) f1 K9 ^. P+ g
  66. ' L0 |3 }; F( [% n
  67.    double ang;$ m& |  j& U# S. q& b
  68. . F2 ?/ E6 ~2 z( Q6 Z
  69.    if (EQ_is_zero(y)) { y=0; }; `" D5 z/ Z2 V% K2 Q
  70. . E( I- ]9 M9 H/ Y9 h9 I: i
  71.    if (EQ_is_zero(x)) { x=0; }: k& _* w8 o* k- P/ Y

  72.   a, v$ i+ S. J" d" d
  73.    if (y == 0 && x == 0) { return(0); }' p% l) U: m9 [" d
  74. 9 Y  `4 A) i, O9 Z0 P* x* n+ M  [
  75.    ang=atan2(y,x);
    0 a- L  i  h: F/ B0 f/ J

  76. 9 n7 ~( k* H! G* U6 A6 }! K
  77.    if (ang < 0 ) {& \( O* L7 D6 W, }& Z* p8 b
  78. . ~1 j$ W# t. `7 C( \- N; l1 u8 Y
  79.       return(ang + PI*2);
    ) [+ }4 O' [1 p
  80. ) G) K  B7 X& b6 R% k8 K( s  `
  81.    }
    8 o" Z$ ?! D4 P
  82. ; U9 j' U- `* B: G/ p
  83.    return(ang);
    5 C9 o1 `! ^$ M
  84. 4 A& l. r) o% J3 h
  85. }
    6 {0 X  _3 N. k$ y
  86. 6 ?' b- r- b, t$ Z/ T  A
  87. //#=============================================================1 z  r; Q- G! i# o( Z0 w7 t
  88. & p: g& Q$ T& m- O' N8 i4 G
  89. double ARCTAN2 (double y, double x ); H& y$ z5 L. y
  90. 9 ?+ P0 n2 ?, r% l! ]
  91. //#=============================================================9 y+ @7 e" A; D& i, Q0 E
  92. 9 }3 p2 d- R- r0 o) C/ K. m
  93. {4 {  L9 b1 q6 K

  94. , P2 V  ~( A3 D
  95.    double ang;
    ( @- q& m) ^, E8 }2 c/ O! L- F
  96. . N) L2 \0 o% X9 o; F
  97.    if (EQ_is_zero(y)) {4 U" j3 Y0 D3 F1 L+ d* i3 P

  98. 0 e2 P8 D5 r' ]& L9 Z0 y. W
  99.       if (x < 0.0) { return (PI); }
    " h- i; u: H7 \
  100. + r; j' v) p& U8 K9 O7 ?' Z8 E% y
  101.       return (0.0);% A" T6 O" d( L+ c8 v+ N/ I

  102.   u+ h4 F- p; S2 b# ~* g/ }
  103.    }
    " }8 _$ @% n; b  h# X4 u! g) \, Z

  104. 5 G# ]  }6 H  @- E. y# A
  105.    if (EQ_is_zero(x)) {2 S# n# s* u. k. o! S' T
  106. 9 V1 }0 E8 O3 o/ a
  107.       if (y < 0.0) { return(PI*1.5); }
    : T4 {5 o& v* A2 @: h9 _8 ]* J

  108. . s1 }& E! J: f
  109.       return(PI*.5);$ S- y3 S% \) x1 j( f# A4 I: m
  110. & V2 a  W- ]2 P% }( ]0 E
  111.    }
    : b! l$ `) C+ d6 n% y
  112. 6 [# X& M8 g& w, k3 s. e' a% u; Z
  113.    ang=atan(y/x);
    & V+ I2 g9 |9 H. V
  114. $ r7 d4 n8 v, R4 G1 t+ D/ f2 T$ Q
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    - B% h: {  K6 U0 N5 w
  116. 8 i8 a  ]3 N7 X  c) G3 N
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    * L: a% @8 X8 M0 b$ h
  118. 9 q/ F- p7 R4 u2 l
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    3 h5 z- `  I8 V! F1 _! x
  120. ' K& [& t( ~  ~0 R2 _' H. J
  121.    return(ang);3 {9 G% Q6 d4 m! D- P

  122. * J* G( W. c" k. o6 {* N
  123. }! Q+ a+ N, s  {5 X5 m& z2 |, t1 q& \

  124. % ?. C; w2 h0 M' r% i+ q
  125. //#=============================================================+ i1 q4 t8 L) o# O) D6 w
  126. % S0 {& T, N! ~4 C6 C
  127. double CheckConst ( double angle, double constvar  )& w. S& H- z* K% A, D" j; d3 f  ^- l
  128. 9 O) I/ }; _+ g  Q% k8 n
  129. //#=============================================================3 M. }7 N7 R' |) O6 g
  130. * h' D- v2 S6 j
  131. {! a. Z( v1 D$ u
  132. + \' G  e! Y- g! u( {
  133.    while (angle < -constvar) { angle+=constvar ; }1 k$ w1 z3 I" _0 K! U2 B8 I6 [9 @

  134. 5 @8 Z6 B4 S$ ^- t5 d* I8 W0 w
  135.    while (angle >= constvar) { angle-=constvar ; }- W4 D" J* A. U5 B' _7 T0 Q8 @% x
  136. : _! r( O( m7 r6 S- M2 R
  137.    return (angle) ;, h- E3 C8 K1 X' n
  138. 0 d& S6 Q# V" M& ?/ n
  139. }7 H( g8 c+ L  S/ p$ _4 ^/ D# C/ ^9 ~5 f2 ~
  140. 3 o9 B' ~- e# g/ k6 f
  141. //#=============================================================$ Z, E8 s7 l) D( f/ A
  142. 0 D# m( U! M+ N9 |+ K2 ?6 G
  143. double Check360 ( double angle )% G0 N( X3 v* |

  144. 5 D& }5 {) z# E
  145. //#=============================================================3 ~# b8 W9 [) y4 ~) R& n

  146. % K# v' @! P( P8 A4 p8 }
  147. {5 W# U- g+ ]* C( F6 K

  148. # Q/ J8 o4 d7 Q3 B5 d' D. l) o7 m
  149.    while (angle < -360.) { angle+=360. ; }
    ) b0 c. z- l7 L7 J/ J( W1 O9 @
  150. ! M* a; `% ]/ L" h5 {5 `- s4 v, p/ G
  151.    while (angle >= 360.) { angle-=360. ; }
    5 f, {$ \# d" W+ x
  152. $ J, W/ o0 E+ J
  153.    return (angle) ;
    8 x7 k4 F8 m/ R  b/ e
  154. & i2 P! U# C8 ?0 \! L. \) c
  155. }
    4 j- r8 d& m, J9 R

  156. 2 x- F) W+ ]  N- d1 [
  157. //#=============================================================; J1 B( S5 e' P+ M9 _6 A: L: v7 k
  158. * A! U1 u& S- P4 g
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )% I8 T% t2 o7 G& ]  d
  160. ! q5 k, C  \5 ~4 ^* m8 B. R
  161. //#=============================================================6 b" h8 o1 O3 f, f% ]5 |" z

  162. 1 i' l+ O" |; H, Z' I
  163. {
    : u5 b( |3 @' m: a. y% m* ]

  164. 6 j0 F+ o* d& C& v2 p+ ~
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }
    . D- J' B8 S- W7 n
  166. 1 s: ^" D: ?# @9 M6 k1 b
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }1 g& u! R& B. B; q  c
  168. 3 m/ K& V% w  R
  169.    return (angle) ;
    / S0 O3 r/ W- u; m% Y

  170. ( N- S: I; {- ?2 x: w4 d! Z  c
  171. }
复制代码
) S9 c( A( D$ }7 C) Q
以下为摇篮5轴计算过程代码
) C5 I8 e4 }! J5 r0 f
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    8 r8 N! n% S1 j, x, [( a, d% N
  2.   J4 j9 g. I. r9 N7 \8 y% `/ J
  3.          j=0.; B1=0.; B0=0.;/ X) I+ s: b7 F8 e4 T7 L  x

  4. - M: {1 x( v/ Q4 S  n+ ]* U" \  a
  5.           if (EQ_is_ge(i,0.)) {: g: j$ C' Z, @" l# N

  6. 9 v% b  K$ O& x- S* K" d: k
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }% ?0 |# \$ p! I' R( X
  8. / D- H! u. M$ N# ]2 U/ _9 B
  9.           }: p0 r( J$ a8 D2 x; o! D* H

  10. 1 I6 b" \1 n0 i" B3 l1 ~
  11.           if (EQ_is_lt(i,0.)) {
    & h4 J! F" @2 D+ u

  12. + I3 l/ _( _. [0 Y7 h# k
  13.              if (EQ_is_lt(k,0.)) {/ d) h' ~* Q$ J. C9 @( @: ]; L
  14. # G2 p. Y0 Z3 O% t2 c$ x4 l9 J' b/ S
  15.                 B0=atan(i/k); B1=B0+PI ;
    $ [0 j$ C4 ]% ?% ^  d/ [
  16. ) P% i$ p* x  E) L, _8 [
  17.              } else {
    8 f' e8 j7 {- U
  18. ' n% l* n: V0 m7 v0 g* R
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }
    ' X5 k9 }0 \( m# e4 M% T8 P2 n
  20. ) w  X1 g) O- E
  21.               B1=2.*PI+B0 ;
    2 n6 o* {3 p3 @6 L8 j

  22. 2 I0 {" B9 X5 K9 u, x6 j1 {
  23.              }/ R! s$ l3 P( r- s

  24. 2 z" w" N& q3 ~- w- p
  25.           }
    3 X8 R0 p. n" N* W* R

  26. ; f/ N: K# O. b+ m7 J$ k. J
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;$ ]& N( g! ^4 a( ~9 n1 z

  28. % G% w5 r8 U0 n8 J# h
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    / [3 n. K# ]! G
  30. 8 [3 v. h8 G& T2 a
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;' Z' B4 ^. m1 `( e3 q1 J

  32. 3 ?# J: C, p+ u1 J- B
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
3 x4 g5 K  n6 r! Q9 i8 G. V( G# ~' o" R
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。1 D2 Y, Z- b$ _& U
1 i7 B5 r4 @7 U4 x. }
640.png / `& k  w- ~( o9 V: D' `  ^
测试结果:
5 w8 O8 W; v5 w2 Q; H% a& ?9 y 6420.png ; `- M" |6 n4 q8 [3 P) t4 E7 V5 c9 [
( c4 L" I5 d) G  g) J3 p
反向测试结果 6410.png
( t4 l1 g, V- f# ~

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

210

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-3-21 14:38 , Processed in 0.210433 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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