点击上方“正运动小助手”,随时关注新动态!
Ubuntu是一款免费且开源的操作系统,基于强大的Linux内核,它支持多用户、多任务、多线程操作,拥有多CPU架构,可以简化开发过程,具备出色的移植性。
(一)振镜校正的目的
振镜本身在制造过程中或者在长时间使用后可能会存在一些畸变,振镜校正的一个主要目的就是检测和修正这些畸变,以确保激光的精度。
通过定期的校正和调整,可以有效地管理和纠正振镜的畸变,从而提高激光系统的整体性能和稳定性。
未进行振镜校正时标刻的矩形
振镜校正后标刻的矩形
1.振镜校正流程图
函数原型 | int32 __stdcall ZScan_CancelCorrect(ZMC_HANDLE handle, int nScanNum, double dUnits, double dScaleRatio, int nTableStart) | ||||||||||||
功能 | 取消振镜校正,在预校正时需要取消原本的振镜校正。 | ||||||||||||
输入参数 |
| ||||||||||||
返回值 | 成功返回值为0,非0详见下面的错误码说明。 |
函数原型 | int32 __stdcall ZMC_DownMem3File(ZMC_HANDLE handle, const char* pbuffer, uint32 buffsize, const char* pfilenameinControl) | ||||||||||
功能 | 将生成的三次文件字符串下载到控制器中。 | ||||||||||
输入参数 |
| ||||||||||
返回值 | 成功返回值为0。 |
函数原型 | int32 __stdcall ZScan_CorrectMorePtIter(ZMC_HANDLE handle, int nScanNum, double *pdXInputPt, double *pdYInputPt, int nScanExChange, int nRowColPtNum, double dUnits,double dTheoryLeft, double dTheoryBottom, double dTheoryRight, double dTheoryTop, double dScanSize, double dScaleRatio, int nTableStart, int nDataType) | ||||||||||||||||||||||||||||||||
功能 | 多点迭代校正(使用3×3、5×5、9×9、17×17、33×33、65×65的点数据进行振镜位置的迭代校正)。 | ||||||||||||||||||||||||||||||||
输入参数 |
| ||||||||||||||||||||||||||||||||
返回值 | 成功返回值为0,非0详见下面的错误码说明。 |
函数原型 | int32 __stdcall ZScan_SaveCorrectFile(ZMC_HANDLE handle, char *pPathName, int nScanNum, int nScanExChange, int nXDirect, int nYDirect, double dUnits,double dScaleRatio, int nDirMode) | ||||||||||||||||||||
功能 | 校正保存成文件(校正成功后才能调用),后续可以采用此文件进行校正。 | ||||||||||||||||||||
输入参数 |
| ||||||||||||||||||||
返回值 | 成功返回值为0,非0详见下面的错误码说明。 |
函数原型 | int32 __stdcall ZScan_ReadCorrectFilePara(char *pFilePath, int &nScanNum, int &nScanExChange, int &nXDirect, int &nYDirect, double &dUnits,double &dScaleRatio, int &nDirMode) | ||||||||||||||||||
功能 | 读取校正文件的参数,将校正文件的参数存储到地址中。 | ||||||||||||||||||
输入参数 |
| ||||||||||||||||||
返回值 | 成功返回值为0,非0详见下面的错误码说明。 |
函数原型 | int32 __stdcall ZScan_CorrectFromFile(ZMC_HANDLE handle, char *pPathName, int nScanNum, int nTableStart) | ||||||||||
功能 | 使用校正文件进行校正 | ||||||||||
输入参数 |
| ||||||||||
返回值 | 成功返回值为0,非0详见下面的错误码说明。 |
函数原型 | int32 __stdcall ZScan_AddErrCorrectFile(ZMC_HANDLE handle, char *pPathName, int nTheorySize, double *dErrData, int nTableStart, int nUpdataFile) | ||||||||||||||
功能 | 校正文件迭代误差补偿 | ||||||||||||||
输入参数 |
| ||||||||||||||
返回值 | 成功返回值为0,非0详见下面的错误码说明。 |
(8)相关错误码
错误码 | 错误信息 |
50 | 链接不上控制器。 |
51 | 校正点数太少。 |
52 | 校正点数不正确。 |
53 | 校正失败。 |
54 | 校正文件错误。 |
55 | 没有校正数据。 |
56 | 参数错误。 |
57 | Table操作失败。 |
1.预校正并标刻
void MainWindow::on_beforeCheck_mark_clicked()
{
if( 0 == g_handle)
{
QMessageBox::warning(this,"提示","控制器未连接!");
return;
}
dataRenew(); //更新获取页面数据
ZScan_CancelCorrect(g_handle, ui->scan_list->currentIndex(), ui->Units->text().toDouble(), 1.0, tableStartNum); // 先取消校正
int RowNum = sqrt(countRow());//获取当前选择的校正点数
QString strFile3 = CreateMakingString(RealCorrectSizeX, RealCorrectSizeY, RowNum, XLineLenght, YLineLenght); // 生成三次文件字符串
Down3File(strFile3); // 下载三次文件到控制器中
// 刷新列表,将列表数据插入为标准点坐标
model->removeRows(0, model->rowCount());
ZPoint *tmp = pointData(RowNum,dScanSize);
for (int i = 0; i < RowNum * RowNum; i++)
{
QList<QStandardItem *> rowItems;
rowItems << new QStandardItem(QString::number(tmp[i].x,'f',3))<< new QStandardItem(QString::number(tmp[i].x,'f',3))<< new QStandardItem(0,'f',3))<< new QStandardItem(0,'f',3);
model->insertRow(i, rowItems);
}
delete [] tmp;
PreCorrectFlag = 0;//标记为预校正
}
2.多点迭代校正的方式进行振镜校正
bool MainWindow::ScanCorrection(int MakingRowNum)
{
//通过点数数据,进行振镜校正
memset(PointDataX, 0, MakingRowNum);
memset(PointDataY, 0, MakingRowNum);
int cur_item = model->rowCount(); // 检查当前数据项数量是否正确
if (cur_item != MakingRowNum)
{
QMessageBox::critical(this, "错误", "数据错误");
return false;
}
for (int row = 0; row < MakingRowNum; ++row)//将所有点数据取出,进行多点校正
{
QStandardItem *item = model->item(row, 2);
PointDataX[row] = item ? item->text().toDouble() : 0.0;
item = model->item(row, 3);
PointDataY[row] = item ? item->text().toDouble() : 0.0;
}
// 检测数据是否正确
if (!CheckCorrectData(MakingRowNum,PointDataX,PointDataY))
{
if (QMessageBox::question(this, "警告", "数据可能不正确,请检查数据\r\nyes表示退出校正\r\nno表示继续校正", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
return false;
}
}
double x1 = -RealCorrectSizeX / 2;
double y1 = -RealCorrectSizeY / 2;
double x2 = RealCorrectSizeX / 2;
double y2 = RealCorrectSizeY / 2;
// 调用 ZScan_CorrectMorePtIter 函数,传递适当的参数
int ret = ZScan_CorrectMorePtIter(g_handle, ui->scan_list->currentIndex(), PointDataX, PointDataY, ui->checkBox->isChecked(), sqrt(countRow()), ui->Units->text().toDouble(),x1, y1, x2, y2, ui->mark_Size->text().toDouble(), 1.0, tableStartNum, PreCorrectFlag);
if (CheckError(ret, "ZScan_CorrectMorePtIter"))
return false;
PreCorrectFlag = 1;
return true;
}
3.根据校正文件进行振镜校正
void MainWindow::on_but_Check_clicked()
{
if( 0 == g_handle)
{
QMessageBox::warning(this,"提示","控制器未连接!");
return;
}
QString fileName = QString::fromStdString(ui->file_Route->text()
.toLatin1().data());
if (fileName.isEmpty())
{
QMessageBox::critical(this, "错误", "请先选择矫正文件!");
return;
}
if (ChangeDirMode == 1)
{
// 设置 X 和 Y 方向的步进比例
int ret = 0;
if (ui->x_Dir->text().toInt() == -1)
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[0], 1, -1);
}
else
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[0], 1, 1);
}
if (ret != 0)
{
QMessageBox::critical(this, "错误", QString("文件校正失败 X方向设置失败 错误码:%1").arg(ret));
return;
}
if (ui->y_Dir->text().toInt() == -1)
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[1], 1, -1);
}
else
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[1], 1, 1);
}
if (ret != 0)
{
QMessageBox::critical(this, "错误", QString("文件校正失败 Y方向设置失败 错误码:%1").arg(ret));
return;
}
}
int rest = ZScan_CorrectFromFile(g_handle, fileName.toLatin1().data(), scanNum, tableStartNum);//使用校正文件进行振镜校正
if (rest != 0)
{
QMessageBox::critical(this, "错误", QString("文件校正错误 错误码:%1").arg(rest));
}
else
{
QMessageBox::information(this, "信息", "文件校正完成");
}
}
1.多点迭代校正方式进行振镜校正
(4)继续测量标刻点的数据,导入点数据或手动添加到程序中,重复步骤二三提高校正精度。若精度还是达不到要求,可以继续加点迭代校正来提高精度,若已达到精度则可以将校正数据保存到校正文件中,方便后续直接使用文件校正。
2.文件校正方式进行振镜校正
3.教学视频
完整代码获取地址
本次,正运动技术开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
回顾往期内容
开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里
送书福利!全自主IDE的《运动控制系统应用与实践》
EtherCAT运动控制器上位机开发之Python+Qt(三):PDO配置与SDO读写
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电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。