The value of Zmotion is to bring customers more success!
前面课程我们讲述了如何通过Ubuntu+Qt进行振镜校正(详情点击→开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正),本节自定义图形标刻是在振镜校正的前提下实现的。在正式学习之前,我们先了解一下正运动技术的ZMC408SCAN-V22运动控制器,ZMC408SCAN-V22支持在Linux环境进行开发使用。
(3) 在Qt Creator下右击新建的Qt项目,选择“添加现有文件...”,将之前复制到项目文件下的头文件zmotion.h以及zmcaux.cpp和zmcaux.h添加到项目中。
1.自定义图形标刻流程图
(2)通用命令执行接口
(3)三次文件初始化
(4)生成空移字符串
(6)生成关光字符串
(7)生成标刻点字符串
(10)设置模拟量输出
自定义图形标刻例程主要是通过选择简单图形来生成标刻的三次文件,控制器运行三次文件标刻对应的图形,例程中的三次文件主要通过字符串追加的形式生成,在将所有图形的绘制过程生成三次文件后下载到控制器即可。
void MainWindow::on_ip_open_clicked() { char * tmp_buff = new char[16]; QString str = ui->ip_Address->text(); QByteArray ba = str.toLatin1(); tmp_buff = ba.data(); if(0 != g_handle) { ZAux_Close(g_handle); } int32 iresult= ZMC_FastOpen(ZMC_CONNECTION_ETH,tmp_buff,1000,&g_handle); if( 0 != iresult) { QMessageBox::warning(this,"提示","连接失败"); return; } ZAux_Direct_SetDA(g_handle,markPara.PowerDA,markPara.Power); //设置模拟量 ZAux_Direct_SetPwmDuty(g_handle,markPara.PwmIo,0.5); //设置占空比 ZAux_Direct_SetPwmFreq(g_handle,markPara.PwmIo,markPara.PwmFreq); //设置频率 ZAux_Direct_SetOp(g_handle,io_value.emit_io,0); //关闭激光输出口 ZAux_Direct_SetOp(g_handle,io_value.enable_io,0); //关闭激光器使能 }
2.生成初始化的三次文件字符串
void MainWindow::LaserScan_z3p_Init() { strFile3.clear(); strFile3 += QString("BASE(%1,%2)\n").arg(4).arg(5); //设置轴号 strFile3 += "ATYPE = 21,21\n"; //设置轴类型 strFile3 += "UNITS = 100,100\n"; //设置脉冲当量 strFile3 += "AXIS_ZSET = 3,3\n"; // 开启精准输出 strFile3 += "MERGE = 1,1\n"; //开启连续插补 strFile3 += QString("OP(%1,ON)\n").arg(io_value.enable_io); strFile3+=QString("MOVE_AOUT(%1,%2)\n").arg(markPara.PowerDA).arg(static_cast(markPara.Power * 255 / 100)); strFile3+=QString("MOVE_PWM(%1,0.5,%2)\n").arg(markPara.PwmIo).arg(markPara.PwmFreq); strFile3 +=QString("DECEL_ANGLE= %1,%2\n").arg(15.0/180.0*M_PI).arg(15.0/180.0*M_PI); strFile3 += QString("STOP_ANGLE = %1,%2\n").arg(90.0/180.0*M_PI).arg(90.0/180.0*M_PI); strFile3 += QString("ZSMOOTH= %1,%2\n").arg(markPara.CorDelay).arg(markPara.CorDelay); //拐角延时时间 strFile3 += QString("FORCE_SPEED = %1\n").arg(markPara.JumpSpeed); //空移速度 strFile3 += "MOVESCANABS(0,0)\n"; //移动到 0 位 }
3.生成标刻自定义图形的三次文件字符串
void MainWindow::on_create_File3_clicked() { LaserScan_z3p_Init(strFile3); ListNode *ps = layers->next; do { Coordinate * pData = ps->data; if(ps->type == 1)//标刻点 { LaserScan_z3p_EmptyMove(strFile3,pData->next->x,pData->next->y,markPara.JumpSpeed,markPara.JumpDelay); LaserScan_z3p_OpenLight(strFile3,io_value.emit_io,markPara.OpenDelay,markPara.MarkSpeed); LaserScan_z3p_MarkPoint(strFile3,pData->next->x,pData->next->y); LaserScan_z3p_CloseLight(strFile3,io_value.emit_io,markPara.CloseDelay,markPara.JumpDelay); } else if(ps->type == 2)//标刻直线 { LaserScan_z3p_EmptyMove(strFile3,pData->next->x,pData->next->y,markPara.JumpSpeed,markPara.JumpDelay); LaserScan_z3p_OpenLight(strFile3,io_value.emit_io,markPara.OpenDelay,markPara.MarkSpeed); LaserScan_z3p_MarkPoint(strFile3,pData->next->x2,pData->next->y2); LaserScan_z3p_CloseLight(strFile3,io_value.emit_io,markPara.CloseDelay,markPara.JumpDelay); } else if(ps->type == 3)//标刻圆弧 { LaserScan_z3p_Arc(pData->next->x + ps->radius,pData->next->y - ps->radius,ps->radius,ps->angle,ps->radian,0,0); } else if(ps->type == 4)//标刻整圆 { LaserScan_z3p_Arc(pData->next->x + ps->radius,pData->next->y - ps->radius,ps->radius,0,360,0,0); } ...... //标刻其他类型 ps = ps->next; }while(ps != layers); }
4.设置运行任务号,启动任务进行标刻
void MainWindow::on_but_Mark_clicked() { if( 0 == g_handle) { QMessageBox::warning(this,"提示","控制器未连接!"); return; } QString Cmd; char Response[1024]; //设置启动任务号,执行Zmc_polyline.z3p ZMC_Execute(g_handle,"FILE3_RUN \"Zmc_polyline.z3p\",7 ",500,Response,1024); }
5.设置配置文件信息,保留配置参数
void MainWindow::saveINI() { //保存配置数据信息 QSettings *iniWrite = new QSettings("config.ini",QSettings::IniFormat); iniWrite->setValue("laserType",ui->laser_List->currentIndex()); ..... delete iniWrite; } void MainWindow::readINI() { //读取配置文件数据 QSettings *iniRead = new QSettings("config.ini",QSettings::IniFormat); int laserType = iniRead->value("laserType").toInt(); ui->laser_List->setCurrentIndex(laserType); ..... delete iniRead; }
1. 打开Qt绘制的基本图形界面,设置基本的激光器参数和运动参数。
3. 点击标刻即可完成已选自定义图形的标刻。
4.分析生成的三次文件信息,下面是生成三次文件的部分内容,三次文件的开头都是对轴参数加工参数的设置,当移动到运动起始点时,设置开光参数和延时参数,在轨迹完成时设置关光延时和关光操作。
BASE(4,5) ATYPE = 21,21 UNITS = 100,100 AXIS_ZSET = 3,3 MERGE = 1,1 OP(47,ON) MOVE_AOUT(3,127) MOVE_PWM(11,0.5,4000) DECEL_ANGLE = 0.261799,0.261799 STOP_ANGLE = 1.5708,1.5708 ZSMOOTH = 1000,1000 FORCE_SPEED = 1000 MOVESCANABS(0,0) FORCE_SPEED = 1000 MOVESCANABS(0.00000,0.00000) MOVE_DELAY(0.2,1) FORCE_SPEED = 500 MOVEOP_DELAY = -0.1 MOVE_OP(44,ON) MOVESCANABS(0.00000,0.00000) MOVEOP_DELAY = 0 MOVE_DELAY(1) MOVE_OP(44,OFF) FORCE_SPEED = 1000 MOVESCANABS(-5.00000,5.00000) MOVE_DELAY(200,1) FORCE_SPEED = 500 MOVEOP_DELAY = -0.1 MOVE_OP(44,ON) MOVESCANABS(5.00000,5.00000) MOVESCANABS(5.00000,-5.00000) MOVESCANABS(-5.00000,-5.00000) MOVESCANABS(-5.00000,5.00000) MOVEOP_DELAY = 0 MOVE_DELAY(1) MOVE_OP(44,OFF)
本次,正运动技术开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。