免费发布您的软件作品
当前位置:澳门网上赌彩网址大全_澳门网上赌彩网址大全下载进入 > 新闻资讯 > 行业资讯 运动控制卡应用开发教程之使用Qt

运动控制卡应用开发教程之使用Qt

关键词:

正运动

运动节制卡

择要:本日,我们来解说一下正运动技巧运动节制卡利用开拓教程之Qt。

本日,我们来解说一下正运动技巧运动节制卡利用开拓教程之Qt。

此前,我们与大年夜家分享过“开放式Linux平台节制器XPLC516E及其Linux下的Qt开拓”,我们知道正运动部分节制器支持Linux系统,支持嵌入式Qt开拓。

正运动技巧支持功能强大年夜的Qt动态链接库以及拥有简单易读的运动节制库函数手册阐明,代码移植性强,异常方便运动节制开拓上手,能极大年夜缩短开拓职员开拓智能设置设备摆设的光阴周期。

在正式进修之前,我们先懂得一下正运动技巧的运动节制卡ECI2418和ECI2618。这两款产品分手是4轴,6轴运动节制卡。

ECI2418支持4轴脉冲输入与编码器反馈,板载24点输入,16点输出,2AD,2DA,支持手轮接口,此中特定输出支持高速PWM节制。

ECI2618支持6轴脉冲输入与编码器反馈,板载24点输入,16点输出,2AD,2DA,支持手轮接口,此中特定输出支持高速PWM节制。

ECI2418,ECI2618均应用同一套API函数,均支持C、C++、C#、LabView、Python、Delphi等开拓说话,支持VC6.0、VB6.0、Qt、.Net等平台,支持Windows、Linux、WinCE、iMac等操作系统。

一、运动节制卡利用之Qt开拓流程

1、应用Qt软件新建Qt项目

2、将动态库以及相关文件“libzmotion.so、zaux.cpp、zaux.h、zmotion.h”复制到新建的Qt项目里面。

在光盘资料里面,下载上图圈出的四个文件,并经由过程终端复制到新建的Qt工程里面。

3、在Qt项目里面添加动态库“libzmotion.so”

A、首先右键项目,点击添加库。

B、选择外部库,点击Next。

C、点击浏览库文件,选择刚刚复制进去的动态库,点击Next。

D、着末点击finish即可完成动态库添加。

留意事变:Linux情况下动态库的名字必须是lib开首才能识别。

4、在Qt项目里面添加头文件“zmotion.h、zaux.h”

A、首先右键Headers,点击Add Existing Files...

B、找到刚刚复制放进项目的zmotion.h文件,双击zmotion.h即可添加头文件zmotion.h到项目中。

C、重复上面两个步骤,将zaux.h文件也添加到项目中。

5、在Qt项目里面添加cpp源文件"zaux.cpp”

A、首先右键Sources,点击Add Existing Files...

B、找到刚刚复制放进项目的zaux.cpp文件,双击zaux.cpp文件即可添加源文件zaux.cpp到项目中。

6、在mainwindow.h中添加 #include “zmotion.h”、 #include “zaux.h”和定义节制器的连接句柄g_handle。

7、应用link按钮的槽函数用以太网连接节制器

A、在Qt的ui设计界面中添加一个按钮重命名为Link,右击Link按钮点击Go to slot...跳转到该按钮的槽函数。

B、查阅ZMotion PC 编程手册,懂得用以太网连接节制器接口函数的用法 。

C、参考光盘资料里面的PC编程手册中ZAux_OpenEth函数的用法在槽函数中编写代码,进行功能实现。

8、节制器实现插补运动,代码实现历程。

A、在Qt的ui设计界面中添加一个按钮重命名为move,右击move按钮点击Go to slot...跳转到该按钮的槽函数。

B、查阅ZMotion PC 编程手册,懂得用以插补运动接口函数的用法 。

C、根据PC编程手册中ZAux_Direct_Move函数的用法在槽函数中编写代码,进行功能实现。

9、运动法度榜样设计完毕,点击运行按钮。

留意:上位机用以太网连接节制器时,必要节制器和PC在同一网段下才能连接成功。

二、运动节制卡利用之Qt例程解说

1、在正运动技巧的光盘资料里有很多Qt的例程,经由过程这些例程可以更轻易的上手正运动技巧的节制器。以下是一个具体例程的解说。

2、例程的单轴运动的功能阐明

a、经由过程以太网链接到指定IP的节制器;

b、设置运动轴参数;

c、选择运动轴工具;

d、选择运动要领,实现持续运动和寸动;

3、例程的单轴运动的详细实现

(1)实现以网口要领链接节制器

A、鄙人拉框中手动添加IP:进入uI设计界面双击下拉框加入节制器Ip,措施如下。

B、参考ZMotion PC函数编程手册,认识ZAux_OpenEth()接口用法。

