今天,正运动小助手给大家分享一下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.连续插补和S曲线设置相关指令介绍。

4.拐角模式设置相关指令介绍。

三、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;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->setText(StrText);StrText = QString("#轴0速度:(%1) #轴1速度:(%2) #轴2速度:(%3)").arg(AxisMspeed[0]).arg(AxisMspeed[1]).arg(AxisMspeed[2]);ui->AxisMspeed->setText(StrText);}}

4.连续小线段的加工。

(1)通过ZCADToMore2.0导图工具将“dxf”格式的CAD图纸导成“Z3P”文件的格式并下载到控制器里面。(点击控制器→发送到控制器按钮,即可把代码显示窗口中的代码发送到控制器中,在控制器中的文件名为:ZCAD.z3p)

(2)搜索控制器里面的Z3P文件。

//搜索Z3P文件void MainWindow::on_Search_clicked(){char Buff[1024]={"123"};//搜索Z3P文件,结果放到VR(0) 开始的寄存器存储ZAux_Execute(g_handle, "FILE \"FLASH_FIRST\", \".z3p\",0", NULL, 0);//获取VR寄存器里面的文件名ZAux_Execute(g_handle, "?vrstring(0,128)", Buff, 1024);//去除文件名的\nint Len = strlen(Buff);Buff[Len-1]=0;QString Str = QString(QLatin1String(Buff));//更新到UI界面上ui->lineEdit->setText(Str);qDebug()<<Buff<<Str;}

(3)通过启动按钮启动Z3P文件。

//启动按钮槽函数:设置拐角模式,开始运行Z3P文件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);//打开连续插补ZAux_Direct_SetMerge(g_handle,i,1);//设置S曲线参数ZAux_Direct_SetSramp(g_handle,i,250);}//设置拐角模式int CornerMode=0;//是否打开自动倒角if(ui->IsChamfer->checkState()){CornerMode = 32+CornerMode;}//是否打开拐角减速if(ui->IsSlowDown->checkState()){CornerMode = 2+CornerMode;//设置开始减速角度Text = ui->StartAngle->toPlainText();ZAux_Direct_SetDecelAngle(g_handle,AxisList[0],Text.toFloat()*3.14/180);//设置停止减速角度Text = ui->StopAngle->toPlainText();ZAux_Direct_SetStopAngle(g_handle,AxisList[0],Text.toFloat()*3.14/180);//设置参数速度Text = ui->SpSpeed->toPlainText();ZAux_Direct_SetForceSpeed(g_handle,AxisList[0],Text.toFloat());}//是否打开小圆限速if(ui->IsMinCir->checkState()){CornerMode = 8+CornerMode;//设置限速半径Text = ui->CirRadius->toPlainText();ZAux_Direct_SetFullSpRadius(g_handle,AxisList[0],Text.toFloat());//设置参数速度Text = ui->SpSpeed->toPlainText();ZAux_Direct_SetForceSpeed(g_handle,AxisList[0],Text.toFloat());}ZAux_Direct_SetCornerMode(g_handle,AxisList[0],CornerMode);//停止线程1ZAux_Execute(g_handle, "STOPTASK 1", NULL, 0);//启动Z3P文件char CmdBuff[64];char *str = ui->lineEdit->text().toLatin1().data();sprintf(CmdBuff, "FILE3_RUN \"%s\",1",str);ZAux_Execute(g_handle, CmdBuff, NULL, 0);}

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

//停止轴运动void MainWindow::on_StopButton_clicked(){//停止线程1ZAux_Execute(g_handle, "STOPTASK 1", NULL, 0);//停止轴运动ZAux_Direct_Rapidstop(g_handle,2);}

6.小线段连续轨迹加工的暂停与继续。

//暂停运动void MainWindow::on_Suspended_clicked(){//暂停轴运动ZAux_Direct_MovePause(g_handle,0,0);//暂停线程1ZAux_Execute(g_handle, "PAUSETASK 1", NULL, 0);}//恢复运动void MainWindow::on_Restore_clicked(){//恢复轴运动ZAux_Direct_MoveResume(g_handle,0);//恢复线程1ZAux_Execute(g_handle, "RESUMETASK 1", NULL, 0);}

四、例程移植到Linux设备上

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

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

添加函数库1

添加函数库2

添加函数库3

→至此,重新编译即可运行。

3.调试与监控。

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

