开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻

2024-10-08

前面课程我们讲述了如何通过Ubuntu+Qt进行振镜校正(详情点击→开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正),本节自定义图形标刻是在振镜校正的前提下实现的。在正式学习之前,我们先了解一下正运动技术的ZMC408SCAN-V22运动控制器,ZMC408SCAN-V22支持在Linux环境进行开发使用。


01ZMC408SCAN-V22硬件介绍

ZMC408SCAN-V22是正运动技术推出的高性能双振镜运动控制器,集成了2个百兆以太网口,支持EtherCAT、EtherNET、CAN、RS232、RS485、24路通用数字输入、20路通用数字输出、2路通用模拟量输出、2路通用模拟量输入、4个本地差分脉冲轴接口、1个MPG手轮编码器接口、2个带反馈振镜接口、1个LASER激光专用接口、1个FIBER激光器接口。开放式系统框图如下所示:

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第1张

ZMC408SCAN-V22总线控制器支持EtherCAT总线连接,支持最快500μs的刷新周期,支持最多达16轴运动控制,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;采用优化的网络通讯协议可以实现实时的运动控制。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第2张

ZMC408SCAN-V22通过CAN、EtherCAT总线可以连接各个扩展模块,从而扩展数字量、模拟量或运动轴。可以在 Windows,Linux,Mac,Android,Wince各种操作系统下开发,提供vc,c#,vb.net,labview等各种环境的dll库。上位机软件编程参考《ZMotion PC函数库编程手册》。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第3张

02 Ubuntu+Qt进行自定义图形标刻项目的开发


1.在Qt Creator菜单选择“文件”→“新建文件或项目...”,打开创建项目向导。选择Application项目集,创建Qt Widgets Application项目,设置项目名称和保存位置。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第4张

2.导入厂家提供的相关函数库及头文件。

(1) 将zmotion.h和zmcaux.h、zmcaux.cpp以及libzmotion.so库复制到新建的项目文件夹中。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第5张

(2) 在Qt Creator选择新建的Qt项目右击选择“添加库...”→“外部库”点击下一步,将刚才复制到项目文件夹上的libzmotion.so库文件导入到项目中。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第6张

(3) 在Qt Creator下右击新建的Qt项目,选择“添加现有文件...”,将之前复制到项目文件下的头文件zmotion.h以及zmcaux.cpp和zmcaux.h添加到项目中。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第7张

(4) 函数库添加成功后,打开pro文件可以看到相关的函数库和头文件信息。此时已经将例程需要用到的函数库和头文件都加入到项目中了,接下来开始实现例程。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第8张

03 自定义图形标刻流程以及相关函数介绍

1.自定义图形标刻流程图

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第9张

2.相关函数介绍

(1)连接控制器

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第10张

(2)通用命令执行接口

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第11张

(3)三次文件初始化

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第12张

(4)生成空移字符串

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第13张

(5)生成开光字符串

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第14张

(6)生成关光字符串

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第15张

(7)生成标刻点字符串

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第16张

(8)下载三次文件

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第17张

(9)设置输出口状态

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第18张

(10)设置模拟量输出

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第19张

(11)设置pwm占空比

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第20张

(12)设置pwm频率

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第21张

04 自定义图形标刻的实现例程

自定义图形标刻例程主要是通过选择简单图形来生成标刻的三次文件,控制器运行三次文件标刻对应的图形,例程中的三次文件主要通过字符串追加的形式生成,在将所有图形的绘制过程生成三次文件后下载到控制器即可。

1.建立控制器连接,设置相关的振镜和工艺参数,可以通过设置模拟量口和pwm以及激光器使能信号,可以打开或者关闭激光。