C、经由过程Open按钮的槽函数( on_pushButton_OpenEth_clicked()),调用动态库(zmotion.so)供给的链接节制器接口(ZAux_OpenEth()),实现与节制器的链接。

//以太网连接节制器

void MainWindow::on_pushButton_OpenEth_clicked()

{

int32 iresult;

char * tmp_buff = new char[16];

QString str, str_title;

/*从下拉框中获取IP*/

str = ui->comboBox_IP->currentText();

QByteArray ba = str.toLatin1();

tmp_buff = ba.data();

/*链接节制器*/

iresult = ZAux_OpenEth(tmp_buff,&g_handle);

if(0 == iresult)

{

str_title = ("linked:");

str_title += tmp_buff;

setWindowTitle(str_title);

/*开启准时器*/

m_nTimerId = startTimer(10);

}

else

{

setWindowTitle("no link!");

}

}

D、参考ZMotion PC函数编程手册,认识ZAux_OpenEth()接口用法。

E、经由过程Close按钮的槽函数( on_pushButton_CloseEth_clicked()),调用动态库(zmotion.so)供给的断开链接节制器的接口(ZAux_Close()),实现断开与节制器的链接。

//断开网口连接

void MainWindow::on_pushButton_CloseEth_clicked()

{

if(0 != g_handle)

{

/*断开链接*/

ZAux_Close(g_handle);

g_handle = NULL;

setWindowTitle("no line");

/*关闭准时器*/

killTimer(m_nTimerId);

m_nTimerId=-1;

}

}

(2)获取轴运动的信息以及输入输出口的信息

A、将X、Y、Z、R单选框设置到同一个按钮组顶用于轴选择。

B、经由过程准时器超时处置惩罚函数,调用动态库“zmotion.so”供给的获取轴dpos、vpspeed、idle信息的接口和输入输出口状态信息获取接口,实现对节制器状态的监控。

//准时器超时处置惩罚函数

void MainWindow::timerEvent(QTimerEvent *event)

{

if(m_nTimerId == event->timerId())

{

int idle;

float fdpos, fvspeed;

QString str_tmp;

/*获取轴状态*/

ZAux_Direct_GetIfIdle(g_handle,AxisGroup->checkedId(),&idle);

str_tmp = QString("Idle : %1").arg(idle?"stop":"run");

ui->label_statue->setText(str_tmp);

/*获取dpos*/

ZAux_Direct_GetDpos(g_handle,AxisGroup->checkedId(),&fdpos);

str_tmp = QString("Dpos : %1").arg(fdpos);

ui->label_dpos->setText(str_tmp);

/*获取vspeed*/

ZAux_Direct_GetVpSpeed(g_handle,AxisGroup->checkedId(),&fvspeed);

str_tmp = QString("Vspeed : %1").arg(fvspeed);

ui->label_vspeed->setText(str_tmp);

uint8 in, out, i=0,j=0,k=0;

charbuff[128]={0};

/*获取输进口状态*/

ZAux_GetModbusIn(g_handle, 0, 7, &in);//获取in0-in7状态

/*获取输出口状态*/

ZAux_GetModbusOut(g_handle, 0, 7, &out);//获取out0-out7状态

/*十进制转二进制*/

for(i=0; i= in)

{

buff[i+1]=in;

break;

}

}

/*更新UI信息*/

buff[0]? ui->checkBox_IN0->setChecked(true):ui->checkBox_IN0->setChecked(false);

buff[1]? ui->checkBox_IN1->setChecked(true):ui->checkBox_IN1->setChecked(false);

buff[2]? ui->checkBox_IN2->setChecked(true):ui->checkBox_IN2->setChecked(false);

buff[3]? ui->checkBox_IN3->setChecked(true):ui->checkBox_IN3->setChecked(false);

buff[4]? ui->checkBox_IN4->setChecked(true):ui->checkBox_IN4->setChecked(false);

buff[5]? ui->checkBox_IN5->setChecked(true):ui->checkBox_IN5->setChecked(false);

buff[6]? ui->checkBox_IN6->setChecked(true):ui->checkBox_IN6->setChecked(false);

buff[7]? ui->checkBox_IN7->setChecked(true):ui->checkBox_IN7->setChecked(false);

memset(buff,0,8);

/*十进制转二进制*/

for(i=0; i= out)

{

buff[i+1]=out;

break;

}

}

/*更新UI信息*/

buff[0]? ui->checkBox_OUT0->setChecked(true):ui->checkBox_OUT0->setChecked(false);

buff[1]? ui->checkBox_OUT1->setChecked(true):ui->checkBox_OUT1->setChecked(false);

buff[2]? ui->checkBox_OUT2->setChecked(true):ui->checkBox_OUT2->setChecked(false);

buff[3]? ui->checkBox_OUT3->setChecked(true):ui->checkBox_OUT3->setChecked(false);

buff[4]? ui->checkBox_OUT4->setChecked(true):ui->checkBox_OUT4->setChecked(false);

