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

世纪浮雕模具论坛

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

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

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

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑
2 Y/ Z  M/ L/ d8 @7 L& H' F1 p! R& B& n
游客,如果您要查看本帖隐藏内容请回复
1 F: E0 Z5 U$ U; Y
  以下控制以DMC1000控制卡为例)  
* F+ u1 @2 d! R* d5 K& i6 C% y( V: ]. Q! x; `& k+ l3 f
  一、功能和工艺要求  
( B, O0 _5 |$ T! C9 }: c6 G  1.能处理标准CNC代码  
3 n+ ~  O$ M4 }8 r' O' E1 l  2.加工精度为0.01至0.001毫米  
3 Y% _2 {, B7 u. K! B  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  
" O" h* d  P% V9 W9 @  4.设定工作原点,控制高速主轴马达,可手动调试设备  
. ?( L) n+ v' r+ l5 ~  5.具有手动或自动对刀工艺  
, L6 G4 w: O2 E. \% U. x6 z7 r  6.有不同刀具,则需要提示换刀处理  
& ], Z3 m7 ?7 Y: u, {, l% h  二、系统流程  ) i' c' L( t$ N, l# L, g9 e

; Y( W, y4 E' b                               
登录/注册后可看大图

8 ^( @9 z- _: V  三、使用函数  # x# ]( ~. y. p5 j" Q
  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  
$ {1 n! z/ S" Z  o6 n( h  对应的函数调为:  
# i7 L7 h; _) h5 p2 c  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  9 r' f# i% h# a6 f; \/ L
  d1000_get_in_bit 读输入口状态  
+ ~7 O$ T' S. [5 o  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  & Y% H" K' J3 H# P
  d1000_check_done 检测运动状态函数  / T6 `! N8 x( J4 n( y) d2 }, u; h0 w
  d1000_decel_stop 停止脉冲输出(减速停较好)  / w, b$ z! V* {4 @3 ]+ T5 G. W, i
  d1000_home_move 单轴找原点函数  " x7 n) ?! [8 L% \" r4 w2 m) ^8 A
  d1000_home_move_all 多轴找原点函数  , F) u: e7 |2 G
  d1000_board_init 控制卡初始化  3 h9 h) A, D3 ?
  d1000_board_close 控制卡释放  5 W" T3 T  o0 H8 O
  位置显示及清除需要的函数:  
7 c! K& e* @. n) _& I3 \' {7 f  d1000_get_abs_position 取得绝对位置  6 i$ H9 M; q5 J6 Y
  d1000_set_position 设定位置函数,当值为0时位置清除  
