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

世纪浮雕模具论坛

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

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

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

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑
, M* m4 v; U  T' x; h2 W' d( }% M5 |( P8 N( m1 m
游客,如果您要查看本帖隐藏内容请回复
8 a6 n  u2 z5 h/ I$ k3 {
  以下控制以DMC1000控制卡为例)  
3 S  i2 L  ]6 p- P* S# q+ E6 j
  一、功能和工艺要求  3 q7 T5 G) F, x4 N$ B: M
  1.能处理标准CNC代码  : g1 P( ]5 U) j- F6 l6 w2 D5 _9 L
  2.加工精度为0.01至0.001毫米  
0 Z; w) L; J8 Z) V% V$ R) b  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  4 E! e* G& _0 F7 c7 w8 G4 I
  4.设定工作原点,控制高速主轴马达,可手动调试设备  - b& l. I8 P" B# s( P
  5.具有手动或自动对刀工艺  
% J/ w. F; W9 J) G& Z  R/ t  6.有不同刀具,则需要提示换刀处理  
4 ^$ F0 @0 H) w; u: d% r1 @1 M  二、系统流程  
( R' y: P# W' X4 \( J+ G

  E% H5 P. s) G                               
登录/注册后可看大图
4 K7 V: u+ ^3 |; ^- ]& M2 c
  三、使用函数  : Q' ~7 q/ h9 M) q5 c/ w6 n
  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  2 S( o5 k1 ?1 `! w' Q: [- b) Z- q
  对应的函数调为:  : b  H% _9 _! W7 y5 r5 g8 h
  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  9 \% K/ H. V+ v% I% q+ d
  d1000_get_in_bit 读输入口状态  
; A8 X5 v4 _7 D% `' p5 _0 C) }  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  % O6 X9 a- t/ U& z
  d1000_check_done 检测运动状态函数  
$ \# S! f  U5 A# z2 P0 j  d1000_decel_stop 停止脉冲输出(减速停较好)  + g' ~0 y+ m' W; A# s" I1 |
  d1000_home_move 单轴找原点函数  * }1 \" B6 x) G. Z# f
  d1000_home_move_all 多轴找原点函数  2 t: u0 L$ ~' O: {1 n
  d1000_board_init 控制卡初始化  
& |& i3 S) F( V1 \4 B" K* B  d1000_board_close 控制卡释放  0 k; b, c- l$ O
  位置显示及清除需要的函数:  5 V# c8 M3 e1 q% H
  d1000_get_abs_position 取得绝对位置  
; m1 Y8 F) R2 a6 Q  d1000_set_position 设定位置函数,当值为0时位置清除  - M& \: @, i" ]8 W
  加工控制需要的函数:  