buff[5]? ui->checkBox_OUT5->setChecked(true):ui->checkBox_OUT5->setChecked(false);

buff[6]? ui->checkBox_OUT6->setChecked(true):ui->checkBox_OUT6->setChecked(false);

buff[7]? ui->checkBox_OUT7->setChecked(true):ui->checkBox_OUT7->setChecked(false);

}

}

(3)轴参数设置

经由过程参数生效按钮的槽函数“on_ParaSet_clicked()”,调用动态库(zmotion.so)供给的获取轴参数设置接口,对轴参数进行设置。

//参数设置

void MainWindow::on_ParaSet_clicked()

{

QString str_tmp;

float float_tmp;

int isidle = 0;

/*获取轴号*/

axis_num = AxisGroup->checkedId();

/*轴正在运行无法运动*/

ZAux_Direct_GetIfIdle(g_handle,axis_num,&isidle);

if(!isidle)

{

return;

}

/*设置units */

str_tmp = ui->lineEdit_Units->text();

float_tmp = str_tmp.toFloat();

ZAux_Direct_SetUnits(g_handle, axis_num, float_tmp);

/*设置 speed */

str_tmp = ui->lineEdit_Speed->text();

float_tmp = str_tmp.toFloat();

ZAux_Direct_SetSpeed(g_handle,axis_num,float_tmp);

/*设置 accel */

str_tmp = ui->lineEdit_Accel->text();

float_tmp = str_tmp.toFloat();

ZAux_Direct_SetAccel(g_handle,axis_num,float_tmp);

/*设置 decel */

str_tmp = ui->lineEdit_Decel->text();

float_tmp = str_tmp.toFloat();

ZAux_Direct_SetDecel(g_handle,axis_num,float_tmp);

/*设置sramp */

str_tmp = ui->lineEdit_Sramp->text();

float_tmp = str_tmp.toFloat();

ZAux_Direct_SetSramp(g_handle,axis_num,float_tmp);

}

(4)单轴寸动/持续运动

A、经由过程Run按钮的槽函数“on_pushButton_Run_clicked()”,调用动态库“zmotion.so”供给的相关接口函数,对轴进行运动节制。

//Run按钮的槽函数

void MainWindow::on_pushButton_Run_clicked()

{

QString str_tmp;

float float_tmp;

int isidle = 0;

ZAux_Direct_GetIfIdle(g_handle,axis_num,&isidle);

if(!isidle)

{

qDebug()checkedId())//inch

{

str_tmp = ui->lineEdit_inchdis->text();

float_tmp = str_tmp.toFloat();

ZAux_Direct_Singl_Move(g_handle,axis_num,ui->checkBox_dir->checkState()?-float_tmp:float_tmp);

}

else if(0 == RunModeGroup->checkedId())//continue

{

ZAux_Direct_Singl_Vmove(g_handle,axis_num,ui->checkBox_dir->checkState()?-1:1);

}

}

B、经由过程Stop按钮的槽函数“on_pushButton_Stop_clicked()”调用相关接口实现竣事轴运动的功能。

//Stop按钮的槽函数

void MainWindow::on_pushButton_Stop_clicked()

{

int isidle = 0;

ZAux_Direct_GetIfIdle(g_handle,AxisGroup->checkedId(),&isidle);

if(isidle) return;

/*单轴竣事*/

ZAux_Direct_Singl_Cancel(g_handle,AxisGroup->checkedId(),2);

}

(5)编译运行调试

在自己开拓法度榜样连接的同时,还可以经由过程ZDevelop来调试与诊断节制器的状态。

共同ZDevelop软件进行调试,经由过程ZDevelop中的轴参数,输进口,输出口,示波器,等等小对象可以更直不雅的对节制器的状态进行监控。

在示波器窗口中可以看到单轴移动300用户单位的曲线图。

本日,正运动技巧的运动节制卡利用开拓教程之Qt就分享到这里。更多杰出内容,请关注我们的"民众,"号。

分类 行业资讯
标签
(责任编辑:shuaxin)
shuaxin
负责频道:
关于本文的作者
  • 0人
      垃圾
  • 0人
      期待
  • 0人
      加油
  • 0人
      兴奋
  • 0人
      吃惊
  • 0人
      奋斗
  • 0

编辑推荐

我有话说:

网友评论
更多评论

最新资讯

更多
2020年优酷会员vip账号免费共享最新更新第182期

2020年优酷会员vip账号免费共享最新更新第182期

运动控制卡应用开发教程之使用
北美观察丨新冠肺炎疫情下的北美
服务器放在北极和深海,是谁给了
云顶之弈10.16机甲秘法刺阵容玩法
重拳出击!福州台江洋中街道开展
危化品突发爆炸犹如核弹!已致

热门标签

更多
评论回复(您的评论需要经过审核才能显示)X

投稿
反馈