今天,我们来讲解一下正运动技术运动控制卡应用开发教程之VC6.0。
在正式学习之前,我们先了解一下正运动技术的运动控制卡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等操作系统。
一、运动控制卡VC6.0开发流程
1、打开 VC++6.0,新建一个工程。
2、选择“ MFC APPWizard(exe)”,选择 工程保存路径,设置 工程名,选择 确定。
3、在应用程序类型 选择基本对话框,完成项目新建。
4、将产品配套光盘“ ..\函数库\dll”文件夹中的 动态链接库“ zmotion.dll、zauxdll.dll”、 头文件“ zauxdll2.h”和 lib文件“ zauxdll.lib”复制到工程文件夹中。
5、选择“Project”菜单下的“Settings…”菜单项。
6、切换到“Link”标签页,在“Object\library modules”栏中输入lib文件名:zauxdll.lib。
7、在应用程序文件中加入函数库头文件的声明,如:#include “zauxdll2.h”,
8、至此,用户就可以在VC6.0中调用函数库中的任何函数,开始编写应用程序, 具体函数的用法的功能可以参考光盘资料里面的:ZMotion PC函数库编程手册。
9、参考ZMotion PC函数库编程手册的链接控制器的函数说明,在 ECIDlg:OnInitDialog()函数中添加链接控制器代码 ZAux_OpenEth(“192.168.0.11”,&g_handle);即可链接控制器。
10、通过MOVE按钮,控制控制器进行插补运动。
(1)右键MOVE按钮,选择属性,设置按钮ID。
(2)右键MOVE按钮选择事件。
(3)新建相关事件。
4)在事件处理函数中添加插补运动函数。
11、编译运行就可以通过PC控制控制器了。
如果编译报错:无法打开预编译的头文件:没有这样的文件或目录。
请选择“Project”菜单下的“Settings…”菜单项,然后选择c/c++进行如下设置。
二、VC6.0例程讲解
1、在我们的光盘资料里有很多VC6.0的例程,通过这些历程可以更容易的上手我们的控制器。
2、单轴运动例程
a、通过以太网链接到指定IP的控制器;
b、设置运动轴参数;
c、选择运动轴对象;
d、选择运动方式,实现持续运动和寸动;
3、实现步骤
(1)搜索IP,链接控制器。
A、先将相关控件拖拽到UI界面,并设置对应的事件处理函数。
B、下拉框事件处理函数,实现自动搜索IP。
先根据ZMotion PC 编程手册,在下拉框事件处理函数添加控制器IP搜索函数“ZAux_SearchEthlist()”,然后将获取到的IP字符串进行解析,具体解析方法请参考例程。
//自动搜索IP void CECIDlg::OnDropdownIPList() { char buffer[10240];
int32 iresult; iresult = ZAux_SearchEthlist(buffer, 10230, 100);
if(ERR_OK != iresult)
{ return;
} CComboBox *m_pEthList; m_pEthList = (CComboBox *)GetDlgItem(IDC_IPList); if(NULL == m_pEthList)
{ return;
} int ipos =0;
const char * pstring;
pstring = buffer; for(int j= 0; j< 20;j++)
{ char buffer2[256];
buffer2[0] = '\0';
while(' ' == pstring[0])
{ pstring++; } ipos = sscanf(pstring , "%s", &buffer2);
if(EOF == ipos)
{ break;
} while((' ' != pstring[0]) && ('\t' != pstring[0]) && ('\0' != pstring[0]))
{ pstring++; } if(CB_ERR != m_pEthList->FindString(0, buffer2))
{ continue; } if('\0' == buffer2)
{ return;
} m_pEthList->AddString(buffer2); } return;
}
C、点击链接按钮链接控制器。
根据ZMotion PC 编程手册,在链接按钮点击事件处理函数中添加网口连接控制器的函数“ZAux_OpenEth()”,即可实现链接控制器的功能。
D、点击断开按钮断开链接控制器。
根据ZMotion PC 编程手册,在断开按钮点击事件处理函数中添加断开链接控制器的函数“ZAux_Close()”,即可实现断开链接控制器的功能。
(2)选择轴,并对所选择的dpos和当前速度以及运动状态进行监控。
A、先将相关控件拖拽到UI界面,并设置对应的事件处理函数。
B、通过X、Y、Z、R 4个单选按钮的事件处理函数,实现对轴的选择。
C、通过定时器实现对轴状态的实时更新。
(3)实现in0-in7,out0-out7状态的读取。
使用接口ZAux_GetModbusIn() 和ZAux_GetModbusOut(),对io状态进获取。并封装成一个子函数将该函数添加到定时器超时处理函数中,用于io状态的更新。
//IO监控
void CECIDlg::IOGet()
{
uint8 in, out, i=0,j=0,k=0;
char buff[128]={0};
ZAux_GetModbusIn (g_handle, 0, 7, &in); //获取in0-in7状态
itoa(in, buff, 2);
j=0;
for( i=0; i<8; i++)
{
if((48 == buff[i])||(49 == buff[i]))
{
j++;
}
}
for(i=0 ; i<(8-j); i++)
{
for(k=7; k>0; k--)
{
buff[k] = buff[k-1];
}
buff[0]=48;
}
sprintf(buff, "输入口IN0-7 状态:%c %c %c %c %c %c %c %c", buff[7], buff[6],buff[5],buff[4],buff[3],buff[2],buff[1],buff[0]);
GetDlgItem( IDC_IN )->SetWindowText( buff );
ZAux_GetModbusOut (g_handle, 0, 7, &out);//获取out0-out7状态
itoa(out, buff, 2);
j=0;
for( i=0; i<8; i++)
{
if((48 == buff[i])||(49 == buff[i]))
{
j++;
}
}
for(i=0 ; i<(8-j); i++)
{
for(k=7; k>0; k--)
{
buff[k] = buff[k-1];
}
buff[0]=48;
}
sprintf(buff, "输出口OUT0-7状态:%c %c %c %c %c %c %c %c",buff[7], buff[6],buff[5],buff[4],buff[3],buff[2],buff[1],buff[0]);
GetDlgItem( IDC_OUT )->SetWindowText( buff );
}
(4)对控制器参数进行设置。
A、先将相关控件拖拽到UI界面,并设置参数生效按钮的事件处理函数。
B、设置各个编辑框的成员变量,先右键编辑框选择建立类导向,再选择成员变量进行设置。
C、然后在参数生效按钮的事件处理函数中添加参数设置的相关函数接口,对控制器参数进行设置。
(5)控制控制器运动。
A、在UI界面再添加两组单选框、寸动距离编辑框,以及两个按钮。
B、两组单选框用于运动方向和运动方式的设置,通过他们的事件处理函数对标志位变量m_moveatype和m_movedir进行设置。
C、通过启动按钮的事件处理函数来启动控制器进行运动。
D、通过停止按钮的事件处理函数来停止控制器运动。
(6)编译运行演示。
A、编译运行示教例程
B、同时通过ZDevelop软件连接同一个控制器,对运动控制效果进行观察。
以下是轴参数的显示,IN/OP显示,示波器中 DPOS MSPEED显示。
今天,正运动技术运动控制卡应用开发教程之VC6.0就分享到这里。更多精彩内容,请关注我们的公众号。 本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。