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

世纪浮雕模具论坛

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

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

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

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

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

x
本帖最后由 孙建朋 于 2009-11-18 13:32 编辑 / o& A6 r3 t9 ~2 i" L; T1 F& ?# r8 e

6 g5 A+ }3 ?5 G; J/ a) C2 j+ ^
游客,如果您要查看本帖隐藏内容请回复

9 b- g( O6 S3 Z0 y. u  以下控制以DMC1000控制卡为例)  ! h- ^! t( B& ^5 d9 ^$ _
9 N0 t, G% X: |& H, B1 |" W5 ]; V
  一、功能和工艺要求  
" t: ?1 o) B7 v/ x4 {  1.能处理标准CNC代码  3 q2 T7 V! ?+ }
  2.加工精度为0.01至0.001毫米  
+ N- t# [/ v4 s9 y/ ^0 ?& D2 I8 L  3.加工控制能中断,并可从中断继续加工,或指定加工。可以模拟加工。  , N( Z6 o* R3 G+ M; F. ]
  4.设定工作原点,控制高速主轴马达,可手动调试设备  : L0 J( g& f! y3 B5 `; }' E0 P1 Q
  5.具有手动或自动对刀工艺  
! y: z* x7 `! f3 J  6.有不同刀具,则需要提示换刀处理  
  N6 A* x. z! j: G  二、系统流程  
6 T2 |7 q) Q4 r3 ?
8 H, A/ r: Z. T) b: q! n- {6 p
                               
登录/注册后可看大图

* P; T9 }. o& g$ l1 ^: N0 X  三、使用函数  4 n$ ~) Y8 V, _1 z+ x" Y1 E" R
  手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:  : d0 L3 V" u! x- W/ E
  对应的函数调为:  # S  b: I' R5 x% j5 f! G: ]2 h  d
  d1000_out_bit 数字输出函数,可以控制高速马达的开启或关闭  6 v$ t( V6 ~6 A& b
  d1000_get_in_bit 读输入口状态  
  @. k. y- [. |# c/ j  d1000_start_tr_move 手动发脉冲,可使用单轴点位运行  ) s2 Z- @6 X# X  }. V4 b& L
  d1000_check_done 检测运动状态函数  
- }9 X0 B* R2 m5 g# p" s- Z( Z  d1000_decel_stop 停止脉冲输出(减速停较好)  8 {( C% E: |$ K- b) J3 `
  d1000_home_move 单轴找原点函数  
. Q, G' q) b8 |. h* p0 J/ F# g  d1000_home_move_all 多轴找原点函数  
- M( Z/ y% R5 t# d  d1000_board_init 控制卡初始化  0 B; ^  F5 G$ u5 |0 r6 w& T% t
  d1000_board_close 控制卡释放  3 X2 X& d, V) K2 _
  位置显示及清除需要的函数:  - N/ v: T- I, u. _- @5 m
  d1000_get_abs_position 取得绝对位置  
9 d' p2 N8 `2 x3 G2 C, F6 \  d1000_set_position 设定位置函数,当值为0时位置清除  9 n! t+ p9 u& h0 d" P
  加工控制需要的函数:  
" j; z5 U4 d' ^8 g% R) C  d1000_start_ta_line2 两轴插补函数  
: `# L% a' i, D* m' L( r( }- Z0 V  d1000_set_vector_profile 设定矢量插补速度  
  ]% T" D; D7 j9 _5 l2 v9 j* _  d1000_change_speed 速度改变速度  
2 r( M  u* |3 s1 _" Q4 N5 F1 M  d1000_start_ta_line_all 多轴插补函数  
% Z/ |) q, E4 ?9 i. A6 ?4 a  P. i  四、核心部分的编程  
& r+ j7 Z6 O! m0 W% C: Z  控制部分编程相对其它加工工艺较为简单,大致只要真实地按CNC代码行加工即可。通用需要一数据结构记录其信息。  
) @9 d# u( o# e, H; s  数据结构大致可用两种方式处理,各有优缺点:  3 w( k8 {- Y! r; E* B; m
  一种以指令为中心处理方式,此种方式分析代码速度较快,加工起来需要较多分支:  
: D) E6 W8 H' l, s5 w' j  class Ccommand  & |5 J" \" @6 x$ R( ^1 S% C
  {  ' T4 b* g) l( w& u( u
  public:  
* W. R/ L0 w# z  Ccomand();  ( i' F! l* i( p3 E, r
  ~Ccomand();  ! r9 C* ]! p0 l3 O1 _( e% g6 \8 j
  char chCommand; //指令码‘G’,‘M’,‘X’  + r% ]9 n) ^8 u. }* I& S& R3 J
  double fValue; //指令值  
: p$ s* |- l0 U  unsigned char nAttrib; //属性,是否行首、行中或行尾  4 o& P) w: k! s; k$ r/ \( |% n
  };  
( M7 h5 Y+ O; a: ^4 ~6 Z& R$ [  从以上结构可以看出,在加工过程中,需要有较多分支:    k- v0 x* [! x" h) L3 b3 q
  for( int I(0); I 0 b! X% k* s' b2 P  H' r4 T9 F3 K6 _
  {  
) V8 b! C' \+ ^5 X) @& ~  const Ccommand &cmd = dataArray[I];  $ f. B  G" Z& L- D( I) {
  if( cmd.nAttrib != LINE_HEAD ){//若不为  2 @9 I3 H4 v' l
  I++;  
+ W6 m: U( F- J/ c  Continue;  
% P. N- r) Q+ j+ \- G  }  
0 h7 z2 m- {" z$ _1 C: c+ c, `+ q  switch( cmd.chCommand ){  * J/ K: b5 R' R- _+ z/ m% Z. d, V
  case ‘G’:  3 p. Y6 p2 H, g) Y" a/ U2 j
  switch( int(cmd.fValue) ){  
# B8 q9 e9 M# E6 u2 O  case 0:  7 f1 D# w& f. C
  break;  5 F2 Q7 @. F, A& R* L  |
  …  1 c8 s9 X# Q9 n+ z: c
  case ‘M’:  6 U; q0 e1 H5 x
  break;  
. X3 Q* l3 H; |4 u9 ?! B  …  ' {" d  H" O" K# ^
  }  % ^+ Y' R3 Z; o# P! I3 x
  }  
