运动控制卡应⽤开发教程之C++
今天,正运动技术为⼤家分享⼀下应⽤C++开发⼀个多段连续插补的运动控制应⽤。
我们主要从新建MFC项⽬,添加函数库讲起,再了解PC函数⽤法,最后通过项⽬实战——连续插补运动例程讲解,来让⼤家熟悉C++的项⽬开发。
在正式学习之前,我们先了解⼀下正运动技术的运动控制卡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等操作系统。
以下是C++
开发流程
01 新建MFC项⽬,添加函数库。
1、在VS2015菜单“⽂件”→“新建”→ “项⽬”,启动创建项⽬向导。
2、选择开发语⾔为“Visual C++”和程序类型“MFC应⽤程序”。
3、下⼀步即可。
4、选择类型为“基于对话框”,下⼀步或者完成。
下⼀步则往后继续配置,完成就直接完成即可。这⾥就不需要再配置了,⽆关紧要的,只要这个类型选好就⾏,其他的可以在项⽬中编辑。
5、到⼚家提供的光盘资料,路径如下(64位库为例)。
1)进⼊光盘资料到PC函数⽂件夹。
2)选择函数库2.1。
3)Windows平台。
4)根据需要选择对应的函数库这⾥选择64位库。
5)解压C++的压缩包,⾥⾯有C++对应的函数库。
6)函数库具体路径如下。
6、将⼚商提供的C++的库⽂件和相关头⽂件复制到新建的项⽬⾥⾯。
7、在项⽬中添加静态库和相关头⽂件。
静态库:zauxdll.lib, zmotion.lib
相关头⽂件:zauxdll2.h, zmotion.h
1)先右击头⽂件,接着依次选择:“添加”→“现有项”。
2)在弹出的窗⼝中依次添加静态库和相关头⽂件。
3)声明⽤到的头⽂件和定义控制器连接句柄。
⾄此项⽬新建完成。
02 查看PC函数⼿册,了解其⽤法。
1、PC函数⼿册也在光盘资料⾥⾯。
具体路径如下:
2、PC编程
先根据控制器连接⽅式选择对应的连接函数连接控制器,返回控制器句柄。接着⽤返回的控制器句柄,实现对控制器的控制。
⽐如通过⽹⼝连接控制器,先使⽤ZAux_OpenEth()链接控制器,获取控制器句柄handle。
通过获取到的控制器句柄handle,对控制器进⾏单轴运动控制。
通过获取到的控制器句柄handle,对控制器进⾏多轴运动控制。
//多轴运动
//多轴运动
intaxislist[ 4] = { 0, 1, 2, 3 }; //运动BASE轴列表
floatdislist[ 4] = { 100,100,100,100}; //运动距离列表
ZAux_Direct_Move(g_handle, 4, axislist, dislist); //多轴运动
03 项⽬实战之连续插补运动例程讲解
1、例程以建⽴板卡的连接,执⾏3段连续轨迹的加⼯为⽬标。
2、例程简易流程图。
// 相关函数
ZAux_OpenEth(IP_buffer, &g_handle); //连接控制器
ZAux_Direct_GetAllAxisPara(g_handle, " DPOS", 4, showpos); //获取当前轴位ZAux_Direct_GetAllAxisPara(g_handle, " MSPEED", 4, mspeed); //更新轴速度ZAux_Direct_Single_Cancel(g_handle, 0, 2); //停⽌主轴运动
ZAux_Direct_Move(g_handle, 4, axislist, dislist1); //第1段多轴插补指令
ZAux_Direct_Move(g_handle, 4, axislist, dislist2); //第2段多轴插补指令
ZAux_Direct_Move(g_handle, 4, axislist, dislist3); //第3段多轴插补指令
ZAux_Close(g_handle);//断开连接
3、通过⽹⼝连接控制器,获取控制器连接句柄。
//Link按钮事件处理函数
voidCMergeDlg::OnBnClickedButtonLink()
{
charbuffer[256];
int32 iresult;
//如果之前有连接控制器着先断开连接
if(NULL != g_handle)
{
ZAux_Close(g_handle);
g_handle = NULL;
}
//从IP下拉框中获取IP
GetDlgItemText(IDC_COMBOX_IP, buffer, 255);
buffer[255] = '\0';
//通过PC函数库提供的连接控制器的函数接⼝(API),连接控制器iresult = ZAux_OpenEth(buffer, &g_handle);
if(ERR_SUCCESS != iresult)
{
python新建项目教程
g_handle = NULL;
MessageBox(_T(" 链接失败"));
SetWindowText(" 未链接");
return;
}
SetWindowText(" 已链接");
//启动定时器
SetTimer(1, 100, NULL);
SetTimer(2, 100, NULL);
//初始化轴参数
for( inti = 0; i<4; i++)
{
ZAux_Direct_SetAtype(g_handle, i, 1); //轴类型
ZAux_Direct_SetUnits(g_handle, i, 1000); //脉冲当量
ZAux_Direct_SetSpeed(g_handle, i, 100); //速度
ZAux_Direct_SetAccel(g_handle, i, 1000); //加速度
ZAux_Direct_SetDecel(g_handle, i, 1000); //减速度
ZAux_Direct_SetSramp(g_handle, i, 100); //S曲线时间
}
}
4、通过定时器1更新控制器轴0-3的位置信息和速度信息。
//定时器
void CMergeDlg::OnTimer(UINT_PTR nIDEvent)
{
if (NULL == g_handle)
{
MessageBox(_T(" 链接断开"));
return;
}
switch (nIDEvent)
{
case 1: //更新控制器轴0-3的位置信息和速度信息
CString Xpos, Xmspeed;
CString Ypos, Ymspeed;
CString Zpos, Zmspeed;
CString Upos, Umspeed;
float showpos[4] = { 0 };
float mspeed[4] = { 0 };
int status = 0;
//获取当前轴位置
ZAux_Direct_GetAllAxisPara(g_handle, " DPOS", 4, showpos); Xpos.Format(" X: %.2f", showpos[0]);
Ypos.Format(" Y: %.2f", showpos[1]);
Zpos.Format(" Z: %.2f", showpos[2]);
Upos.Format(" U: %.2f", showpos[3]);

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