DMC1000控制卡在激光切割中的应用

一、功能和工艺要求
1.接受常见的平面矢量图形文件,如plt,dxf。
2.处理图形加工的先后顺序,及加工方向。
3.能简单处理图形,如选择,旋转,平移,镜像,复制,排列等。
4.可手动调试设备,及检测输入输出。
5.加工控制能调节速度,需要暂停,继续,中断等控制。
6.加工需要显示时度,时间,位置等部分用户信息
7.可设定加工工作原点,激光开关控制(此处不关心激光能量调节)
二、系统流程
三、使用函数
手动调试需要完成的功能:输入输出测试,手动驱动脉冲,检测运行状态,停止动作,找机械原点:
对应的函数调为:
d1000_out_bit 数字输出函数,可控制激光的开启或关闭
d1000_get_in_bit 读输入口状态
d1000_start_tr_move 手动发脉冲,可使用单轴点位运行
d1000_check_done 检测运动状态函数
d1000_decel_stop 停止脉冲输出(减速停较好)
d1000_home_move 单轴找原点函数
d1000_home_move_all 多轴找原点函数
d1000_board_init 控制卡初始化
d1000_board_close 控制卡释放
位置显示及清除需要的函数:
d1000_get_abs_position 取得位置
d1000_set_position 设定位置函数,当值为0时位置清除
加工控制需要的函数:
d1000_start_ta_line2 两轴插补函数
d1000_set_vector_profile 设定矢量插补速度
d1000_change_speed 速度改变速度
四、核心部分的编程
在实际编程当中,有较多细节需要解决:
1.需要考虑响应加工暂停,继续,中断的操作,位置显示等
2.暂停后xy位置需要记录,有可能xy被手动移开
3.加工完整个图形,需要回到一停止位置,以便取料
4.开激光关激光,需要考虑激光的反应时间
5.在实际应用当中,当激光未开启时,为提高速度,可直接采用点位运动
6.需要需要速度的调节处理
注意:以下代码只体现只实用的编程思想,不会能通过编译器的编译
const uint norun =0x0000; //空闲,或中断状态
const uint running =0x0001; //运行状态标识
const uint continue =0x0002; //继续标识
const uint pause =0x0003 //暂停标识
uint m_nworkstatus = norun; //记录加工状态,初始化为norun
void onbuttonstart()
{//开始按钮(可当暂停,继续,开始用,在某些情况下,继续与暂停隔开较好一些)
if( rundata.getsize() < 1 )

messagebox(“无加工数据或未生成加工路径”,”提示”);
return;,

switch( m_nworkstatus ){
case norun://若空闲,直接加工
m_nworkstatus = running; //运行
rundata(); //调用加工核心函数
break;
case running://若在运行,则中断
m_nworkstatus = pause;
stopmove( x,y ); //停止xy驱动
break;
case pause://若为暂停
m_nworkstatus = continue;//继续处理
break;


void onbuttonstop()
{//中断加工处理
m_nworkstatus = norun;
stopmove(x,y);

double frunspeed(10.0); //加工速度
void rundata()

//数据rundata的定义为: carrayrundata
//cdpoint的定义,可参见[编程技术]的资料
const int nsize = rundata.getsize();
//处理进度度
progress.setrang(0, nsize);
cdpoint pntbreak; //暂停时记录的断点
bool bpause=false;
for( int i(0); i

::doevent(); //一个系统消息处理函数
switch( m_nworkstatus ){
case pause://若为暂停,只管循检系统消息
continue;
case continue:
m_nworkstatus = running;
case running:

if( ismove(x,y) ) break;//如果xy在运行,则继续检测系统消息
const cdpoint &pt = rundata[i];
if( i == 0 || bpause )

bpause = false;
//快速到达*点或断点
i == 0?
fast_moveto( pt.x, pt.y )://达到*点
fast_moveto( pntbreak.x, pntbreak.y);//达到断点
while( ismove(x,y) ) :: doevent();//等待达到位置
if( m_nworkstatus == running )

openlasert( nio ); //开启激光
sleep( ti_open ); //开启延时

continue;

con_line_move( pt.x, pt.y, frunspeed );
//此处用匀速,因为激光切割速度不快
while( ismove(x,y) ) ::doevent();
if( m_nworkstatus == pause )

closelasert( nio );//关闭激光
sleep( ti_close );//关闭延时
bpause = true;//有暂停
pntbreak.x = getx(); pntbreak.y = gety();//记录断点位置

else
if( m_nworkstatus == running )
{//正常完成一个数据点
i ++;
progress.postmessage( pm_pos, i, 0 ); //更新进度条

}// end case running
}// end switch workstatus
}// end for i
closelasert( nio );//关闭激光
sleep( ti_close );//关闭延时
if( m_nworkstatus != norun )
{//顺序加工完
fast_moveto (stopx,stopy);//达到停止位置
//其它计数处理

else{
//提示加工中断


void onvscrollspeed( )
{//响应的速度事件调节
frunspeed += 1;
或者
frunspeed -=1;
d1000_change_speed( frunspeed );//速度值更改

注意:
::doevent 函数在[编程技术]中或《编程高手》书中可找到
openlasert和closelasert函数只完成一个d1000_out_bit操作
fast_moveto 内含xy两轴点位或插补驱动函数
con_line_move 内含xy两轴的插补驱动函数(一般为常速)
getx()和gety()函数内含d1000_get_abs_position位置读取函数
ismove函数内含检测xy两轴运动状态检测函数
五、注意事项
1.本程序未考虑脉冲当量的关系,需要用户自行处理,在此只提供一种编程思路;
2.部分参数需要用户通过设定,在此只为简单介绍;
3.使用的部分结构需要参考其它资料,或;
4.控制操作在实际应用当中,需要改变按钮的文字显示,用户需要留意;
5.完好的系统,需要限定速度和限定xy范围;
6.在某些激光切割系统中,激光的控制较为复杂,其编程思想基本一致。

分光光度计为什么测量杂散光不合格?
工业除湿机出现漏水的原因是什么?
南充市水下堵漏封堵市场价格
萍乡市电缆沟防火泥实力供应商=*
工业用冷水机使用时常见的故障,今天就给大家总结一下
DMC1000控制卡在激光切割中的应用
高压清洗机的原理及分类了解一下吧
DHG-9101-4SA电热恒温鼓风干燥箱
行星式粉碎机在操作中应注意哪些安全事项?
橡胶硫化模温机
润滑油脱水滤油机——发现机器的“饮水思源”
—种复合加工中心的工作台机构
2018下半年,制药设备行业发展趋势与突破路径
德国HAWE哈威单向阀一般用于液压系统中防止油流反向流动
应用德国AIRSENSE电子鼻鉴别不同绵羊和山羊品种相同部位的羊肉研究
大豆黑醋 - 总酸、不挥发酸、氨基酸态氮的测定
Dräger德尔格检测器的应用范围
看完这些,才知道安装壁挂式温控器真的很有必要
SOLAREx系列LEL浓度检测仪器,广泛应用于RTO/RCO/TO前端
鑫垣兴钢铝拖链专家为您解读其原理