首页 > 专栏

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

更新时间:2024-01-04 00:13:01 阅读: 评论:0

2024年1月4日发(作者:宝宝学水果)

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

今天,正运动小助手给大家分享一下EtherCAT运动控制卡开发教程之Qt,主要介绍一下如何通过Qt编程实现直线插补的运动控制。

一、ECI2828运动控制卡的硬件介绍

ECI2828系列控制卡支持最多达16轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等;采用优化的网络通讯协议可以实现实时的运动控制。

ECI2828系列运动控制卡支持以太网,232通讯接口和电脑相连,接收电脑的指令运行,可以通过EtherCAT总线和CAN总线去连接各个扩展模块,从而扩展输入输出点数或运动轴。

ECI2828系列运动控制卡的应用程序可以使用VC、VB、VS、C++、C#等多种高级语言编程来开发,程序运行时需要动态库。调试时可以把ZDevelop软件同时连接到控制器,从而方便调试、方便观察。

二、Qt进行运动控制卡开发的流程

1.新建Qt项目。

图1:新建Qt项目

图2:选择项目路径

图3:选择Qt编译套件(kits)

图4:选择基类

2.将函数库相关的文件复制到新建的项目中。

3.向新建的项目里面添加函数库的静态库。()

第一步:添加函数库1

第二步:添加函数库2

第三步:添加函数库3

4.添加函数库相关的头文件到项目中。

5.声明相关头文件,并定义连接句柄。

三、PC函数介绍

函数手册也在光盘资料里面,具体路径如下:“光盘资料函数函数库2.1ZMotion函数库编程手册 ”。

编程,一般如果网口对控制器和工控机进行链接。网口链接函数接口是ZAux_OpenEth();如果链接成功,该接口会返回一个链接句柄。通过操作这个链接句柄可以实现对控制器的控制。

ZAux_OpenEth()接口说明:

指令1 ZAux_OpenEth

int32 __stdcall ZAux_OpenEth(char *ipaddr, ZMC_HA指令原型

NDLE * phandle)

指令说明

输入参数

ipaddr

输出参数

Phandle

返回值

以太网链接控制器。

输入参数1个,详细见下面说明。

链接的IP地址。

输出参数1个,详细见下面说明。

返回的链接句柄。

详细见错误码说明。

3.多轴插补指令ZAux_Direct_MoveAbs介绍。

指令2 ZAux_Direct_MoveAbs

int32 __stdcall ZAux_Direct_MoveAbs(ZMC_HANDLE h指令原型 andle, int imaxaxis, int *piAxislist, float *pfDisancelist)

指令说明

输入参数

handle

imaxaxis

piAxislist

pfDisancelist

指令3

绝对直线插补运动。

共有4个输入参数,见下方说明。

链接标识。

运动轴数。

轴列表。

运动的距离列表。

ZAux_Direct_Move

int32 __stdcall ZAux_Direct_Move(ZMC_HANDLE handl指令原型

e, int imaxaxis, int *piAxislist,float *pfDisancelist)

指令说明

输入参数

handle

imaxaxis

piAxislist

pfDisancelist

多轴相对直线插补运动。

共有4个输入参数,见下方说明。

链接标识。

运动轴数。

轴列表。

运动的距离列表。

4.获取轴位置信息指令介绍。

指令4 ZAux_Direct_GetDpos

int32 __stdcall ZAux_Direct_GetDpos(ZMC_HANDLE ha指令原型

ndle, int iaxis, float *pfValue)

指令说明

输入参数

handle

iaxis

输出参数

pfValue

指令5

读取轴当前位置。

共有2个输入参数,见下方说明。

链接标识。

轴号。

共有1个输出参数,见下方说明。

当前轴位置。

ZAux_Direct_GetMpos

int32 __stdcall ZAux_Direct_GetMpos(ZMC_HANDLE h指令原型

andle, int iaxis, float *pfValue)

指令说明

输入参数

handle

iaxis

输出参数

pfValue

读取轴反馈位置。

共有2个输入参数,见下方说明。

链接标识。

轴号。

共有1个输出参数,见下方说明。

当前轴位置。

5.获取轴位置信息指令介绍。

指令107 ZAux_Direct_GetMspeed

