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

世纪浮雕模具论坛

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

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

  [复制链接]
发表于 2009-11-18 13:29:35 | 显示全部楼层 |阅读模式
世纪券

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑
" p1 L" p8 B* }' [" V8 {9 L9 {* \& C) z+ ?
游客,如果您要查看本帖隐藏内容请回复

+ e6 y6 l+ N7 Z# a' q" B2 b  以下控制以DMC1000控制卡为例)  
8 ]+ n/ J; {9 W+ e! ^% Q8 O( @
/ P" a; B% _0 o! C8 P1 [  一、功能和工艺要求  
+ ~1 I# \) f  _/ }5 v  1.能处理标准CNC代码  . d5 y6 E# m. r5 O' S& G+ `
  2.加工精度为0.01至0.001毫米  ) C; A" t7 Q: ]$ N0 z. @
  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  3 B7 |! C* m5 Y7 U" e
  4.设定工作原点,控制高速主轴马达,可手动调试设备  # `+ a' F. J- ]% V  H+ z7 x: t
  5.具有手动或自动对刀工艺  
! b1 C/ Y6 q7 F  W9 J, q: G+ m  6.有不同刀具,则需要提示换刀处理  
0 ]* c2 O$ o* Q% H; [  二、系统流程  
: g; k  n5 e4 C
* N6 s* Q" T/ c  P  P. U5 f" ^
                               
登录/注册后可看大图
; J/ }- L! l/ }3 c3 |' E% ~
  三、使用函数  . M% `2 T, G9 e; W' G, h2 r
  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  
" r/ o; T. o; f" C+ |* h  对应的函数调为:  
- _' c# z; \5 m5 o3 i  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  4 }! f- Z4 u. r+ d8 o
  d1000_get_in_bit 读输入口状态    D" ^9 K5 y/ u. {1 s. w- ~
  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  . L3 Y4 y; W1 D
  d1000_check_done 检测运动状态函数  
3 A' b  t, A( M  d1000_decel_stop 停止脉冲输出(减速停较好)  ! j9 ?- R9 I) e4 U/ Z
  d1000_home_move 单轴找原点函数  5 t5 V3 I* C# l! t
  d1000_home_move_all 多轴找原点函数  
  |4 c+ Y! c* d$ p- ?  d1000_board_init 控制卡初始化  
2 i, t0 K1 N) k7 l2 X8 ?7 q' s% D  d1000_board_close 控制卡释放  
" _2 T* |# ~# R% d% n4 x% s" O  位置显示及清除需要的函数:  
+ L, `" ?- p6 a- }2 t  d1000_get_abs_position 取得绝对位置  3 T7 A. S* e* \! S- Y
  d1000_set_position 设定位置函数,当值为0时位置清除  
% V6 G- V0 B6 g; U- o  加工控制需要的函数:  5 k: V* A& t/ U2 c
  d1000_start_ta_line2 两轴插补函数  * d# g) N  n9 Q9 `3 S9 b
  d1000_set_vector_profile 设定矢量插补速度  
* T7 [  b3 d, s9 z; K: H  d1000_change_speed 速度改变速度  
! f5 ^8 @0 [3 L: m7 S  d1000_start_ta_line_all 多轴插补函数  
) h7 k! \; B' k+ M7 V  四、核心部分的编程  
2 j; s3 `9 i4 p6 ^6 Z! e  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。    [. W$ I( T$ E- k
  数据结构大致可用两种方式处理,各有优缺点:  
) H! ^7 d" [1 B  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:  # _5 m# M9 |+ \! G  o2 }
  class Ccommand  & e' U/ o( H% Q7 a( \
  {  
5 Y9 r& ?# O  b/ r, ~: v+ S, ~  public:  
- N2 o2 y# i5 x: y$ k) a, E  Ccomand();  
* h9 V, r6 T. v  d6 G9 c) u  ~Ccomand();  
* d) E/ i* B+ \. z% L  char chCommand; //指令码‘G’,‘M’,‘X’  
, |+ O; r0 |' r, L9 A% L, v2 q3 S  ?! R  double fValue; //指令值  
+ Y4 O9 l2 K% |  unsigned char nAttrib; //属性,是否行首、行中或行尾  
& z% r* Z1 J0 {. E6 Q+ `' |  };  
9 w7 b* K, S  u/ V0 H4 G% W0 N  从以上结构可以看出,在加工过程中,需要有较多分支:  ( l5 z2 e' E2 A1 h% R4 Q% S+ b
  for( int I(0); I % Y- O8 b& a% F2 W
  {  
& C& ^9 U) a8 K. d  const Ccommand &cmd = dataArray[I];  6 B7 i$ g% v% Q; ?$ R6 s
  if( cmd.nAttrib != LINE_HEAD ){//若不为  7 \3 S7 l) {4 h
  I++;  ) @+ Z$ U/ q: u  d, L5 g6 O6 @
  Continue;  - @2 x$ v" \1 p- ~$ }2 N
  }  ) j& ^" X7 ~. n2 r% I6 O2 \
  switch( cmd.chCommand ){  
; [9 e  e- F; g& {$ j  case ‘G’:  
! L$ n0 u) a- j, J/ ]- _+ u  switch( int(cmd.fValue) ){  ) i1 S9 q" k2 z! @: S, G
  case 0:  6 ^% R7 x+ @0 q5 L3 ]3 C& }
  break;  , ]1 t4 L: ~; P, b- p
  …  
  f9 p9 t8 E7 w3 R% ~  case ‘M’:  