voidMainWindow::on_ip_open_clicked()
{
    char*tmp_buff=newchar[16];
    QStringstr=ui->ip_Address->text();
    QByteArrayba=str.toLatin1();
    tmp_buff=ba.data();
    if(0!=g_handle)
    {
        ZAux_Close(g_handle);
    }
    int32iresult=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.生成初始化的三次文件字符串

可以将标刻过程中初始化的部分写到相关的函数里面,包括设置初始化的激光器参数、标刻起点、延时参数等,方便在标刻自定义图形的过程中直接使用。三次文件字符串本质是将basic指令进行拼接处理,将所有指令拼接完成后,可以直接写入控制器中执行。

voidMainWindow::LaserScan_z3p_Init()
{
    strFile3.clear();
    strFile3+=QString("BASE(%1,%2)n").arg(4).arg(5);//设置轴号
    strFile3+="ATYPE=21,21n";//设置轴类型
    strFile3+="UNITS=100,100n";//设置脉冲当量
    strFile3+="AXIS_ZSET=3,3n";//开启精准输出
    strFile3+="MERGE=1,1n";//开启连续插补
    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,%2n").arg(15.0/180.0*M_PI).arg(15.0/180.0*M_PI);
    strFile3+=QString("STOP_ANGLE=%1,%2n").arg(90.0/180.0*M_PI).arg(90.0/180.0*M_PI);
    strFile3+=QString("ZSMOOTH=%1,%2n").arg(markPara.CorDelay).arg(markPara.CorDelay);//拐角延时时间
    strFile3+=QString("FORCE_SPEED=%1n").arg(markPara.JumpSpeed);//空移速度
    strFile3+="MOVESCANABS(0,0)n";//移动到0位
}

3.生成标刻自定义图形的三次文件字符串

自定义图形本质上可以分解为线段进行绘制,在进行激光标刻时也是采用线段的形式,在生成自定义图形时,只需要控制每一条线段的起始点和结束点位置,同时在起始点和结束点的位置控制延时参数,最后在完成绘制时关闭激光和使能即可。下面是部分生成三次文件字符串以及下载的代码。

voidMainWindow::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);
        }
        elseif(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);
        }
        elseif(ps->type==3)//标刻圆弧
        {
            LaserScan_z3p_Arc(pData->next->x+ps->radius,pData->next->y-ps->radius,ps->radius,ps->angle,ps->radian,0,0);
        }
        elseif(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.设置运行任务号,启动任务进行标刻

三次文件已经下载到控制器中,这个时候可以通过ZMC_Execute函数输入命令去运行生成的三次文件,完成图形的标刻。下面的启动任务,进行标刻的部分实现代码。

voidMainWindow::on_but_Mark_clicked()
{
    if(0==g_handle)
    {
        QMessageBox::warning(this,"提示","控制器未连接!");
        return;
    }
    QStringCmd;
    charResponse[1024];
    //设置启动任务号,执行Zmc_polyline.z3p
    ZMC_Execute(g_handle,"FILE3_RUN"Zmc_polyline.z3p",7",500,Response,1024);
}

5.设置配置文件信息,保留配置参数

通过生成ini配置文件信息,在程序加载时读取文件,程序关闭时将配置数据写到ini配置文件中,以此实现保留最后一次的使用参数,方便下一次加载使用。通过使用内部函数库QSettings实现的,下面是部分的实现代码。

voidMainWindow::saveINI()
{
    //保存配置数据信息
    QSettings*iniWrite=newQSettings("config.ini",QSettings::IniFormat);
    iniWrite->setValue("laserType",ui->laser_List->currentIndex());
    .....
    deleteiniWrite;
}


voidMainWindow::readINI()
{
    //读取配置文件数据
    QSettings*iniRead=newQSettings("config.ini",QSettings::IniFormat);
    intlaserType=iniRead->value("laserType").toInt();
    ui->laser_List->setCurrentIndex(laserType);
    .....
    deleteiniRead;
}

05自定义图形标刻的实现效果

1. 打开Qt绘制的基本图形界面,设置基本的激光器参数和运动参数。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第22张

2. 添加想要标刻的自定义图形,设置图形参数,选择添加图形,例程中添加的图形为点、矩形、整圆、圆弧、直线,点击生成三次文件后,查看三次文件的内容。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第23张

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)

06 激光标刻过程

激光标刻的过程,初始化、空移、开光、标刻、关光都封装成函数接口,在进行标刻时,调用相关的函数接口即可生成对应的三次文件字符串。

开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻 (https://ic.work/) 技术资料 第24张

完整代码获取地址▼

本次,正运动技术开放式激光振镜运动控制器在Ubuntu+Qt下自定义图形标刻,就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。

审核编辑 黄宇

文章推荐

相关推荐

  • 小安派BW21 UNO从机

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能 ...

    2025-05-21
  • IGBT模块吸收回路分析模型

    IGBT模块吸收回路分析模型 一、IGBT模块吸收电路的模型 尽管开关器件内部工作机理不同,但对于吸收电路的分析而 ...

    2025-05-21
  • BLDC电机的基本结构和控制方式

    来源:攻城狮原创之设计分享 直流无刷电机(Brushless DC Motor,BLDC)是一种基于电子换向技术的高效电机,具有长寿命 ...

    2025-05-21
  • 联通智家通通:聚四方守护之力,筑万家AI通途

    “神兽镇宅”,是深植于中国人心中的居家智慧。朱雀、玄武等神兽,站立在紫禁城之巅,也悬于普通百姓门上,寄托着镇守四方风雨 ...

    2025-05-21
  • FinFET与GAA结构的差异及其影响

    文章来源:老虎说芯 原文作者:老虎说芯 本文介绍了当半导体技术从FinFET转向GAA(Gate-All-Around)时工艺面临 ...

    2025-05-21
  • 一文详解球栅阵列封装技术

    文章来源:学习那些事 原文作者:前路漫漫 本文介绍了球栅阵列封装的结构、分类、应用和发展趋势。 概述 ...

    2025-05-21
  • 智能车电磁组——基本控制篇

    智能车电磁组——基本控制篇 前言 电磁车的控制比较简单,可以分为信号采集,舵机控制和电机控制三部分, ...

    2025-05-21
  • 低成本电源排序器解决方案

    绝大多数负载点DC-DC转换器可以将上一个转换器的电源就绪输出连接至下一个转换器的使能输入,实现上电排序。这种方法只适合 ...

    2025-05-21
  • 注入增强型IGBT学习笔记

    来源:星际浮尘 注入增强型IGBT 1、结构特点与典型工艺 1.1结构提出与发展 为了协调 ...

    2025-05-21
  • 解析RZ/N2L CANFD模块的缓冲区机制(3)

    在工业自动化、智能交通、机器人等领域,CANFD(CAN with Flexible Data-Rate)技术正逐步取代传统CAN,以适应更高的数据速 ...

    2025-05-21