' z! k2 H, ?3 V8 A3 p  加工控制需要的函数:  3 i" Y6 a+ E9 i( b. i! j
  d1000_start_ta_line2 两轴插补函数  . H( R- w# q" M0 M5 d9 X
  d1000_set_vector_profile 设定矢量插补速度  
, V6 c9 l0 ~( d) S$ x9 J: [  d1000_change_speed 速度改变速度  
$ {; _% P1 F$ v$ ^" O/ Q7 D- |  d1000_start_ta_line_all 多轴插补函数  
/ S4 ?7 B  `+ Z9 Q) M' q  四、核心部分的编程  5 i) V; W1 i/ @. s. @
  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。  
" H# k0 ~! t1 Z/ N8 z. o$ q  N* t4 D  数据结构大致可用两种方式处理,各有优缺点:  
/ Q7 Q( H/ U. N+ _  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:  . Z2 {3 E0 G5 b$ v3 \+ O
  class Ccommand  1 {. b& Q) Q7 I; o/ s
  {  
$ e" ~; e+ D" U" h. P. `  public:  
+ j5 g( Y- C6 @+ A* N  Ccomand();  ( O7 W3 Y! G8 Q# F6 F1 K3 @
  ~Ccomand();  
& L% w2 o! Y* ^$ C4 C( n  char chCommand; //指令码‘G’,‘M’,‘X’  1 V% H$ @! |, _- ]
  double fValue; //指令值  ) [' Y0 g  `. q9 J9 U6 _, F
  unsigned char nAttrib; //属性,是否行首、行中或行尾  2 D6 D% ~+ _$ V" F" l
  };  
# g+ |6 ^% d6 H3 l& p- o" k. i  e* r  从以上结构可以看出,在加工过程中,需要有较多分支:  % \/ `" a- G! d4 E8 m8 X
  for( int I(0); I # h6 R$ d1 x. }$ H2 q3 l6 X  b1 W
  {  ! u3 y: @1 z- n3 R
  const Ccommand &cmd = dataArray[I];  " s5 w$ b9 w% E& F+ x" |! g
  if( cmd.nAttrib != LINE_HEAD ){//若不为  
9 z4 J0 E: e1 Y7 ?& i. P$ {( Z6 z7 E  I++;  
6 c8 [$ P' z- d6 L) ~* F  Continue;  
1 D0 T" }4 ^9 z2 A% k  v/ p  }  
/ _! J% b* O- ^+ h5 V7 j  switch( cmd.chCommand ){  
& T, |9 V# |3 h1 b) O  case ‘G’:  - A' R7 T$ g8 u" l
  switch( int(cmd.fValue) ){  
$ T% E$ E  P" V; l  case 0:  
) Z, x# _$ x$ W$ U  break;  
+ @& a8 A4 A9 `& j  …  
% L! \5 q  a, [4 S3 v4 v) L' A" C  case ‘M’:  
- y  B& r. z$ \. y  break;  
( w5 _0 o3 |: p8 c& c/ ^8 g7 L+ A  …  5 Z* d, S/ R) {
  }  2 Q5 `! M& G& \4 Y; V, \
  }  * H8 e. W0 F% W3 |. p
  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  
8 E' y6 Y& L( ?6 b  class CdataPoint  0 R7 }/ J4 ?% f/ ]1 q
  {  
9 r* ?6 r  y: c% k2 G8 b  CdataPoint();  # _& J& B6 D# N8 g7 C+ s3 ]/ a# v
  ~CdataPoint();  & ^+ R, f! c* u- K
  double x,y,z; //记录一个位置点  
# z2 a7 f# F9 S9 S: a  … //其它  
- E1 n, I6 U, o$ g* U  }  / i3 n$ j) k/ R+ T0 ?
  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  
+ b/ g/ F: S% q. ]  FILE fp = fopen(“*.cnc”,”rt”);  
2 y% l" A- _9 j! d  Char lineBuffer[0x80];  : E# [6 Q( W; M. O! W
  Char *pStr=NULL;  ! `5 m, J5 M& G, c2 ^7 s6 U
  Char command=NULL;  
! @" w' J3 s$ `1 g9 E% j  Double value(0.0);  
5 e8 a3 d% _/ _. L  Long nFilePosition;  ) Q  C5 k3 E- ~- D/ n+ E4 O% J
  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  
0 R: D; s+ p/ T  fseek( fp, m_nBreakFileOff, SEEK_SET );  / c( [( P! L" L# _5 _# x4 g
  While( !feof(fp) && m_nWorkStatus != NORUN ){  
& s- F9 }+ p. t9 y7 ^! k% Q% C  NFilePosition = ftell( fp );a  1 W+ c! [# C6 R9 U7 T, ^
  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  0 G2 c  [( G- t& p" h3 n5 K) [# D
  PStr = lineBuffer;  0 }/ U! X6 p2 T! z' Z
  //开始分析一行并加工处理  1 X% p" B5 X! _/ [
  While( *pStr && m_nWorkStatus != NORUN ){  
& i# g0 @* r5 s1 U; a! W. S$ D4 y  Command = *pStr ++;  
; P1 l/ I1 E5 p  H4 W) ^  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  
$ U  q5 t9 G( T  Switch( command ){  ) \- y* x' z( v5 e' o  i3 S
  Case ‘G’:  
0 o  f1 E! O9 P+ s3 g- O, r; B. }  G_Command = int(value);  9 [5 G! D* X+ T3 s- N6 B
  Switch( g_Command ){  
5 O" l3 A* Y5 Q6 F+ d4 G3 Y  m  Case 71: fUnit = 1.0; break;//公制  3 R2 u& y0 K6 N9 O
  Case 70: fUnit = 25.4; break;//英寸  ; e. l$ ~& t2 C, P1 E
  Case 90: abs = true; break;//绝对  ' I; j* D* r2 Q8 L
  Case 91: abs=false; break;//相对  
& D& y. Q! B' e) M# z  Break;  # N2 d* _) a0 c- G) p
  Case ‘M’:  / @3 v* Z- A. b  W5 ~" {% x- U
  M_Command=int(vlaue);  
) j9 e! H( W. [6 t  Break;  
' u2 S6 p' {% p( X6 Y  Case ‘X’: fX = value; break;  % r4 T" u) M5 S- k
  Case ‘Y’: fY = value; break;  ' f9 g" ]2 M& d& u  A  l
  Case ‘Z’: fZ = value; break;  - `! K& g! f* v$ p
  Case ‘I’: fI = value; break;  
! L7 ]8 v* v8 z& x' s  Case ‘J’: fY = value; break;    O% K  G3 h! }6 `( |- a
  …  2 E) m( Q# K' a$ c) d4 n
  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  6 k4 T* T. p& f( p
  {  
! z, \; \: z% L  switch( g_Command ){  , o+ D( ~, g# G2 ?
  case 0://快速达到  
* ^6 @" H1 @9 e) l3 l9 ^% @: ?  case 1://插补处理  : t0 Y  t6 @! E
  case 2://顺弧处理  / g. z  H+ \/ i9 ]
  case 3://逆弧处理  6 [% l1 r# s8 M3 x4 @! h0 y; }
  break;  - K0 W7 Y+ T) N3 k, F9 f) D
  }  
" V& L% d0 z; ?% d' y  } break;  
% d2 N1 c& F+ P' E$ T  }// end switch command  
4 r" U7 @& q+ i* D( o  }// end while  " b) @' u* z! B
  }// end feof(fp)  
3 a8 S) c9 t5 Y1 ]# o. ^5 p. \  if( m_nWorkStatus != NORUN )//加工正常结束  
& q5 t! R8 n; @8 j  m_nBreakFileOff = 0;  
0 [+ m9 k+ i, Y; f- R' T! {4 E  else m_nBreakFileOff = nFilePosition;    t' k. Z3 |2 q& i* t6 V/ S' J
  m_nWorkStatus = NORUN;  
! q' `6 R9 \& f1 H5 o+ Z  fclose(fp);  + I3 R0 J2 L- l9 E* `4 h* U# B( q
  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  
  I5 l7 [: N) y0 S! h# C  五、注意事项  
5 S' ]" t3 {0 t! z" Q- i# N4 J2 o  1.注意换刀操作和自动/手动对刀的必要性  - ?1 s( a& Z* Y
  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  
) [1 d( S. L/ ^1 x2 c. ]8 M% c  B8 X  3.加工控制时,需要考虑速度的调节  
$ ^4 D+ r% u, B, a! A  4.加工控制,需要考虑图形显示带来的额外计算负担 7 W! R  V0 Y1 X% M6 Z" q, D& Y
+ ~' d/ X3 L* k2 l3 f5 P

评分

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

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
电脑雕花培训
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容
7 @% g! Y- I2 g* y# q& S, 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 )