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

世纪浮雕模具论坛

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

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

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

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑
0 v1 c* ]  c3 m, F6 s6 W1 C0 r; g. D" t0 m
游客,如果您要查看本帖隐藏内容请回复
4 T4 V9 _% ^6 t
  以下控制以DMC1000控制卡为例)  
* }3 B# I* e/ Q7 R: Y& k7 L6 J- n1 t3 s, N7 b/ h
  一、功能和工艺要求  
1 C- D: G1 J7 M! i* ^  1.能处理标准CNC代码  
: n' O. h6 }9 g2 ]: c/ e% _  2.加工精度为0.01至0.001毫米  & X8 V8 Y% c" P4 {6 c# c7 e  @
  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  
8 t) f# x4 p  e$ k! b' o8 ]3 N* }( r6 {( I  4.设定工作原点,控制高速主轴马达,可手动调试设备  . e- H/ A3 ?- o# T* R3 b
  5.具有手动或自动对刀工艺  , t  a! ?( `  H0 V0 ?
  6.有不同刀具,则需要提示换刀处理  ) E" P4 n/ s! Q. B) ~/ d
  二、系统流程  
, Z9 g4 v7 n7 u/ P4 I# u2 x- B. X

# }+ u9 O0 p9 k3 {6 f$ _, G                               
登录/注册后可看大图
, E( u9 \) `. d
  三、使用函数  
6 F# H2 t! D6 u5 [  |: }# r- A  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  2 x6 s5 L+ I/ \1 q2 Z
  对应的函数调为:  4 r% k/ Q) x4 l$ J5 h$ e
  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  6 e, y3 r& u2 a! j+ _  p
  d1000_get_in_bit 读输入口状态  
3 `, d4 e6 ?5 H' R- ^0 r( ^  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  2 o* o& |0 j; v# @1 F" ?
  d1000_check_done 检测运动状态函数  ) _7 e) Y# j  v( L+ y; ]
  d1000_decel_stop 停止脉冲输出(减速停较好)  
1 b) w; Z: _2 W; Y) g) @/ a  d1000_home_move 单轴找原点函数  7 e$ z# m! O# a) _- z% K) z5 l
  d1000_home_move_all 多轴找原点函数    S4 x# p, @$ g/ K
  d1000_board_init 控制卡初始化  
, z# }" [% {- [" q  E8 D& Q  d1000_board_close 控制卡释放  & n( B2 f6 P# ^; B2 g) i7 @
  位置显示及清除需要的函数:  7 C/ D* k* f% r' Q( T& A" \) O4 W
  d1000_get_abs_position 取得绝对位置  ( _& h# i/ ~, A1 h4 e$ ?
  d1000_set_position 设定位置函数,当值为0时位置清除  8 y: I4 U% r' c, T
  加工控制需要的函数:  
$ ^; x$ m- t- P' O' `  d1000_start_ta_line2 两轴插补函数  
% D/ r" S* `1 l  n  d1000_set_vector_profile 设定矢量插补速度  
/ ~% O3 ]& ?. f* p  d1000_change_speed 速度改变速度  
! W. T$ P" I8 r8 f: k  d1000_start_ta_line_all 多轴插补函数  
' Z9 O0 k& e( a* \  四、核心部分的编程  
2 L" D  T/ m0 F$ N  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。  6 l9 P7 x+ d' k/ B! Y9 u) X
  数据结构大致可用两种方式处理,各有优缺点:  
# a0 [2 U( t8 _$ @  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:  7 m6 f& `. Y4 U+ v
  class Ccommand  
, m( v" k& U! v$ F9 X5 X! c  S  {  
8 t) ?8 y% B. G; `7 I" O5 U  public:  ! ]3 G) x8 L* j( }& ?
  Ccomand();  * \  T6 L( t  B2 k  E/ S
  ~Ccomand();  , ]' M4 p8 O3 X/ R) J! N8 Q1 ^0 ~5 V
  char chCommand; //指令码‘G’,‘M’,‘X’  
" D  q# H* O+ R4 s  double fValue; //指令值  
  V# {- `9 W2 x0 O) ?5 A) q  unsigned char nAttrib; //属性,是否行首、行中或行尾  
* C, Q. `+ v6 a' s( j* [" Z  };  
+ E. x% p+ h8 _1 v$ r  从以上结构可以看出,在加工过程中,需要有较多分支:  , a* ?* P, L0 W! Q5 L
  for( int I(0); I ) [' q% _; z7 A& N
  {  
6 b; X$ g/ F. ^9 F9 u( w9 x+ W- p8 A  const Ccommand &cmd = dataArray[I];  
8 S, M9 q4 D7 d# _9 Y4 e  if( cmd.nAttrib != LINE_HEAD ){//若不为  
' Y1 U  ~+ {8 m, ]  I++;  
% a+ o" L7 L8 u6 w: b& |  Continue;  
7 I, A1 y; j# N% b1 N  H  }  
& _3 G; K& i% K  switch( cmd.chCommand ){  
7 C3 `3 r- p  O% A$ d# M' a  case ‘G’:  ) g: T) ]# z1 y  ~. {: A
  switch( int(cmd.fValue) ){  
9 e2 f6 e! H* r, ^  case 0:  ( o' v- k& ]' w, w
  break;  
. s' T4 |( g8 R  …  
; ]0 y, e# i+ ]  case ‘M’:  ) ~- H# V% [$ {; `$ F
  break;  1 E4 _. J2 S; k! s" D5 l
  …  
+ V4 o  p; P& q! v  }  
+ R6 t, r% F- Q+ h) l. y7 f  }  ( s2 L5 M: b- Y& D) L- Z
  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  6 f: p' s. I) L. P
  class CdataPoint  
