The value of Zmotion is to bring customers more success!
前面课程我们讲述了如何通过Ubuntu+Qt进行振镜校正(详情点击→开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正),本节CAD图形标刻是在振镜校正的前提下实现的。 在正式学习之前,我们先了解一下正运动技术的ZMC408SCAN-V22运动控制器,ZMC408SCAN-V22支持在Linux环境进行开发使用。
(3) 在Qt Creator下右击新建的Qt项目,选择“添加现有文件...”,将之前复制到项目文件下的头文件zmotion.h和ZScancorrect.h以及zmcaux.cpp和zmcaux.h添加到项目中。
1.CAD图形标刻流程图
(2)导入CAD图形。
(3)取消CAD图形导入,释放整个图层链表。
(4)获取CAD图形的范围。
(5)CAD图形解析后的链表结构,CAD库通过双向循环链表来存放具体的图形数据以及解析后的坐标数据。
typedef struct Struct_ZCad_VectGroup { int m_itemtype; //类型 struct Struct_ZCad_VectGroup *m_prev; struct Struct_ZCad_VectGroup *m_pnext; int m_GroupNum; //组号 uint32 m_ColorPen; //颜色 DWORD Struct_ZCad_Vect *m_pVect; //曲线列表 }Struct_ZCad_VectGroup;
(6)下载三次文件。
(7)通用命令执行接口。
(8)获取输出口的状态。
CAD图形标刻例程主要是使用CAD库对CAD图形进行解析,将图形数据解析为链表结构,通过对链表的遍历,获取图形的坐标数据,将所有坐标点数据生成三次文件字符串,下载到控制器中,即可实现CAD图形的标刻。
1.导入CAD图形。
void MainWindow::on_import_2_clicked() { data_Load(); //获取界面的设置参数 strFile3.clear(); LaserScan_z3p_Init(); //三次文件字符串初始化 QString qstr = ui->file_route->text(); //获取CAD图形的路径和文件名 QByteArray byteArray = qstr.toUtf8(); const char* cstr = byteArray.constData(); m_pGraph = ZMotionCad3_ImportVectGraph(cstr,1016,0,0.001,0); // 导入图形生成轨迹 update(); //更新界面图形 }
2.遍历链表,生成三次文件字符串,首先获取CAD图形 数据,开始遍历链表,通过内部实现的空移、开光、标刻、关光函数接口生成三次文件字符串。以下是部分实现代码。
if (m_pGraph !=NULL) { Struct_ZCad_VectGroup *ps = m_pGraph; do { Struct_ZCad_Vect * pVect = ps->m_pVect; do { Struct_ZCad_Seg * pSeg = pVect->m_pLine; //空移到起点 LaserScan_z3p_EmptyMove(strFile3,pSeg->x1,pSeg->y1,markPara.JumpSpeed,markPara.JumpDelay); //开光 LaserScan_z3p_OpenLight(strFile3,io_value.emit_io,markPara.OpenDelay,markPara.MarkSpeed); int i = 0; do { if(!pSeg->m_Param1) { // 运动 strFile3 += QString("MOVESCANABS(%1,%2)\n").arg(pSeg->x2).arg(pSeg->y2); } i++; pSeg = pSeg->m_pnext; }while(pSeg != pVect->m_pLine); //关光 LaserScan_z3p_CloseLight(strFile3,io_value.emit_io,markPara.CloseDelay,markPara.JumpDelay); pVect = pVect->m_pnext; }while(pVect != ps->m_pVect); ps = ps->m_pnext; }while(ps != m_pGraph); }
3.取消图形导入,清空图形链表,调用接口函数,清空链表,同时更新界面即可。
void MainWindow::on_cancel_clicked() { ZMotionCad3_DeleteChain((Struct_ZCad_Item *)m_pGraph); m_pGraph = NULL; update(); }
4.将三次文件字符串下载到控制器中。
void MainWindow::on_create_File3_clicked() { ZMC_DownMem3File(g_handle,strFile3.toLatin1().data(),strFile3.length(),"Zmc_CAD.z3p"); QString filePath = "Zmc_CAD.z3p"; QFile file(filePath); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream stream(&file); stream << strFile3; file.close(); qDebug() << "File saved successfully:" << filePath; } else { qDebug() << "Failed to open file for writing:" << filePath; } }
5.使用在线命令执行三次文件,标刻CAD图形。
void MainWindow::on_but_Mark_clicked() { if( 0 == g_handle) { QMessageBox::warning(this,"提示","控制器未连接!"); return; } char Response[1024]; ZMC_Execute(g_handle,"FILE3_RUN \"Zmc_CAD.z3p\",7 ",500,Response,1024); }
1. 连接控制器,设置激光器以及工艺参数。
完整代码获取地址
本次,正运动技术开放式激光振镜运动控制器在Ubuntu+Qt下CAD图形标刻,就分享到这里。
更多精彩内容请关注“ 正运动小助手 ”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。