点击上方“正运动小助手”,随时关注新动态!
前面课程我们讲述了如何通过Ubuntu+Qt进行振镜校正(详情点击→开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正),本节自定义图形标刻是在振镜校正的前提下实现的。
在正式学习之前,我们先了解一下正运动ZMC408SCAN-V22运动控制器,ZMC408SCAN-V22控制器支持在Linux环境下进行开发使用。
(3)在Qt Creator下右击新建的Qt项目,选择“添加现有文件...”,将之前复制到项目文件下的头文件zmotion.h以及zmcaux.cpp和zmcaux.h添加到项目中。
1.自定义图形标刻流程图
函数原型 | int32 __stdcall ZMC_FastOpen(ZMC_CONNECTION_TYPE type, char *pconnectstring, uint32 uims ,ZMC_HANDLE * phandle) | ||||||||||
功能 | 与控制器建立连接, 可以指定连接的等待时间。 | ||||||||||
输入参数 |
| ||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
(2)通用命令执行接口
函数原型 | int32 __stdcall ZMC_Execute(ZMC_HANDLE handle, const char* pszCommand, uint32 uimswait, char* psResponse, uint32 uiResponseLength) | ||||||||||||
功能 | 通过命令字符串直接操作控制器,执行对应的指令。 | ||||||||||||
输入参数 |
| ||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
(3)三次文件初始化
函数原型 | void LaserScan_z3p_Init(QString &strFile3) | ||||
功能 | 对三次文件字符串初始化。 | ||||
输入参数 |
| ||||
返回值 | void |
(4)生成空移字符串
函数原型 | void LaserScan_z3p_EmptyMove(QString &strFile3,double x,double y,double jumpSpeed,double jumpDelay) | ||||||||||||
功能 | 生成空移的三次文件字符串。 | ||||||||||||
输入参数 |
| ||||||||||||
返回值 | void |
函数原型 | void LaserScan_z3p_OpenLight(QString &strFile3,int op,double openDelay,double markSpeed) | ||||||||||
功能 | 生成开光的三次文件字符串。 | ||||||||||
输入参数 |
| ||||||||||
返回值 | void |
(6)生成关光字符串
函数原型 | void LaserScan_z3p_CloseLight(QString &strFile3, int op, double closeDelay) | ||||||||
功能 | 生成关光的三次文件字符串。 | ||||||||
输入参数 |
| ||||||||
返回值 | void |
(7)生成标刻点字符串
函数原型 | void LaserScan_z3p_MarkPoint(QString &strFile3, double x, double y) | ||||||||
功能 | 生成标刻点的三次文件字符串。 | ||||||||
输入参数 |
| ||||||||
返回值 | void |
函数原型 | int32 __stdcall ZMC_DownMem3File(ZMC_HANDLE handle, const char* pbuffer, uint32 buffsize, const char* pfilenameinControl) | ||||||||||
功能 | 通过命令字符串直接操作控制器,执行对应的指令。 | ||||||||||
输入参数 |
| ||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
函数原型 | int32 ZAux_Direct_SetOp(ZMC_HANDLE handle, int ionum, uint32 iValue) | ||||||||
功能 | 设置输出口的状态,打开或者关闭输出口。 | ||||||||
输入参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
(10)设置模拟量输出
函数原型 | int32 ZAux_Direct_SetDA(ZMC_HANDLE handle, int ionum, float fValue) | ||||||||
功能 | 设置输出口的状态,打开或者关闭输出口。 | ||||||||
输入参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
函数原型 | iint32 ZAux_Direct_SetPwmDuty(ZMC_HANDLE handle, int ionum, float fValue) | ||||||||
功能 | 设置pwm占空比。 | ||||||||
输入参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
函数原型 | int32 ZAux_Direct_SetPwmFreq(ZMC_HANDLE handle, int ionum, float fValue) | ||||||||
功能 | 设置pwm频率。 | ||||||||
输入参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
自定义图形标刻例程主要是通过选择简单图形来生成标刻的三次文件,控制器运行三次文件标刻对应的图形,例程中的三次文件主要通过字符串追加的形式生成,在将所有图形的绘制过程生成三次文件后下载到控制器即可。
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<int>(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。
回顾往期内容
开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里
送书福利!全自主IDE的《运动控制系统应用与实践》
开放式激光振镜运动控制器在Ubuntu+Qt下CAD图形标刻
开放式激光振镜运动控制器在Ubuntu+Qt下的文本标刻
开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正
EtherCAT运动控制器上位机开发之Python+Qt(二):回零
EtherCAT运动控制器上位机开发之Python+Qt(一):链接与单轴运动
C#之Delta并联机械手的视觉相机标定与形状匹配
C#之Delta并联机械手正逆解的建立和手动运动
PCIe EtherCAT实时运动控制卡PCIE464的安装与调试
PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用
PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工
VPLC7机器视觉运动控制一体机在三轴SCARA机械手螺丝锁付的应用
VPLC系列机器视觉运动控制一体机在五轴联动点胶上的应用
基于VPLC7机器视觉运动控制一体机的UVW视觉对位解决方案
基于VPLC711的曲面外观检测XYR运动控制解决方案
基于VPLC532E开放式数控系统在五轴义齿机上的应用
机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案
机器视觉运动控制一体机VPLC532E在汽车胶带缠绕的开放式CNC应用
机器视觉运动控制一体机在喇叭跟随点胶上的应用
机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案
机器视觉运动控制一体机在点胶胶路检测上的应用
机器视觉运动控制一体机在SCARA机械手柔性上下料的应用
开放式激光振镜运动控制器的视觉校正振镜精度解决方案
开放式激光振镜运动控制器的激光清洗应用
PCIE超高速实时运动控制卡在六面外观视觉检测上的应用
超高速PCIe EtherCAT运动控制卡在高速异形插件机上的应用
运动控制器多工位位置比较输出在转盘式视觉筛选设备中的应用
EtherCAT总线冗余让制造更安全更可靠更智能
机器视觉运动控制一体机结构体功能上线,助力客户高效开发
正运动携手EPLAN,以高效的电气设计助力运动控制的数字化设计
BissC绝对值编码器在EtherCAT运动控制器中的应用
EtherCAT运动控制器在SCARA和码垛机械手中的应用
EtherCAT运动控制器PT/PVT实现用户自定义轨迹规划
EtherCAT运动控制器在UVW对位平台中的应用
EtherCAT运动控制器Delta机械手应用
EtherCAT运动控制器的MATLAB开发
运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用
运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用
EtherCAT运动控制器在ROS上的应用(下)
EtherCAT运动控制器在ROS上的应用(上)
皮带同步跟随:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十四)
自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三)
连续轨迹加工和速度前瞻:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十二)
PT/PVT运动模式介绍:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十一)
项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)
EtherCAT驱动器回零与控制器回零:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(九)
二维/三维的多轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(八)
单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(七)
硬件位置比较输出和编码器锁存:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(六)
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(五):通过RTSys进行调试与诊断
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(四):板载IO与总线扩展IO的编码器与脉冲配置的应用
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(三):EtherCAT总线CSP,CSV,CST模式切换
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化
EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接
全国产EtherCAT运动控制边缘控制器(六):RtBasic文件下载与连续轨迹加工的Python+Qt开发
全国产EtherCAT运动控制边缘控制器(五):IO配置与回零运动的Python+Qt开发
全国产EtherCAT运动控制边缘控制器(四):轴参数配置与单轴运动PC上位机C++控制
全国产EtherCAT运动控制边缘控制器(三):外设读写与RTSys开发诊断
全国产EtherCAT运动控制边缘控制器(二):统一的上位机API接口
全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口
高柔SS加减速曲线在锂电池焊接中的应用
EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?
工业以太网时代,该如何选择总线运动控制器?
正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?
EtherCAT运动控制器在数控加工手轮随动中的应用
EtherCAT运动控制器在数控加工手轮随动中的应用之C++
EtherCAT运动控制器在LabVIEW中的运动控制与实时数据采集
运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出
运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO
运动控制器八通道PSO的视觉飞拍与精准输出
Windows实时运动控制软核(七):LOCAL高速接口测试之Labview
Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab
Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0
Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET
Windows实时运动控制软核(三):LOCAL高速接口测试之C++
Windows实时运动控制软核(二):LOCAL高速接口测试之Qt
Windows实时运动控制软核(一):LOCAL高速接口测试之C#
开放式激光振镜运动控制器:C++ 快速调用图形库应用
开放式激光振镜运动控制器:C++振镜矫正方法与实现
开放式激光振镜运动控制器:C++快速开发
开放式激光振镜运动控制器(五):ZMC408SCAN 光纤激光器的能量控制
开放式激光振镜运动控制器(四):ZMC408SCAN振镜控制光纤激光器加工
开放式激光振镜运动控制器(三):ZMC408SCAN轴控光纤激光器加工
开放式激光振镜运动控制器(二):ZMC408SCAN激光接口与控制
开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能
运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出
运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介
经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯
经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮
经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动
运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑
运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配
开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用
快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门
快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令
快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用
快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?
快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?
快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?
快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?
EtherCAT与RTEX驱动器轴回零的配置与实现
EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用
EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步
EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动
简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步
简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工
EtherCAT运动控制卡和LabVIEW构建智能装备(五)
EtherCAT运动控制卡和LabVIEW构建智能装备(四)
EtherCAT运动控制卡和LabVIEW构建智能装备(三)
EtherCAT运动控制卡和LabVIEW构建智能装备(二)
EtherCAT运动控制卡和LabVIEW构建智能装备(一)
关于正运动技术
深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。