(1)小线段轨迹加工的X-Y位置波形图。

(2)小线段轨迹加工的速度波形图。(连续插补未打开拐角减速)

(3)小线段轨迹加工的速度波形图。(连续插补设置拐角减速)

本次,正运动技术EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续,就分享到这里。

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

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

EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续相关推荐

  1. EtherCAT运动控制卡开发教程之python

    众所周知,Python作为一门面向对象的新兴开发语言,具有非常完善的基础代码库,更注重实用,同时代码可读极强,编写完程序即可直接运行,被越来越多的人广泛将它用于机器视觉和自动化控制. 今天正运动技术与 ...

  2. iOS 9应用开发教程之ios9中实现按钮的响应

    iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...

  3. wince 开发_正运动技术运动控制卡应用开发教程之Python

    众所周知,Python作为一门面向对象的新兴开发语言,具有完善的基础代码库,实用性与代码可读性强,被越来越多的人应用于智能装备的运动控制. 今天正运动技术与大家分享一下运动控制卡应用开发教程之Pyth ...

  4. 运动控制卡应用开发教程之VC6.0

    今天,我们来讲解一下正运动技术运动控制卡应用开发教程之VC6.0. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. ECI2 ...

  5. 运动控制卡应用开发教程之MATLAB

    今天,正运动小助手给大家分享一下运动控制卡应用开发教程之MATLAB.  一 ECI2828硬件介绍 ECI2828系列运动控制卡支持多达16 轴直线插补.任意圆弧插补.空间圆弧.螺旋插补.电子凸轮. ...

  6. 运动控制卡应用开发教程之LabVIEW

    今天,我们来讲解一下正运动技术运动控制卡应用开发教程之LabVIEW. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. EC ...

  7. python 运动控制卡_运动控制卡应用开发教程之Linux

    今天,正运动技术为大家分享一下运动控制卡应用开发教程之Linux.我们将从新建Qt项目,添加函数库讲起,再详细讲解函数的用法,最后通过一个连续插补例程讲解来了解项目实操. 在正式学习之前,我们先了解一 ...

  8. 运动控制卡的函数库与Linux,运动控制卡应用开发教程之ROS(下)

    在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. ECI2418支持4轴脉冲输入与编码器反馈,板载24点输入,16点输出,2A ...

  9. 微信小程序开发教程之Array数组对象

    最新消息,Hi小程序小编了解到,微信小程序开发教程之Array数组对象. 微信小程序开发教程已经是当下最热门的话题,下面将从多方面来谈谈Array数组对象相关的内容. Array,又称作数组对象我们通 ...

最新文章

  1. Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常
  2. 【强化学习】Sarsa 和 Sarsa(λ)
  3. Leetcode 剑指 Offer 53 - I. 在排序数组中查找数字 I (每日一题 20210928)
  4. JavaScript——自定义对话框
  5. 启动php出现的错误
  6. linux下无法umount移动设备
  7. android 硬件对接,Android 对接硬件串口篇
  8. 如何使用redis来实现常见的游戏排行榜
  9. 两年Java工作经验应该会些什么技术
  10. 【java】java 并发编程 CopyOnWriteArrayList
  11. mysql 授权 navicat的登录数据库
  12. VMware下安装Linux,Centos-7-x86_64-NetInstall.iso版本
  13. Win7下Tomcat7和Apache2.2集成
  14. 微信电脑版真的要来了 微信Windows版客户端1.0 Alpha推出
  15. iOS 混合开发 —— 方案分析
  16. InnoDB存储引擎关键特性
  17. nginx 5xx 状态码分析
  18. 绕过iframe busting
  19. EH集团筹集逾500万瑞士法郎,用于推进其零排放燃料电池技术
  20. PYNQ系列学习(三)|pynq与zynq对比(二)

热门文章

  1. 部分安卓手机h5页面出现空白页面
  2. vue打包部署axios跨域问题
  3. shell脚本 -- 用途替换所有json文件(main.json 除外)中的 ios下载链接
  4. 代替网易见外的智能语音识别转换字幕工具
  5. 面向过程方法与面向对象方法的比较
  6. stc32的Type-C接口识别不到
  7. c++实验三-个人所得税计算器
  8. Linux系统关闭nginx,linux下nginx启动、重启、关闭
  9. Eviews面板数据回归过程解析——以在企业现金流量和盈利质量上的应用为例
  10. postgresql日期相关函数