+ `( m* Q$ U) k; W. a  break;  " J; {2 r8 v6 y1 b4 ^
  …  
9 Y8 I: R+ u( A& N. A  }  
. Y6 h( w" }4 B  }  
; B: R3 w% y9 l, K! a  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  
) O/ v& h9 z: k+ U" r+ Q  class CdataPoint  
: X1 e9 w3 g, p% a" m: A  C  {  
) ~6 l/ B( ]9 J* \8 D! q  CdataPoint();  
7 [) `) \; V" z( E  ~CdataPoint();  - h/ Q! n7 K# |& c
  double x,y,z; //记录一个位置点  
' j  {" L$ D) I( Y  … //其它  : f. t3 `& l  N" D
  }  
+ h' e  x$ O. b1 u$ U6 X9 d9 H; D  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  2 B% Q, I/ U5 L' \. `" Q7 X3 D
  FILE fp = fopen(“*.cnc”,”rt”);  
- E; ]$ t, v+ I  Char lineBuffer[0x80];  4 N6 L" I/ s/ ~  K
  Char *pStr=NULL;  8 S/ S% U% F0 q& X+ x7 W- n
  Char command=NULL;  
5 {9 g* a% u4 H: d: n( {  Double value(0.0);  
8 o4 o( K/ T5 _: t# q) a  Long nFilePosition;  7 M1 ]. {$ z" R# O7 V. N
  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  9 f9 [4 i! o! E
  fseek( fp, m_nBreakFileOff, SEEK_SET );  + r' s+ i% w1 W* i# n1 c; K
  While( !feof(fp) && m_nWorkStatus != NORUN ){  * L0 |! s" {) a  ^/ ?
  NFilePosition = ftell( fp );a  9 E3 [( |; b0 r2 [% z1 u
  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  
% U: S: I( Z) n! {  PStr = lineBuffer;  7 f: N. I$ U) E4 T. r
  //开始分析一行并加工处理  
6 b2 u9 S6 E0 r3 S4 D2 N8 q  While( *pStr && m_nWorkStatus != NORUN ){  ! s6 r+ M4 v; G8 _( l2 S
  Command = *pStr ++;  
! g2 L7 K- O1 s  z2 q( ^  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  
5 c  s4 \9 {  S; k& c; ?  Switch( command ){  
7 ]' \; O# Y4 v) B' q9 ?  Case ‘G’:  ' C4 ?  a, n4 {- L9 W! B% r
  G_Command = int(value);  
$ b2 [6 `8 ]9 J. S9 {  Switch( g_Command ){  
3 P  F; H8 x5 Y  Case 71: fUnit = 1.0; break;//公制  
2 ^7 {( q, J1 V! S' ?% E6 e  Case 70: fUnit = 25.4; break;//英寸  4 a( j& f& {6 X* J: W' y& N
  Case 90: abs = true; break;//绝对  
  h, o; B* z: g( ^" R( D  Case 91: abs=false; break;//相对  
* \% C  i" w% v  Break;  
' j* |1 @, O5 c5 B" `  Case ‘M’:  " N/ N! o; y# W; c! ^& G
  M_Command=int(vlaue);  
. N" w# ~8 Y( w! I  Break;  7 S) `$ ^" ?5 ~  ~
  Case ‘X’: fX = value; break;  
% }) j, J( w+ E1 h  Case ‘Y’: fY = value; break;  * `# \) Y( J! b/ B, H
  Case ‘Z’: fZ = value; break;  
3 J; z- c2 k: p$ {  Case ‘I’: fI = value; break;  / F1 i4 ^1 i* @) w! P5 _( S
  Case ‘J’: fY = value; break;  
1 `3 h* ^1 Z+ t! }+ q  …  3 F; n2 y6 }$ r" G: G1 L9 I5 R
  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  ; m) \$ i* C3 g8 A
  {  
3 W1 O/ z1 J; u# t2 O( v- j1 l  switch( g_Command ){  
; G; m* }' t: n2 h4 d" U1 a  case 0://快速达到  
# t/ n" U* s/ @7 Z' y; x/ ?  case 1://插补处理  8 @9 |- g9 j) O+ k$ m8 M$ A
  case 2://顺弧处理  
9 {: E, `4 d8 K  case 3://逆弧处理  
! E) {. G2 n. R0 t- x/ M  break;  
8 h, d$ L; y' ~" N+ P8 N$ D  }  5 `* D* l- d6 ^" f1 q. i7 \2 s9 D7 P
  } break;  ' V3 B# G0 E& U: ^( \/ v( B: v' D
  }// end switch command  . H! D3 @. K* D% {
  }// end while  9 _$ X* Z2 U: l9 m8 n* w
  }// end feof(fp)  $ n9 G3 \$ Q' H' L% o
  if( m_nWorkStatus != NORUN )//加工正常结束  1 a1 Y) i5 N' ]4 `; w/ e+ x) N
  m_nBreakFileOff = 0;  
/ `2 y* Y3 Z, d  else m_nBreakFileOff = nFilePosition;  
% k- l& L& R4 O7 Y4 w1 J  ?' e9 o  m_nWorkStatus = NORUN;  & _8 h/ i0 F3 x4 u3 }
  fclose(fp);  
; T7 d- O# X: C" y  Z% M  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  , N0 P+ D0 l  g6 [
  五、注意事项  
4 H& d- I- f$ Z  1.注意换刀操作和自动/手动对刀的必要性  ( v: d) a, j5 q5 m' a1 O- Q
  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  
, x! z; V/ ?: e* d3 v  3.加工控制时,需要考虑速度的调节  - K" a$ j+ S; z
  4.加工控制,需要考虑图形显示带来的额外计算负担 " {/ F7 S) ^1 q/ l) s
/ Q' @2 @7 u+ t

评分

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

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
世纪券
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容
: w0 g7 k3 k/ R) w; z
发表于 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 )