' ]9 n9 ?/ e/ j/ j7 k5 N: w  在实际编程当中,需要考虑较多因素,以上编程的应用将会较为麻烦;故可以考虑用以下方法:  0 Z2 z6 s/ }1 M2 P# P* Y; q
  class CdataPoint  / b5 j* S$ ?& P  I! \: d6 S# A6 [' i
  {  ( W' W( j6 ~7 t& W
  CdataPoint();  
" n1 f4 n0 g. G5 u; Y' i, W! G/ C  ~CdataPoint();    E- x5 {8 U0 _
  double x,y,z; //记录一个位置点  ) }4 b& h* B: V$ X3 E# G: t
  … //其它  
, G- q9 g7 Q5 a; S* D" t- F* a7 y2 p  }  
) Y5 ^+ e! x$ w5 z! j6 h5 I6 A* W  此结构适用于简单的图形加工处理,对于其它M,F,S,T指令需要另外处理,视用户雕刻机的适用范围而言,且文件不宜太大,若要全方向考虑各种指令,及文件尺寸的兼容性。采用文件的实时分析加工是较好的策略。但要注意文件读取带来的额外开。若为DOS系统可加载Himem.sys的管理程序smartdrv.exe。文件读取可采用一行读至内存缓冲,然后从内存中分析,此方法便于文件位置的处理,大致可以写成伪代码如下:  
! i) B4 ?( ]; q! Y6 Z  FILE fp = fopen(“*.cnc”,”rt”);    M$ u" d! u$ k! N: t: E+ P' z  C
  Char lineBuffer[0x80];  
1 l) N  C! K. Z  Char *pStr=NULL;  + u% B6 X" ^' p- m
  Char command=NULL;  
