点击上方“正运动小助手”,随时关注新动态!
前面课程我们讲述了如何通过Ubuntu+Qt进行振镜校正(详情点击→开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正),本节CAD图形标刻是在振镜校正的前提下实现的。
在正式学习之前,我们先了解一下正运动ZMC408SCAN-V22运动控制器,ZMC408SCAN-V22控制器支持在Linux环境下进行开发使用。
(3)在Qt Creator下右击新建的Qt项目,选择“添加现有文件...”,将之前复制到项目文件下的头文件zmotion.h和ZScancorrect.h以及zmcaux.cpp和zmcaux.h添加到项目中。
1.CAD图形标刻流程图
函数原型 | int32 __stdcall ZMC_FastOpen(ZMC_CONNECTION_TYPE type, char *pconnectstring, uint32 uims ,ZMC_HANDLE * phandle) | ||||||||||
功能 | 与控制器建立连接, 可以指定连接的等待时间。 | ||||||||||
输入参数 |
| ||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
(2)导入CAD图形。
函数原型 | Struct_ZCad_VectGroup* __stdcall ZMotionCad3_ImportVectGraph(const char* lpszFileFullPathname, double duUnit, int Option, double refDistance, int bIfOriCoord) | ||||||||||||
功能 | 导入CAD图形的文件,生成矢量图层的结构体。 | ||||||||||||
输入参数 |
| ||||||||||||
返回值 | 返回CAD图形生成的矢量图形结构体指针。 |
函数原型 | uint32 __stdcall ZMotionCad3_DeleteChain(Struct_ZCad_Item *pfirstitem) | ||||
功能 | 导入CAD图形的文件,生成矢量图层的结构体。 | ||||
输入参数 |
| ||||
返回值 | 链表释放成功返回0。 |
函数原型 | uint32 __stdcall ZMotionCad3_GetRange(Struct_ZCad_Item *pitemList, float *pLeft, float *pBottom, float *pWdith, float *pHeight, double refDistance) | ||||||||||||||
功能 | 获取CAD图形范围。 | ||||||||||||||
输入参数 |
| ||||||||||||||
返回值 | 图形范围获取成功返回0。 |
(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;
函数原型 | int32 __stdcall ZMC_DownMem3File(ZMC_HANDLE handle, const char* pbuffer, uint32 buffsize, const char* pfilenameinControl) | ||||||||||
功能 | 将生成的三次文件字符串下载到控制器中。 | ||||||||||
输入参数 |
| ||||||||||
返回值 | 成功返回值为0。 |
函数原型 | int32 __stdcall ZMC_Execute(ZMC_HANDLE handle, const char* pszCommand, uint32 uimswait, char* psResponse, uint32 uiResponseLength) | ||||||||||||
功能 | 通过命令字符串直接操作控制器,执行对应的指令。 | ||||||||||||
输入参数 |
| ||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
函数原型 | int32 ZAux_Direct_GetOp(ZMC_HANDLE handle, int ionum, uint32 *piValue) | ||||||||
功能 | 读取输出口状态。 | ||||||||
输入参数 |
| ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 |
CAD图形标刻例程主要是使用CAD库对CAD图形进行解析,将图形数据解析为链表结构,通过对链表的遍历,获取图形的坐标数据,将所有坐标点数据生成三次文件字符串,下载到控制器中,即可实现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。
回顾往期内容
开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里
送书福利!全自主IDE的《运动控制系统应用与实践》
开放式激光振镜运动控制器在Ubuntu+Qt下的文本标刻
开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正
C#之Delta并联机械手的视觉同步分拣
C#之Delta并联机械手的视觉相机标定与形状匹配
C#之Delta并联机械手正逆解的建立和手动运动
PCIe EtherCAT实时运动控制卡PCIE464的安装与调试
PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用
PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工
机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案
机器视觉运动控制一体机在喇叭跟随点胶上的应用
机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案
机器视觉运动控制一体机在点胶胶路检测上的应用
机器视觉运动控制一体机在SCARA机械手柔性上下料的应用
开放式激光振镜运动控制器的视觉校正振镜精度解决方案
开放式激光振镜运动控制器的激光清洗应用
基于VPLC711的曲面外观检测XYR运动控制解决方案
基于VPLC532E开放式数控系统在五轴义齿机上的应用
PCIE超高速实时运动控制卡在六面外观视觉检测上的应用
超高速PCIe EtherCAT运动控制卡在高速异形插件机上的应用
运动控制器多工位位置比较输出在转盘式视觉筛选设备中的应用
EtherCAT总线冗余让制造更安全更可靠更智能
机器视觉运动控制一体机结构体功能上线,助力客户高效开发
正运动携手EPLAN,以高效的电气设计助力运动控制的数字化设计
6月6号直播预告 | 认识PCIE464控制卡及其EtherCAT驱动器与控制卡常用回零模式介绍
6月13号直播预告 | 认识PCIE464控制卡以及连续轨迹加工和速度前瞻介绍
6月17号直播预告 | 认识XPCIE1032H控制卡以及单轴PSO视觉飞拍和精准输出知识分享
6月20号直播预告 | 认识XPCIE1032H控制卡以及硬件位置比较输出和编码器锁存知识分享
6月24号直播预告 | 认识XPCIE1032H控制卡以及二维/三维的多轴PSO视觉飞拍与精准输出分享
6月27号直播预告 | 认识XPCIE1032H控制卡以及PT/PVT运动模式介绍
7月1号直播预告 | 认识全国产EtherCAT运动控制器ZMC432HG以及板载IO与扩展IO配置技巧和应用
7月4号直播预告 | 全国产EtherCAT运动控制器ZMC432HG及其EtherCAT总线使用
7月8号直播预告 | 全国产EtherCAT运动控制器ZMC432HG及其EtherCAT驱动器与控制器常用回零模式介绍
7月15号直播预告 | 超高速PCIe EtherCAT实时运动控制卡PCIE464M以及单轴PSO视觉飞拍和精准输出知识分享
7月22号直播预告 | 超高速PCIe EtherCAT实时运动控制卡PCIE464M以及连续轨迹加工和速度前瞻知识分享
EtherCAT运动控制器在UVW对位平台中的应用
EtherCAT运动控制器Delta机械手应用
EtherCAT运动控制器的MATLAB开发
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电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。