int32 __stdcall ZAux_Direct_GetMspeed(ZMC_HANDLE指令原型

handle, int iaxis, float *pfValue)

指令说明

输入参数

handle

iaxis

输出参数

pfValue

读取当前反馈速度,单位units。

共有2个输入参数,见下方说明。

链接标识。

轴号。

共有1个输出参数,见下方说明。

返回的反馈速度。

四、Qt开发实现多轴插补运动

1.多轴插补运动Qt界面如下。

2.在构造函数里面调用链接控制器的接口ZAux_OpenEth(),与控制器进行链接,链接成功后启动定时器监控控制器的轴信息。

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

int rint=0;

ui->tupUi(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;i<3;i++)

{

//获取轴0的位置信息

ZAux_Direct_GetDpos(g_handle,i,&AxisDpos[i]);

//获取轴0的速度信息

ZAux_Direct_GetMspeed(g_handle,i,&AxisMspeed[i]);

}

StrText = QString("#轴0位置:(%1) #轴1位置:(%2) #轴2位置:(%3)").arg(AxisDpos[0]).arg(AxisDpos[1]).arg(AxisDpos[2]);

ui->AxisDpos->tText(StrText);

StrText = QString("#轴0速度:(%1) #轴1速度:(%2) #轴2速度:(%3)").arg(AxisMspeed[0]).arg(AxisMspeed[1]).arg(AxisMspeed[2]);

ui->AxisMspeed->tText(StrText);

}

}

4.通过启动按钮的槽函数调用多轴插补命令进行多轴插补运动。

//启动按钮槽函数:开始直线插补运动

void MainWindow::on_RunButton_clicked()

{

QString Text;

int AxisList[3] = {0,1,2};

float DisList[3]={0};

//设置轴参数

for(int i=0; i<3; i++)

{

//轴类型设置为脉冲轴

ZAux_Direct_SetAtype(g_handle,i,1);

//设置脉冲当量,一般设置成机台运动1mm需要的脉冲数

ZAux_Direct_SetUnits(g_handle,i,1000);

//设置轴运动速度

ZAux_Direct_SetSpeed(g_handle,i,200);

//设置轴的加速度

ZAux_Direct_SetAccel(g_handle,i,2000);

//设置轴的减速度

ZAux_Direct_SetDecel(g_handle,i,2000);

}

//更新第一行的位置数据

Text = ui->DisX1->toPlainText();

DisList[0] = t();

Text = ui->DisY1->toPlainText();

DisList[1] = t();

Text = ui->DisZ1->toPlainText();

DisList[2] = t();

ZAux_Direct_MoveAbs(g_handle,3,AxisList,DisList);

//更新第二行的位置数据

Text = ui->DisX2->toPlainText();

DisList[0] = t();

Text = ui->DisY2->toPlainText();

DisList[1] = t();

Text = ui->DisZ2->toPlainText();

DisList[2] = t();

//更新第三行的位置数据

ZAux_Direct_MoveAbs(g_handle,3,AxisList,DisList);

Text = ui->DisX3->toPlainText();

DisList[0] = t();

Text = ui->DisY3->toPlainText();

DisList[1] = t();

Text = ui->DisZ3->toPlainText();

DisList[2] = t();

ZAux_Direct_MoveAbs(g_handle,3,AxisList,DisList);

}

5.通过停止按钮的槽函数调用轴运动停止指令停止轴运动。

//停止轴运动

void MainWindow::on_StopButton_clicked()

{

ZAux_Direct_Rapidstop(g_handle,2);

}

五、例程移植到Linux设备上

对应架构的库复制到项目文件夹里面。

2.向新建的项目里面添加函数库的静态库。()

添加函数库1

添加函数库2

添加函数库3

3.重新编译即可运行。

4.调试与监控。

编译运行例程,同时连接ZDevelop软件进行调试,对运动控制的轴参数和运动情况进行监控。

(1)多轴插补X-Y位置波形图

(2)多轴插补X-Y轴速度波形图(未打开连续插补)

本次,正运动技术EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用,就分享到这里。完整代码下载地址请关注“正运动小助手”公众号获取。

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

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

本文发布于:2024-01-04 00:13:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1704298381257643.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用.doc

本文 PDF 下载地址:EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用.pdf

下一篇:返回列表
标签:运动   插补   链接
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|