' [7 v! G3 S# b" x1 l  d1000_start_ta_line2 两轴插补函数  
  h& Q- w7 ?  J( P7 p+ }  d1000_set_vector_profile 设定矢量插补速度  5 @) h9 _  n0 Z9 _) k
  d1000_change_speed 速度改变速度  6 {* ], i. Q6 v* H& l
  d1000_start_ta_line_all 多轴插补函数  , I8 Z. c: y0 `
  四、核心部分的编程  
8 \7 h' E) z# {' O* H  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。  
4 g+ B2 z9 q1 e. B7 Z  数据结构大致可用两种方式处理,各有优缺点:  
8 L$ K. T8 A5 t  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:    L; t- A( u/ a. |7 C/ }
  class Ccommand    I0 Q3 y; |- I" y: }% S$ M
  {  
- M; t8 |# W7 E  public:  
9 v* Z7 L* f3 x) I2 U  Ccomand();  
( s" f0 x2 @( }  t: `  n, Z  ~Ccomand();  
1 d2 I1 @; E( c! v- Y  char chCommand; //指令码‘G’,‘M’,‘X’  ( U% m( @  n, E9 h( @( Y
  double fValue; //指令值  3 A' o7 Z/ v# p6 X" g* X
  unsigned char nAttrib; //属性,是否行首、行中或行尾  
( M( w# b: m2 G; D$ H- `4 C  };  & o" z$ E3 z, B' _/ C" U( [+ X7 d
  从以上结构可以看出,在加工过程中,需要有较多分支:  
9 d, ?' n3 j6 X, O  for( int I(0); I ! I2 `) a, r! v2 P' W7 h* n
  {  
) t# @7 y6 W; K- m  const Ccommand &cmd = dataArray[I];  
. {% q4 n0 q  c$ _% F$ k8 L  if( cmd.nAttrib != LINE_HEAD ){//若不为  
3 H! _$ t2 {+ Y  I++;  7 F+ _! a  H. k
  Continue;  
, [- s. p3 o' N; G8 F4 s2 X  }    L4 H0 B# p; F
  switch( cmd.chCommand ){  . ?  N+ U; L( G( w& r6 X
  case ‘G’:  
2 M0 f# B& e  R9 G  switch( int(cmd.fValue) ){  ; o9 \2 m6 k1 D2 W
  case 0:  2 {) D  B! e# d6 \& d
  break;  
, ^) y4 A" `- h; m- u) Z9 v  …  8 R. Q/ t+ }$ N' I, K
  case ‘M’:  
* L8 O0 B3 {) w8 B: K  break;  " P/ w( U3 m, L4 I4 B5 N
  …  
7 W) G3 h* P, Y: C  }  ! H1 q5 C4 b8 H* s5 K
  }  
" V+ U( \: M9 e# o6 a1 u  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  ! m. d. @- N+ Z" g- c0 i3 t2 N9 c
  class CdataPoint  
/ }3 k, L* ]. m2 }% A3 H! g  {  
* c5 o4 X& G& M8 k( e( A  CdataPoint();  
9 P/ o/ P- M8 t* N  P- l& S  ~CdataPoint();  $ q0 b% @: q- T2 b) S, [& N
  double x,y,z; //记录一个位置点  
; {+ n! T+ ?( U( l  … //其它  
0 O  t# O: k2 y+ d6 i, E  }  
; o! X5 K$ b% e; L' i  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  
) Z' _9 y: q+ r4 h  FILE fp = fopen(“*.cnc”,”rt”);  6 G  s9 |$ y. ~! |# H) M% n& {9 {
  Char lineBuffer[0x80];  
9 y4 H9 ?3 k5 Y- h# ~2 d/ s  Char *pStr=NULL;  
9 Y% a% U2 t, F2 [& A9 e/ p# \  Char command=NULL;  
1 q* m, M) y) A1 z; T' v  Double value(0.0);  
; q# n  v- N' L2 F0 r- n; Z* m, D  Long nFilePosition;  
7 A0 d- J8 B% _  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  / Q; d  ]( b( w: |, _$ e+ d
  fseek( fp, m_nBreakFileOff, SEEK_SET );  % Q4 v  J5 U4 o; x
  While( !feof(fp) && m_nWorkStatus != NORUN ){  
, Q* T3 d% @$ r* p# z  NFilePosition = ftell( fp );a  ( s7 v; }; H% y9 B4 ]1 z4 x" \
  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  
1 T; _( W3 T" \6 C  L2 C4 j8 y  PStr = lineBuffer;  
8 Q1 n5 [: P' s/ d7 w: f$ Z  //开始分析一行并加工处理  1 S) X& T. C9 i2 S: f5 T
  While( *pStr && m_nWorkStatus != NORUN ){  
' X* k2 s; f# m7 Q2 n7 S0 b$ s  Command = *pStr ++;  9 T, k1 v8 @$ n9 l% I# ~
  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  % L/ `. p* o) m& H- y' O* @
  Switch( command ){  
" D' q8 _2 h( I  ]' d7 T  Case ‘G’:  : B+ l& Q' N. k4 ^. v8 G
  G_Command = int(value);  
% a3 H; f4 v- B+ n: \0 d' n. `% w  Switch( g_Command ){  , d) k- ~0 W& E
  Case 71: fUnit = 1.0; break;//公制  
5 D& n8 w$ k8 m9 v+ h  Case 70: fUnit = 25.4; break;//英寸  
7 d3 k$ v# j7 ]* F3 Z# X, R  Case 90: abs = true; break;//绝对  . P% a2 s( V, [) K( l6 }  z7 {$ p
  Case 91: abs=false; break;//相对  
. H# c4 m1 t3 n/ y2 E  Break;  9 D/ T/ m6 d  }- Z8 p
  Case ‘M’:  
' x$ S4 K0 I5 Z* S7 c  M_Command=int(vlaue);  
# z* E$ b9 s/ B9 {5 c& I: Z. F1 b  Break;  
5 H+ T$ E0 b9 [' h5 q5 r  Case ‘X’: fX = value; break;  
% m0 w+ E$ |: J' u, ^; Q  Case ‘Y’: fY = value; break;  3 @  _! f# p6 w% v; d% X
  Case ‘Z’: fZ = value; break;  
1 C/ y6 t1 L. w% j1 }7 B0 }  Case ‘I’: fI = value; break;  ( u/ Q3 x3 H+ R+ }1 k5 c" P: F
  Case ‘J’: fY = value; break;  
( z% k' T% t1 V* k$ j3 E" \' ]0 j  …  
" r$ [. T+ q& g: ~1 e  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  
3 R: C# c/ c+ x% e6 U  {  , E* Y5 y+ b/ F" Y9 F
  switch( g_Command ){  . l, g( i1 Y9 C% G6 x& F- h
  case 0://快速达到  : Q2 Y" {0 w+ M$ z$ l4 `/ q
  case 1://插补处理  
$ g( I+ s! E5 i% V; i9 D) T  case 2://顺弧处理  
! K# Y' v) S3 d; k6 w  case 3://逆弧处理  
  {. M( Z4 p% B/ H  break;  
# f1 b7 P6 V# t4 X) `' D  }  7 j% \) M1 b+ A
  } break;  
( G. F2 A; C. o5 u& A% A9 Z% W  }// end switch command  
+ h; G( }- i7 R! w  }// end while  
& `; n* [. t; U' V0 M1 l% c  }// end feof(fp)  - V9 i( C' q9 I+ p9 N: Z1 l* Z9 U
  if( m_nWorkStatus != NORUN )//加工正常结束  
7 d: }! y0 k# g4 `& M7 _0 s( ~  m_nBreakFileOff = 0;  
% N/ ]$ S$ B: N  else m_nBreakFileOff = nFilePosition;  $ Z% S3 ]8 w* I. B9 h2 v
  m_nWorkStatus = NORUN;  
% K+ h8 Z# y/ c$ D' h1 S. e! L% u  fclose(fp);  
& S6 J+ E- k! H1 S: A9 j4 i  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  ' }9 k! Y9 O4 `' d
  五、注意事项  
, ~5 t/ c# n5 G/ E  1.注意换刀操作和自动/手动对刀的必要性  
) Q9 L, q, s* r$ L  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  
1 D) n. O. c6 P) z  3.加工控制时,需要考虑速度的调节  
, p/ q5 G) \# C( Z6 e0 b& ]7 R! U  4.加工控制,需要考虑图形显示带来的额外计算负担
6 [# n& ?7 W' {+ l: ]

9 Y6 K2 w# ?  L0 G; ]

评分

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

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
电脑雕花培训
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容
  a: @9 k# P$ A- u
发表于 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号