" V" y, [, z0 `+ q" `4 z  Double value(0.0);  
9 ?' b: s9 D% s2 o* Z1 N  Long nFilePosition;  & w) Z" k8 e% G3 R7 y  |5 r
  //从断点开始加工(若需从头开始,则只需要置m_nBreakFileOff为0即可  
; A' Q) y3 o& V; L% E* B; Y# j  fseek( fp, m_nBreakFileOff, SEEK_SET );  
( [- o3 V# `. K0 ~! `  While( !feof(fp) && m_nWorkStatus != NORUN ){  
# Y& @  C# l2 Q  Q! p% t+ c* A, A& T; @  NFilePosition = ftell( fp );a  ; i$ z* E, m+ T; o4 Q+ Q
  If( fgets( lineBuffer,0x80, fp) == 0 ) break;  8 \1 Z) j* M& N# r, a
  PStr = lineBuffer;  + {" u7 E5 u; F3 t
  //开始分析一行并加工处理  & q  W$ _9 W/ D# M
  While( *pStr && m_nWorkStatus != NORUN ){  ; _7 \. v  ^* T, _. h) T! I
  Command = *pStr ++;  
$ ~8 i6 [7 v5 S) T3 F8 F  If( ReadValue(pStr, value) == -1 ) continue;//ReadValue函数为自编的读取有效数据的函数  
+ a* Z6 E. H9 j  Switch( command ){  # m3 m+ X! }/ h& O# M& V- ?
  Case ‘G’:  , w2 I  f" m4 o' t; o& _* ?2 C
  G_Command = int(value);  7 T* m8 j& |, W: N
  Switch( g_Command ){  2 ~; o6 s. I2 }6 z$ L
  Case 71: fUnit = 1.0; break;//公制  ! U3 O) f& T& l  t7 A( o2 r  K! x: m
  Case 70: fUnit = 25.4; break;//英寸  * V4 j, B* N# d5 y
  Case 90: abs = true; break;//绝对  
1 H% j( n3 z5 T9 D" A4 U' p  Case 91: abs=false; break;//相对  $ Q- \/ ^  X& A
  Break;  
$ o) @+ V, b' m0 R$ ~  Case ‘M’:  " P, X3 b2 ~. s* F
  M_Command=int(vlaue);  3 ^7 `' R; A. ~+ @4 Z( e, t
  Break;  # D: X1 _& u5 r3 e
  Case ‘X’: fX = value; break;  
- V8 P8 }8 F( l+ Q) u% B# j. `  Case ‘Y’: fY = value; break;  
" L4 x% T7 V& S; V  Case ‘Z’: fZ = value; break;  
  N8 A5 N+ W, i+ {) h; _7 ?  Case ‘I’: fI = value; break;  * ~4 [  W8 Y9 J, z* O
  Case ‘J’: fY = value; break;  , z0 Q! r$ G7 m# u
  …  % F% C: a+ @! R+ {% @) l% R- Y
  Case ‘\n’: //一行结束(此处可单写一些可调用的函数,以便程序阅读)  ) `7 y+ i9 g% @2 |1 h
  {  & y; B( B0 j  i! m& T) Y
  switch( g_Command ){  7 l' q6 j6 }! w7 B* z
  case 0://快速达到  
" |8 A3 Y2 u, v. F# l* Z+ t  case 1://插补处理  
* a" m3 ^9 V( q& I6 U  case 2://顺弧处理  5 T; C2 h8 f5 e4 S) }9 t# j+ v( T" t
  case 3://逆弧处理  ) J" N1 o& g7 Y" ^7 H: r
  break;  
1 y' N. i' Y- X$ k- m* C  }  
/ M3 E6 T' J8 A9 X& p( |  } break;  : Y* B2 N- m1 H8 y
  }// end switch command  
1 U+ q2 y! v( D! S7 j& t  }// end while  " z2 Z% ^# G) s$ E; ~1 Z
  }// end feof(fp)  & H  E: m: m0 O: m7 z
  if( m_nWorkStatus != NORUN )//加工正常结束  % r: z" V6 v9 b6 K; d! ^' P" L5 v% p
  m_nBreakFileOff = 0;  
, f. G# J9 D3 l4 t" q+ K3 ^  else m_nBreakFileOff = nFilePosition;  + r' w7 J$ f2 R! M
  m_nWorkStatus = NORUN;  1 M" q" j9 W* v7 c# w( m# `9 [
  fclose(fp);  ) E& y) t7 h0 B9 O. S
  以上的文件处理方式,其大小与内存无关,只要求程序员写出流程较好的程序,写出分析及读取速度较快的函数,即ReadValue函数(请不要小瞧此函数的效率,若有参考需要,可致电索取)。  2 B6 @0 ?8 x4 x
  五、注意事项  
) R: S, ~9 A  h# S  1.注意换刀操作和自动/手动对刀的必要性  $ S' j( T/ ~9 Z" K
  2.加工控制时,需要考虑断刀加工,暂停/继续的处理  3 `) F  ?7 C& f9 v
  3.加工控制时,需要考虑速度的调节  
* J1 L% h/ d+ |" U0 m4 J  4.加工控制,需要考虑图形显示带来的额外计算负担 ' X. H0 k5 F( ?. [

6 z6 e/ O+ t5 O# O8 J% q

评分

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

查看全部评分

发表于 2014-8-16 15:00:45 | 显示全部楼层
【雕刻技术讨论群】:35964688
发表于 2014-7-26 01:15:29 | 显示全部楼层
电脑雕花培训
有技术含量,顶起来看内容
发表于 2014-7-26 01:13:44 | 显示全部楼层
有技术含量,顶起来看内容9 y5 ~# j5 j) W, w  T) L+ t( ]( P
发表于 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号