《简单易用的运动控制卡(九):圆弧插补和螺旋插补.docx》由会员分享,可在线阅读,更多相关《简单易用的运动控制卡(九):圆弧插补和螺旋插补.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、简单易用的运动控制卡(九):圆弧插补和螺旋插补简单易用的运动控制卡(九):圆弧插补和螺旋插补导语:今天,正运动小助手给大众共享一下运动控制卡之ECI3808怎样使用C+编程实现运动控制卡的圆弧插补和螺旋插补运动。今天,正运动小助手给大众共享一下运动控制卡之ECI3808怎样使用C+编程实现运动控制卡的圆弧插补和螺旋插补运动。一、ECI3808硬件介绍1.功能介绍ECI3808系列控制卡支持最多达12轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等;采用优化的网络通讯协议可以实现实时的运动控制。ECI3808系列运动控制卡支持以太网,RS232通讯
2、接口和电脑相连,接收电脑的指令运行,可以通过CAN总线去连接各个扩展模块,进而扩展输入输出点数或者运动轴。ECI3808系列运动控制卡的应用程序可以使用VC,VB,VS,C+,C#等软件来开发,程序运行时需要动态库zmotion.dll。调试时可以把ZDevelop软件同时连接到控制器,进而方便调试和观察。2.硬件接口通用输入口电路通用输出口电路AD/DA接口讲明本地脉冲轴讲明3.控制器根本信息二、C+进展运动控制开发1.新建MFC工程并添加函数库(1)在VS2021菜单“文件“新建“工程,启动创立工程向导。 (2)选择开发语言为“VisualC+和程序类型“MFC应用程序。 (3)点击下一步
3、即可。 (4)选择类型为“基于对话框,下一步或完成。 (5)找到厂家提供的光盘资料,途径如下(64位库为例)。A.进入厂商提供的光盘资料找到“8.PC函数文件夹,并点击进入。B.选择“函数库2.1文件夹。C.选择“Windows平台文件夹。D.根据需要选择对应的函数库这里选择64位库。E.解压C+的压缩包,里面有C+对应的函数库。F.函数库详细途径如下。 (6)将厂商提供的C+的库文件和相关头文件复制到新建的工程里面。 (7)在工程中添加静态库和相关头文件。A.先右击工程文件,接着依次选择:“添加“现有项。B.在弹出的窗口中依次添加静态库和相关头文件。(8)声明用到的头文件和定义控制器连接句柄
4、。至此工程新建完成,可进展MFC工程开发。2.查看PC函数手册,熟悉相关函数接口。(1)PC函数手册也在光盘资料里面,详细途径如下:“光盘资料8.PC函数函数库2.1ZMotion函数库编程手册V2.1.pdf (2)链接控制器,获取链接句柄。ZAux_OpenEth()接口讲明: (3)圆弧插补、空间圆弧、螺旋插补的对应函数接口如下。3.MFC开发控制器的圆弧插补和螺旋插补例程。(1)例程界面如下。 (2)链接按钮的事件处理函数中调用链接控制器的接口函数ZAux_OpenEth(),与控制器进展链接,链接成功后启动定时器1监控控制器状态。/链接控制器voidCTest_moveDlg:OnO
5、pen()charbuffer256;int32iresult;/假如之前有连接那么先断开之前的连接if(NULL!=g_handle)ZAux_Close(g_handle);g_handle=NULL;/获取ip输入框的IP地址GetDlgItemText(IDC_IPLIST,buffer,255);buffer255=0;/通过网口链接控制器iresult=ZAux_OpenEth(buffer,g_handle);if(ERR_SUCCESS!=iresult)g_handle=NULL;MessageBox(_T(链接失败);SetWindowText(未链接);return;/连
6、接成功启动定时器1,监控控制器的轴信息SetWindowText(已链接);SetTimer(1,100,NULL);/初始化轴参数for(inti=0;ii+)ZAux_Direct_SetAtype(g_handle,i,1);ZAux_Direct_SetUnits(g_handle,i,1);ZAux_Direct_SetSpeed(g_handle,i,100);ZAux_Direct_SetAccel(g_handle,i,1000);ZAux_Direct_SetDecel(g_handle,i,1000);(3)通过定时器1监控控制器的状态。voidCTest_moveDlg:
7、OnTimer(UINT_PTRnIDEvent)if(NULL=g_handle)MessageBox(_T(链接断开);return;if(1=nIDEvent)CStringXpos;CStringYpos;CStringZpos;CStringUpos;floataxis_pos4;/获取当前轴位置ZAux_Direct_GetAllAxisPara(g_handle,dpos,4,axispos);Xpos.Format(%.2f,axispos0);Ypos.Format(%.2f,axispos1);Zpos.Format(%.2f,axispos2);Upos.Format(%
8、.2f,axispos3);GetDlgItem(IDC_EDIT_XPOS)-SetWindowText(Xpos);GetDlgItem(IDC_EDIT_YPOS)-SetWindowText(Ypos);GetDlgItem(IDC_EDIT_ZPOS)-SetWindowText(Zpos);GetDlgItem(IDC_EDIT_UPOS)-SetWindowText(Upos);/判断主轴状态(即BASE的第一个轴)intstatus=0;ZAux_Direct_GetIfIdle(g_handle,0,status);if(status=-1)GetDlgItem(IDC_ST
9、ATUS)-SetWindowText(运动状态:停顿中);elseGetDlgItem(IDC_STATUS)-SetWindowText(运动状态:运动中);(4)通过启动按钮的事件处理函数来开场插补运动。/启动运动voidCTest_moveDlg:OnStart()if(NULL=g_handle)MessageBox(_T(链接断开);return;inti=0;/刷新参数UpdateData(true);/运动BASE轴列表intaxislist4=0,1,2,3;/运动列表floatposlist4=m_xpos1,m_ypos1,m_zpos1,m_upos1;/圆弧中间点fl
10、oatmidlist4=m_xpos2,m_ypos2,m_zpos2,m_upos2;/用于相对绝对位置的转换floatendmove4=0;/选择介入运动的轴,第一个轴为主轴,插补参数全用主轴参数ZAux_Direct_SetSpeed(g_handle,axislist0,m_speed);/速度ZAux_Direct_SetAccel(g_handle,axislist0,m_acc);/加速度ZAux_Direct_SetDecel(g_handle,axislist0,m_dec);/减速度/触发Zdevelop软件的电子示波器抓取波形ZAux_Trigger(g_handle);
11、/绝对运动if(m_absmode=0)switch(m_movemode)case0XYZU直线插补ZAux_Direct_MoveAbs(g_handle,4,axislist,poslist);break;case1XY3点圆弧ZAux_Direct_MoveCirc2Abs(g_handle,2,axislist,midlist0,midlist1,poslist0,poslist1);break;case2x,y,z螺旋插补(x,y圆弧插补,z进展螺旋)ZAux_Direct_MHelical2Abs(g_handle,3,axislist,midlist0,midlist1,pos
12、list0,poslist1,poslist2,0);break;case3XYZ空间圆弧插补U螺旋没有绝对指令,需要用ENDMOVE_BUFF转相对for(i=0;ii+)/获取当前轴缓冲区的目的位置ZAux_Direct_GetEndMoveBuffer(g_handle,i,endmovei);poslisti=poslisti-endmovei;midlisti=midlisti-endmovei;ZAux_Direct_MSpherical(g_handle,4,axislist,poslist0,poslist1,poslist2,midlist0,midlist1,midlist
13、2,0,poslist3,0);break;default:break;else/相对switch(m_movemode)case0XYZU直线插补ZAux_Direct_Move(g_handle,4,axislist,poslist);break;case1XY3点圆弧ZAux_Direct_MoveCirc2(g_handle,2,axislist,midlist0,midlist1,poslist0,poslist1);break;case2x,y,z螺旋插补(x,y圆弧插补,z进展螺旋)ZAux_Direct_MHelical2(g_handle,3,axislist,midlist
14、0,midlist1,poslist0,poslist1,poslist2,0);break;case3XYZ空间圆弧插补U螺旋第5轴间隔为0ZAux_Direct_MSpherical(g_handle,4,axislist,poslist0,poslist1,poslist2,midlist0,midlist1,midlist2,0,poslist3,0);break;default:break;(5)通过停顿运动按钮的事件处理函数来停顿当前的插补运动。/停顿运动voidCTest_moveDlg:OnStop()if(NULL=g_handle)MessageBox(_T(链接断开);r
15、eturn;/停顿主轴即可停顿插补运动,主轴为BASE的一个轴ZAux_Direct_Single_Cancel(g_handle,0,2);(6)通过坐标清零按钮的事件处理函数来对当前轴的坐标进展清零。/去除坐标voidCTest_moveDlg:OnClear()if(NULL=g_handle)MessageBox(_T(链接断开);return;for(inti=0;ii+)ZAux_Direct_SetDpos(g_handle,i,0);完好代码获取地址三、调试与监控编译运行例程,同时通过ZDevelop软件连接控制器对控制器状态进展监控。1.连接ZDevelop软件,并点击“视图“示波器翻开示波器对轴运动情况进展监控。X、Y、Z、U4轴直线插补运动波形图X、Y轴3点圆弧插补运动波形图X、Y、Z螺旋插补运动波形图2.ZDevelop软件调试视频。本次,正运动技术简单易用的运动控制卡(九):圆弧插补和螺旋插补,就共享到这里。更多精彩内容请关注“正运动小助手公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。本文由正运动技术原创,欢送大众转载,共同学习,一起进步中国智能制造程度。文章版权归正运动技术所有,如有转载请注明文章;。0
限制150内