本广告位招租 本广告位招租

世纪浮雕模具论坛

 找回密码
 注册
查看: 26464|回复: 257
收起左侧

[资料] 雕刻机软件的开发参考资料(珍贵!)

  [复制链接]
发表于 2009-11-18 13:29:35 | 显示全部楼层 |阅读模式
电脑雕花培训

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑 ( W4 |" w0 `$ t
; z1 J0 R& a3 i1 ?/ _; O' G
游客,如果您要查看本帖隐藏内容请回复
7 T* g- c8 I1 V" |' {. F
  以下控制以DMC1000控制卡为例)  ) r' N0 i: a) O& c* `0 u: p. a4 ~
: _" H, e+ K0 H4 y
  一、功能和工艺要求  
0 X, B: ?# ?* K! R3 Z8 O  1.能处理标准CNC代码  + u, H# V) S* N/ X7 E8 Y- q
  2.加工精度为0.01至0.001毫米  
* @$ H, Q' J6 g9 R  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  
+ S9 }( g0 Y+ w5 N' ~3 g6 V) Z  4.设定工作原点,控制高速主轴马达,可手动调试设备  # {, P  k# L- A. d- a
  5.具有手动或自动对刀工艺  % w# E. p: o) O4 E* W8 h
  6.有不同刀具,则需要提示换刀处理  ( \* {. p$ u' r  E2 k! s! L
  二、系统流程  ) R% V& l/ t2 a7 C' N
, t, }' z( n; m
                               
登录/注册后可看大图

4 s" J$ q7 I0 W/ Z. d  三、使用函数  ; O+ ~7 ]* z5 Z% }$ u
  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  
/ h4 G; {/ `- q& I8 ^: D  对应的函数调为:  
" s. \6 N7 |. I$ f7 ?  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  
, N2 `7 J. s2 l# Y% B# w  d1000_get_in_bit 读输入口状态  " {6 {, v* B8 |. \. U  c5 D" u
  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  
5 ]; X. c$ k9 {! C; b# a  J  d1000_check_done 检测运动状态函数  
* U: u% b5 _! \$ J4 ]2 [  d1000_decel_stop 停止脉冲输出(减速停较好)  : [, k# I" C" H. ~+ a( {
  d1000_home_move 单轴找原点函数  
- m" w' V, n9 x5 N+ K+ {: j  d1000_home_move_all 多轴找原点函数  1 ^$ q% p8 z) H6 U6 J. x$ M% z: f
  d1000_board_init 控制卡初始化  + k. l" \6 h5 _5 \1 J$ D" j5 o+ ^, i
  d1000_board_close 控制卡释放  : c2 p) Z1 e- C; v7 ~4 S: Q
  位置显示及清除需要的函数:  
; J7 }* ?5 y% ^( W! L! q  d1000_get_abs_position 取得绝对位置  
+ N/ Q5 F7 r4 G1 w6 G  d1000_set_position 设定位置函数,当值为0时位置清除  
0 d4 [' ^/ x' x, K; C8 d  加工控制需要的函数:  1 D' h' I% a7 Q& m4 _" n. ^1 F
  d1000_start_ta_line2 两轴插补函数  $ [0 Z' L0 }% a- N! L: L: y+ M
  d1000_set_vector_profile 设定矢量插补速度  
% X, ~( E( ]; e  d1000_change_speed 速度改变速度  
# K5 `7 ]7 [6 G5 @  d$ ]& O8 E' O: X  d1000_start_ta_line_all 多轴插补函数  
  l7 e( c5 [, T5 s  四、核心部分的编程  4 x# q* N" ^. ~6 \- ~; ], l
  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。  7 z! {! a8 s7 o6 K- k* s- ?3 w
  数据结构大致可用两种方式处理,各有优缺点:  / q: G3 s" l  w
  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:  1 T4 W3 n  f6 O& `9 m3 f
  class Ccommand  6 ~  k+ {  V1 x. i
  {  
* N) Q: o7 }6 B  public:  
' x5 s, L: u5 G& l6 T  w  Ccomand();  
0 S+ k- p* r4 Q  Y  F# D' x  ~Ccomand();  " @9 K0 `1 Q+ s* M5 K3 t7 t) G
  char chCommand; //指令码‘G’,‘M’,‘X’  
/ f* R( h% b/ c: G( J! u3 ^8 n% U  double fValue; //指令值  
7 n7 m4 T' f8 @* ~) U: U  unsigned char nAttrib; //属性,是否行首、行中或行尾  
: a3 g* d1 H" q% L  };  3 A% e5 x, A8 s3 r; h* F
  从以上结构可以看出,在加工过程中,需要有较多分支:  
+ N9 N2 P' ], p& V8 x2 y$ |/ s3 S  for( int I(0); I
+ A2 Z3 s( X( W+ p  {  4 F& G* m+ I4 l! i7 D, D
  const Ccommand &cmd = dataArray[I];  ' o+ E, K' h9 R0 t$ H% R$ a: r7 z6 H7 u
  if( cmd.nAttrib != LINE_HEAD ){//若不为  5 Q/ e' M! U# l* W# W6 i. E" j
  I++;  9 v1 K- l( t5 K9 \# d7 m
  Continue;  & s+ k8 ^! ]7 [4 T7 ~
  }  
4 ~( w, X  X  k& \' R  switch( cmd.chCommand ){  ( Q% L! N$ V1 x
  case ‘G’:  & L1 j# I9 K' A* P
  switch( int(cmd.fValue) ){  $ H* x! c+ U4 W8 l( t
  case 0:  8 v) J+ s# {5 B- c; D5 j
  break;  , O0 {0 E  Z% G% D# _* o
  …  
, w9 [% i+ J8 p7 P7 d& d  case ‘M’:  ; D! O8 W8 c: t) q0 [
  break;  
5 Y$ V* Z4 Y" L2 W; c# c0 [  …  
: _4 [  r6 E. Q5 l9 y  }  4 O) E5 ^. x3 W
  }  % q+ Y$ N* j; K% k
  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  
, l& j. z. H4 C9 q' r6 i) c+ J' M( E  class CdataPoint  
( J3 H( L5 v# M" Y0 X9 P  {    p# m, }  ~/ g" P% R' [
  CdataPoint();  & }7 i/ o0 K7 F" m" Q, L9 _+ ~
  ~CdataPoint();  
3 Q4 n5 D$ A2 O  f$ y# f  double x,y,z; //记录一个位置点    ], k& E4 }) \6 g6 E
  … //其它  
4 u) K" h, K7 B2 C8 N& S% ?  }  9 d2 G1 O9 E! b
  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  
. _1 F, o. h) {  FILE fp = fopen(“*.cnc”,”rt”);  ' @$ D2 J2 o) }' ]
  Char lineBuffer[0x80];  
! x3 L- `; N& S6 k! d  Char *pStr=NULL;  1 T% I- Z4 y: _8 d  ?2 p. E
  Char command=NULL;  6 [. K# h5 o' _+ L# l* Y
  Double value(0.0);  0 g( f# b4 I6 a; R
  Long nFilePosition;  3 U0 o$ `9 e; P. k5 H
  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  * w) V/ k: M+ Z1 a/ M
  fseek( fp, m_nBreakFileOff, SEEK_SET );  # c5 |9 d2 ~+ L* s; m
  While( !feof(fp) && m_nWorkStatus != NORUN ){  
( c: V& p- n: S2 Z7 |  NFilePosition = ftell( fp );a  0 d; L" Y8 ~( N/ G0 a; G& T
  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  * C5 j* x2 x2 y# Q( Z" j* p: A" V
  PStr = lineBuffer;  
9 Z, J1 N7 R( f2 d9 [+ T  //开始分析一行并加工处理  
5 M3 t, W, j3 Y, x/ v# Q! V  While( *pStr && m_nWorkStatus != NORUN ){  
& [3 P9 `- O! n( I- M0 {, T  Command = *pStr ++;  
; I2 ]: g( S  s  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  & n" b6 K* r* d  g
  Switch( command ){  & k! _6 y9 T7 W- d
  Case ‘G’:  
6 ^8 Z0 T! V4 H3 v, q; z, A  G_Command = int(value);  ( X; f. T" {0 |# O6 H$ I
  Switch( g_Command ){  7 }: j/ l9 {7 R. h$ e
  Case 71: fUnit = 1.0; break;//公制  
; R9 q  n4 U; g, T* I2 G" a( ~( b! ~  Case 70: fUnit = 25.4; break;//英寸  7 Q$ }3 V& Y4 K0 U7 _
  Case 90: abs = true; break;//绝对  
9 k, }$ z  o  T: J  Case 91: abs=false; break;//相对  % }8 v* I% Q% k9 D# p  j
  Break;  ( c# S, `! _3 q: x4 f0 S1 A: ~
  Case ‘M’:  
8 {9 j: B5 q2 P3 c% g% [  M_Command=int(vlaue);  - t' A8 l+ h- |, B0 J5 h' g
  Break;  
4 M" E" O" m- Y+ n5 K( }; p  Case ‘X’: fX = value; break;  / _" d& R; c1 t: ]3 k
  Case ‘Y’: fY = value; break;  . n9 A' R1 t% I( X1 O/ k7 \/ f0 s
  Case ‘Z’: fZ = value; break;  
+ ]+ u- O7 [4 v4 P" ?% [4 W  Case ‘I’: fI = value; break;  
- V. L( B' g" ^8 `7 ?7 {! U4 P  Case ‘J’: fY = value; break;  * ]2 X1 j, w; x* s- B  Q7 T
  …  " w6 T3 }5 c( c) l5 s1 k
  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  1 y0 I3 r: M2 ^( I
  {  5 a% O, a; j3 ?. [; G7 v
  switch( g_Command ){  0 U; c# \( v" [, b5 F. \, }
  case 0://快速达到  " M5 a7 P" i- `, N" q
  case 1://插补处理    L& d. @" G# C& ~0 k" H4 i
  case 2://顺弧处理  
9 |2 S/ k+ @4 |! [+ l" M% l! F9 {  case 3://逆弧处理  
4 u: c5 l& Y- z% R  break;  * l" S3 x3 f# q- y
  }  
. Y# S  O5 r7 Q1 S  } break;  9 T5 P) d/ T- y# l0 S1 C  f
  }// end switch command  
- u' R- K( q3 N- L# L* A, H  }// end while  
, {" r/ Y. {2 Q$ e  }// end feof(fp)  
! p6 `4 r. o! a/ F% |3 t0 }  if( m_nWorkStatus != NORUN )//加工正常结束  % R- e! Y0 \5 s, u
  m_nBreakFileOff = 0;  
3 w9 O- R: a9 \  else m_nBreakFileOff = nFilePosition;  $ Q/ @+ Z+ r2 H4 d
  m_nWorkStatus = NORUN;  
6 H1 x. A/ e! F  f! S" ^+ f6 H2 Z  fclose(fp);  
2 X# S8 [% L! z; {  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  4 X/ P! U5 p1 K1 b* e/ b/ ]! m
  五、注意事项  1 n+ @  k, ]$ B, u' o- T
  1.注意换刀操作和自动/手动对刀的必要性  
% l% w/ J5 Y; _. j8 t! a9 U  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  
8 Q. G( J& W. W: u7 [. T) t  3.加工控制时,需要考虑速度的调节  
, g$ T0 n" K2 Q% k; s+ S  4.加工控制,需要考虑图形显示带来的额外计算负担
& W" j, h2 e8 e! T
. u* P4 J+ j2 b9 Y/ M. R

评分

参与人数 1威望 +5 金钱 +5 收起 理由
殷亮 + 5 + 5 的确是精品,加分鼓励

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
电脑雕花培训
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容
  a3 n3 r8 d* C. u4 R$ s. m# G3 `
发表于 2009-11-18 13:35:07 | 显示全部楼层
电脑雕花培训
顶一个啦!!!
发表于 2009-11-18 14:47:23 | 显示全部楼层
顶下!!!
发表于 2009-11-18 15:12:10 | 显示全部楼层
电脑雕花培训
这个可以看看啊
发表于 2009-11-18 15:15:52 | 显示全部楼层
好像是C代码,单片机
发表于 2009-11-18 18:00:18 | 显示全部楼层
电脑雕花培训
版主太好了,学习一下
发表于 2009-11-18 21:04:35 | 显示全部楼层
好,顶一个
 楼主| 发表于 2009-11-19 07:49:11 | 显示全部楼层
电脑雕花培训
好资料就要与大家共享
发表于 2009-11-19 08:59:17 | 显示全部楼层
专业!还想自己DIY台机子,看看又不敢了呀!装了怕很难用或者用不了,控制这方面不太懂。
发表于 2009-11-20 20:24:11 | 显示全部楼层
电脑雕花培训
哈資料呢,還CANG起叫
发表于 2009-11-20 20:37:38 | 显示全部楼层
看不懂    顶。。。。
发表于 2009-11-21 15:59:22 | 显示全部楼层
电脑雕花培训
什么珍贵资料啊
发表于 2009-11-21 21:25:52 | 显示全部楼层
;;13;;13;;6
 楼主| 发表于 2009-11-22 11:29:41 | 显示全部楼层
编程资料啊
发表于 2009-11-22 12:45:53 | 显示全部楼层
鼎立支持!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

jdpaint培训

QQ|小黑屋|手机版|无图版|世纪浮雕模具论坛 ( 粤ICP备12050332号-1 )

粤公网安备 44060602000992号