如何通过Qt编程实现直线插补的运动控制

今天,正运动小助手给大家分享一下ethercat运动控制卡开发教程之qt,主要介绍一下如何通过qt编程实现直线插补的运动控制。
eci2828运动控制卡的硬件介绍  
eci2828系列控制卡支持最多达16轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等;采用优化的网络通讯协议可以实现实时的运动控制。
eci2828系列运动控制卡支持以太网,232通讯接口和电脑相连,接收电脑的指令运行,可以通过ethercat总线和can总线去连接各个扩展模块,从而扩展输入输出点数或运动轴。
eci2828系列运动控制卡的应用程序可以使用vc、vb、vs、c++、c#等多种高级语言编程来开发,程序运行时需要动态库zmotion.dll。调试时可以把zdevelop软件同时连接到控制器,从而方便调试、方便观察。
一、qt进行运动控制卡开发的流程  
1.新建qt项目。
图1:新建qt项目
图2:选择项目路径
图3:选择qt编译套件(kits)
图4:选择基类
2.将函数库相关的文件复制到新建的项目中。
3.向新建的项目里面添加函数库的静态库。(zmotion.lib)
第一步:添加函数库1
第二步:添加函数库2
第三步:添加函数库3
4.添加函数库相关的头文件到项目中。
5.声明相关头文件,并定义连接句柄。
二、pc函数介绍  
1.pc函数手册也在光盘资料里面,具体路径如下:“光盘资料\8.pc函数\函数库2.1\zmotion函数库编程手册 v2.1.pdf”。
2.pc编程,一般如果网口对控制器和工控机进行链接。网口链接函数接口是zaux_openeth();如果链接成功,该接口会返回一个链接句柄。通过操作这个链接句柄可以实现对控制器的控制。
zaux_openeth()接口说明:
  3.多轴插补指令zaux_direct_moveabs介绍。
4.获取轴位置信息指令介绍。3.多轴插补指令zaux_direct_moveabs介绍。
5.获取轴位置信息指令介绍。
三、qt开发实现多轴插补运动   1.多轴插补运动qt界面如下。
2.在构造函数里面调用链接控制器的接口zaux_openeth(),与控制器进行链接,链接成功后启动定时器监控控制器的轴信息。
mainwindow::mainwindow(qwidget *parent) :
                 qmainwindow(parent),
                 ui(new ui::mainwindow)
        {
                  int rint=0;
                  ui->setupui(this);
                  //系统启动自动连接控制器
                  rint = zaux_openeth(192.168.0.223, &g_handle);
                  //如果链接成功则启动定时器
                  if(rint==0)
                  {
                     starttimer(50);
                   }
         }
3.通过定时器更新控制器各个轴的位置和速度信息。
//定时器事件
void mainwindow::timerevent(qtimerevent *event)
{
    qstring strtext;
    float axisdpos[3]={0};
    float axismspeed[3]={0};
    if(null != g_handle)
    {
        for(int i=0;iaxisdpos->settext(strtext);
        strtext = qstring(#轴0速度:(%1) #轴1速度:(%2) #轴2速度:(%3)).arg(axismspeed[0]).arg(axismspeed[1]).arg(axismspeed[2]);
        ui->axismspeed->settext(strtext);
4.通过启动按钮的槽函数调用多轴插补命令进行多轴插补运动。
//启动按钮槽函数:开始直线插补运动
void mainwindow::on_runbutton_clicked()
{
    qstring text;
    int axislist[3] = {0,1,2};
    float dislist[3]={0};
    //设置轴参数
    for(int i=0; idisx1->toplaintext();
    dislist[0] = text.tofloat();
    text = ui->disy1->toplaintext();
    dislist[1] = text.tofloat();
    text = ui->disz1->toplaintext();
    dislist[2] = text.tofloat();
    zaux_direct_moveabs(g_handle,3,axislist,dislist);
    //更新第二行的位置数据
    text = ui->disx2->toplaintext();
    dislist[0] = text.tofloat();
    text = ui->disy2->toplaintext();
    dislist[1] = text.tofloat();
    text = ui->disz2->toplaintext();
    dislist[2] = text.tofloat();
    //更新第三行的位置数据
    zaux_direct_moveabs(g_handle,3,axislist,dislist);
    text = ui->disx3->toplaintext();
    dislist[0] = text.tofloat();
    text = ui->disy3->toplaintext();
    dislist[1] = text.tofloat();
    text = ui->disz3->toplaintext();
    dislist[2] = text.tofloat();
    zaux_direct_moveabs(g_handle,3,axislist,dislist);
}
5.通过停止按钮的槽函数调用轴运动停止指令停止轴运动。
//停止轴运动
void mainwindow::on_stopbutton_clicked()
{
    zaux_direct_rapidstop(g_handle,2);
}
四、例程移植到linux设备上  
1.linux对应架构的库复制到项目文件夹里面。
2.向新建的项目里面添加函数库的静态库。(libzmotion.so)
添加函数库1
添加函数库2
添加函数库3
3.重新编译即可运行。
4.调试与监控。
编译运行例程,同时连接zdevelop软件进行调试,对运动控制的轴参数和运动情况进行监控。
(1)多轴插补x-y位置波形图
(2)多轴插补x-y轴速度波形图(未打开连续插补)
本次,正运动技术ethercat运动控制卡开发教程之qt(上):开发环境配置与简单运动控制应用,就分享到这里。


AI大咖关注的类脑芯片能否超越人脑?又是否可以冲破摩尔定律
OPPO Watch正式官宣,将搭载eSIM独立通信
绝缘电阻测试仪的高压电源设计
小米6Plus什么时候上市?最新消息:小米6Plus谍照曝光,几乎是放大版小米6啊!
分体式电磁流量计的应用
如何通过Qt编程实现直线插补的运动控制
KC-101 51/AVR单片机最小系统核心板产品说明
聚焦电池管理与元器件替换 突破新能源/新能源汽车效率瓶颈
华为云 API 人脸识别服务 FRS 的感知力—偷偷藏不住的你
星组态软件的组成概括及在锅炉液位监控系统中的介绍
Altera FPGA通过以太网联盟100G HSE互操作性
关于霍尼韦尔HF800的作用介绍和应用
INA115精密仪表放大器
DS2786K入门
大陆智能制造超车进军全球 数码化程度台湾不如大陆
碳化硅MOSFET在电动汽车热管理系统中的研究
MAX16031/MAX16032系统监测器的外部温度传感器校准
美国“设计运行区域”(ODD)自动驾驶的现状和前途
mysql8.0流程控制介绍
等离子焊机使用方法及注意事项