8 X( P8 b$ [+ A+ j$ u8 `; z& @- D  {  
1 m# }5 y$ A7 n7 i1 X  CdataPoint();  - j5 p- H+ Q( s6 D, `) n7 C
  ~CdataPoint();  % b) K' F# |, u+ c1 o
  double x,y,z; //记录一个位置点  1 a' F, J2 E3 }+ b
  … //其它  - ?* l$ K8 N# h1 Q9 t& s. |9 V8 j
  }  % f2 i8 r- z3 d' [; c
  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  
# p4 e7 Q3 `! Z& d  FILE fp = fopen(“*.cnc”,”rt”);  $ Y- \" l2 l& O3 G0 l# e2 n6 o
  Char lineBuffer[0x80];  " b1 w$ e9 h% S) T8 H
  Char *pStr=NULL;  ) d0 F& E: ~# I7 i2 E1 V
  Char command=NULL;  4 D/ j5 [5 P  r
  Double value(0.0);  2 p! i$ N0 |$ t, X9 `+ f2 n
  Long nFilePosition;  
8 b* M) h' c8 A+ s5 G( n9 C  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  
. l: N- J5 T' H  fseek( fp, m_nBreakFileOff, SEEK_SET );  , `% @9 o; G  A# \5 i
  While( !feof(fp) && m_nWorkStatus != NORUN ){  # C5 V& B) J9 c. W) j: N
  NFilePosition = ftell( fp );a  & V- Z1 z8 ?5 c7 `$ k4 `
  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  
1 }# p& s7 Q1 ~' D& T1 |  PStr = lineBuffer;  
) k: b# L9 T, r; V$ a8 C  \4 J. C  //开始分析一行并加工处理  
$ G" W! Y. T& u  While( *pStr && m_nWorkStatus != NORUN ){  
. l: I( B; n) v3 k& X  Command = *pStr ++;  
9 l+ ?9 W- s) c9 L' k( S6 U  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  
( Y6 c9 j5 t5 N8 \& U  e  Switch( command ){  ( Z) c1 M( l5 F5 F
  Case ‘G’:  
# R9 U4 `5 J2 d1 D2 B7 \0 V  G_Command = int(value);  
4 R6 d( O5 w9 n& i) @0 I  Switch( g_Command ){  
4 i6 Y/ \, M4 `+ Q6 S; J  Case 71: fUnit = 1.0; break;//公制  
6 L2 b. {/ J& j, F6 q  Case 70: fUnit = 25.4; break;//英寸  6 W6 D* [7 |! l) B) |# K' Q7 g4 u
  Case 90: abs = true; break;//绝对  
8 \. K; i5 `- ^( z! N3 \  Case 91: abs=false; break;//相对  
0 c* V( J# r8 T' J) j/ E' m6 F  Break;  
- c* i  L4 M; U( l9 ?2 n  Case ‘M’:  % {$ F, Q6 G8 n+ K0 S
  M_Command=int(vlaue);  ( J) O  X! X6 ~! a
  Break;  
6 }  I* A: m+ q2 J/ o! H+ `- }  Case ‘X’: fX = value; break;  
9 s2 ~7 b2 B9 P  H  Case ‘Y’: fY = value; break;  + ]- o6 i! D  u5 D* k
  Case ‘Z’: fZ = value; break;  
& \* L* a4 g3 R% e  Case ‘I’: fI = value; break;  
! N. {" A2 @) y- x- l  Case ‘J’: fY = value; break;  9 L6 X- D  a' l; I* i
  …  0 }9 {3 s6 L5 `5 s* w3 z8 f
  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  ' i" I. o  D2 h9 r8 K/ \+ v
  {  * s/ S* G# R' f( R! G
  switch( g_Command ){  " n. X! Q% X4 Y  J) L
  case 0://快速达到  
6 v6 h3 ~( `+ ~7 G" f0 [& t  case 1://插补处理  
0 `! v4 B5 q, S& {9 c  P! U/ z! z  case 2://顺弧处理  7 n" u4 z+ X7 g  g6 {8 v' [
  case 3://逆弧处理  0 V$ I9 e. @! y' Y8 O3 l! I
  break;  - m3 w3 D, B' B; b& w9 C
  }  
3 x" h7 M5 ]5 [- p  } break;  1 r$ h: s. r6 A" m+ P/ ]
  }// end switch command  
; D; p* o% `+ ]; w  }// end while  7 n- P" H- [9 D0 ]9 Z1 j
  }// end feof(fp)  
: P* ^) X, L: J* p  if( m_nWorkStatus != NORUN )//加工正常结束  
$ Y- L9 F6 I4 g  c8 {4 `) H  m_nBreakFileOff = 0;  
3 X# L) s% \( o: \1 `! J! m  else m_nBreakFileOff = nFilePosition;  
& h8 O* u! o; Z  m_nWorkStatus = NORUN;  
7 @) h# D4 M3 A8 U9 a( L  ~" k9 I  fclose(fp);  8 D# N$ l7 Y3 Y2 g, _6 ~
  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  . Z( \3 u/ J( `* Z% W- n' B7 ]
  五、注意事项  
) O1 L, U8 F! y* q  1.注意换刀操作和自动/手动对刀的必要性  4 D# A! k" G  o& _! i  c
  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  3 |( Y( p/ T5 x) l1 H) c
  3.加工控制时,需要考虑速度的调节  6 P! V8 x! R# z# [0 a
  4.加工控制,需要考虑图形显示带来的额外计算负担 & {. f: {4 T$ N& j% Z$ r
9 t( ~2 a  m. K5 c( Q- t" I' n. W

评分

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

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
电脑雕花培训
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容! D8 D$ _7 y% d* X7 @* k
发表于 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号