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

世纪浮雕模具论坛

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

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

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

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑
" z8 i; ^* b& W0 D) `: n, D/ I* x
  z3 H% s- z' @' n' w
游客,如果您要查看本帖隐藏内容请回复
3 i* u8 [( s* D6 ~. B, F
  以下控制以DMC1000控制卡为例)  / Y" D* F" c1 w: e
3 @) Y! r- `% N9 o6 l' J
  一、功能和工艺要求  ( @8 }$ O1 t5 [
  1.能处理标准CNC代码  ( d2 J  _* y1 k9 D
  2.加工精度为0.01至0.001毫米  , d7 W3 r) Y( Q4 E$ e( X
  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  
) V0 T/ Y' U3 t8 T# F  4.设定工作原点,控制高速主轴马达,可手动调试设备  
0 ?  a9 P% ^3 T7 j+ H  5.具有手动或自动对刀工艺  
: h2 X0 X: l$ h. }  6.有不同刀具,则需要提示换刀处理  
9 J/ m" N/ Z3 \5 i, J. ~  二、系统流程  
) w8 Y1 g1 o# a0 N1 k

7 R0 `2 q5 Z/ R& U% b- s                               
登录/注册后可看大图
! B1 J( G( M6 |# ~: Q8 \$ P' O
  三、使用函数  
8 S4 M8 s( Y1 |! k  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  & P' C# |6 t0 O
  对应的函数调为:  8 G# E; G5 t+ ?# ?: g3 M1 c: H
  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  5 v0 i1 G) d" ?1 u- h6 d! C
  d1000_get_in_bit 读输入口状态  ( w' c$ w2 ^/ @
  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  
1 N  A6 X- J0 d, [3 {  d1000_check_done 检测运动状态函数  2 B; Z* {; E8 K* D) P; n+ R/ i
  d1000_decel_stop 停止脉冲输出(减速停较好)  3 Z* s/ l) W% B
  d1000_home_move 单轴找原点函数  ! c( `7 U. @- |( K% ?
  d1000_home_move_all 多轴找原点函数  & b  \  q9 k8 u; }5 o: h9 f
  d1000_board_init 控制卡初始化  $ a$ S. D/ ~* j" T8 R3 N, o
  d1000_board_close 控制卡释放  
+ _  t* R$ X. @; n  位置显示及清除需要的函数:  
# h6 t) J: Y' H  d1000_get_abs_position 取得绝对位置  ( U' z$ Z& d/ u$ D
  d1000_set_position 设定位置函数,当值为0时位置清除  : _/ w% u. B! y1 k7 x) \. |
  加工控制需要的函数:  
8 V+ F9 b0 ?0 a3 {% F- T" r  d1000_start_ta_line2 两轴插补函数  % P$ I) }# t& w4 ^6 j
  d1000_set_vector_profile 设定矢量插补速度  3 b8 {6 Z, _. L3 A) R
  d1000_change_speed 速度改变速度  / Z+ U# h0 D* A3 M' }' d
  d1000_start_ta_line_all 多轴插补函数  - {: a! w- ^4 C8 H' B' K9 ?) _
  四、核心部分的编程  ( s7 q, G4 t2 u# T& V
  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。  3 P( Q4 [; E# a
  数据结构大致可用两种方式处理,各有优缺点:  / k5 m' ^3 E5 z5 ^( t
  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:  1 m9 q1 A2 x5 M8 s
  class Ccommand  
: h  n( m  V( X  {  + ^" R/ T$ w! Z: K8 g# v; r; l
  public:  
$ Z2 N) m$ p) ~: U; r0 h  Ccomand();  
# @% _, W: V- I; f3 b, i  ~Ccomand();  : O0 U' A% ~6 {+ z5 K# d5 r
  char chCommand; //指令码‘G’,‘M’,‘X’  
: E) ^+ W5 T' l  double fValue; //指令值  2 I+ d- }( s8 m- B+ `6 c
  unsigned char nAttrib; //属性,是否行首、行中或行尾  
" b9 U% g1 [# P" N6 x  };  8 |# y/ D- Y5 R0 `
  从以上结构可以看出,在加工过程中,需要有较多分支:  
8 @9 g$ L9 w3 h! g" g; K* j  for( int I(0); I 8 B7 Q9 u. v* X2 b, t) t' z
  {  
% p! w3 v9 Z* C6 ^' ~  const Ccommand &cmd = dataArray[I];  ' c7 P2 n" J3 y6 C2 _
  if( cmd.nAttrib != LINE_HEAD ){//若不为  : T9 o6 k2 o, ?$ I
  I++;  , E  S  G! b( f) f! J
  Continue;    B3 s: O. V4 G6 q- f; ~
  }  
; T3 b5 {. c1 ]+ w' i* A  switch( cmd.chCommand ){  $ T, M* \5 U4 A/ H! s" f" V; B
  case ‘G’:  . ?' j: w6 c4 D1 B/ R: `6 m! E
  switch( int(cmd.fValue) ){  
( g$ b$ c" x, f& D; o  case 0:  
' {# V, x+ H9 j) M  break;  
. F' w$ Y9 ?! ^- w+ L  …  
+ T* U+ F- m; J: V. n8 X  case ‘M’:  
6 p6 s- b" T/ z, J  o9 R  break;  $ |1 r) q4 L) s* l2 S8 W5 Q! ^! Y6 v
  …  
" V0 }5 u  W: Z( @  U0 f2 N- z7 S  }  ; s/ v" W8 V- Y) G5 t5 W/ z  X
  }  
, ~7 ]% N1 I5 v* ?  C  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  
1 [' @, I9 ^: g' \" X3 J  class CdataPoint  , L7 ?$ \: K0 v0 z& @. g( E% I
  {  
$ r0 ]8 P8 S0 Y  CdataPoint();  0 s1 |' e; D# Y$ k6 w; X9 t
  ~CdataPoint();  
- y! D; _! ?& Q7 U; Z  double x,y,z; //记录一个位置点  6 z* f9 L; u4 S" ~' r% f; I
  … //其它  
3 u$ o2 E% E$ V" \' L! ^  }  
4 C% }, F$ y2 V# _- S- K5 r  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  
0 K1 p) H( N! l3 r: i3 d6 ^& {$ Z  FILE fp = fopen(“*.cnc”,”rt”);  
4 y  \/ ?% M( `+ H1 B- v8 l' N$ ~  Char lineBuffer[0x80];  
, _6 X( v9 C! l7 ]! g% j  Char *pStr=NULL;  7 [: S  Y$ S! V1 L- `0 u  d/ @
  Char command=NULL;  
7 ^4 e" z. Z# c. f0 f5 u1 p  Double value(0.0);  2 q( |% g. {6 m" G) I- d
  Long nFilePosition;  
8 \2 a' Q: @, i; L7 q/ |  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  : J4 B0 @3 I# Z) r, R/ K
  fseek( fp, m_nBreakFileOff, SEEK_SET );  $ n6 y$ q/ J, ^* h% r
  While( !feof(fp) && m_nWorkStatus != NORUN ){  
; S9 v& N# ?4 b; K' z' L  NFilePosition = ftell( fp );a  
# q* b( D% y9 W! s1 E- e5 M  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  3 x8 R$ g. q; f/ r- p" \
  PStr = lineBuffer;  9 o0 |$ k3 z* h0 G" T# E: D, B1 H# y
  //开始分析一行并加工处理  
! y2 C) W( C0 G7 R  While( *pStr && m_nWorkStatus != NORUN ){  
1 R0 V; t6 Z0 \0 D( q( ^  Command = *pStr ++;  
& T! |7 @4 V  l  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  ) }0 @' M! M/ s" O- U" [
  Switch( command ){  
$ [! K1 F+ i+ m* n; ^, A  Case ‘G’:  + J" g! `% o1 @) l7 H' V* ?3 _, r
  G_Command = int(value);  
1 v; D# \4 c. ~  Switch( g_Command ){  5 a3 N* Z6 p1 W/ p1 U0 _& I6 V
  Case 71: fUnit = 1.0; break;//公制  
0 I9 Z9 `3 d8 e& a& Z) j2 s  Case 70: fUnit = 25.4; break;//英寸  $ u  j: Q+ p* k
  Case 90: abs = true; break;//绝对  & ]5 u6 z7 w5 y2 o8 W
  Case 91: abs=false; break;//相对  
4 ?8 K3 g& Z' p! X/ X/ M  Break;  + `: L( P2 h- k+ R
  Case ‘M’:  $ a9 b- |+ P# S7 B$ g5 E2 V+ _
  M_Command=int(vlaue);  
0 Z% L: L4 ?$ n" G  Break;  7 v' a) N5 f9 h. |9 \
  Case ‘X’: fX = value; break;  + P4 {4 L+ I( }. K
  Case ‘Y’: fY = value; break;  
% M+ o4 b  s  v6 X7 x" O9 z0 M  Case ‘Z’: fZ = value; break;  
" f2 c# \8 |5 q; `" a! H/ W5 X  Case ‘I’: fI = value; break;  
$ h) x" L9 J- w4 `) t/ Y  Case ‘J’: fY = value; break;  
/ b* Q, C# B" ]: t; }  ]1 T  …  
0 l) Q% {/ _+ O& k7 W2 h  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  
2 }* h% ]3 k  M) V4 V  {  
8 H1 ~! j) L  Z9 n3 P0 f  switch( g_Command ){  
8 C  i" W; U" P* @  case 0://快速达到  " w! W: {8 g* f5 b( V+ \5 f- V. E
  case 1://插补处理  . ^. E$ U% M  _
  case 2://顺弧处理  
& e1 ~- O5 j0 ^  case 3://逆弧处理  
4 e5 y% ?/ `' w" X( C( b5 k: h9 Q7 H  break;  
5 B+ S, r1 {, h+ s! R: v# E8 \  }  , ~! \- a! U% r/ C7 p4 }6 q
  } break;  7 S, N( u# ~4 ^, K; Y1 a" h! z. |/ a
  }// end switch command  
8 b& N5 @% V4 _3 p7 O, S8 ~# Y  }// end while  + H5 C) [1 x: h+ r9 P) O, }
  }// end feof(fp)  1 c( R$ ]" |- L- D. k& z$ `
  if( m_nWorkStatus != NORUN )//加工正常结束  
# Z$ q$ C3 H) n+ `  m_nBreakFileOff = 0;  
, k% F8 o; n  a* [' _  else m_nBreakFileOff = nFilePosition;  
- c/ H3 y/ P; _5 j& R4 C" e  m_nWorkStatus = NORUN;  4 }: e6 m- n! h0 l8 g% S
  fclose(fp);  
3 }! G2 A! y; T% i( i4 \  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  , e2 B; L, p* V+ C/ G
  五、注意事项  
) J5 v' d; w+ ~) D' r  1.注意换刀操作和自动/手动对刀的必要性  
8 d2 \" Q& d, I4 S/ m$ @: q  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  3 U$ ?4 Q  r) G3 s6 w0 @& |  i
  3.加工控制时,需要考虑速度的调节  2 X: q( H4 O, h- J
  4.加工控制,需要考虑图形显示带来的额外计算负担
; N4 E$ W/ t! o

, s8 ~7 M0 c& M

评分

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

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
电脑雕花培训
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容
- I; ]% |2 i9 N! w
发表于 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号