USBCAN-II已经停产,目前它的升级版本为USBCAN-2E-U,之前我有过一篇文章讨论USBCAN-II的使用方法,见:点http://blog.csdn.net/flydream0/article/details/8088248.本文的目的是讨论两者在使用上的区别,以便将原有的USBCAN-II的源码移植到USBCAN-2E-U上来.
仔细看了下USBCAN-2E-U的开发手册,发现相对于USBCAN-II来说,在初始化时,USBCAN-2E-U必须设置波特率,否则不能正常通信,设置波特率是通过VCI_SetReference接口来实现的,函数原型为:
DWORD __stdcallVCI_SetReference(DWORD DevType,DWORD DevIndex,DWORD CANIndex,DWORD RefType,PVOID pData);
这个函数本来是设置相关参加的意思,在不同的设备类型具有不同的含义,但在DevType=USBCAN-2E-U,且RefType=0时表示设置波特率的含义:
一个实始化的实例如下:
//打开设备
if(VCI_OpenDevice(m_devtype,index,0)!=STATUS_OK)
{
MessageBox("打开设备失败!","警告",MB_OK|MB_ICONQUESTION);
return;
}
//设置波特率
if(m_devtype ==VCI_USBCAN_2E_U)
{
DWORD baud =0x060007;
if (VCI_SetReference(m_devtype,index, cannum, 0, &baud) != STATUS_OK)
{
MessageBox(_T("设置波特率错误,打开设备失败!"), _T("警告"), MB_OK | MB_ICONQUESTION);
VCI_CloseDevice(m_devtype,index);
return;
}
}
//初始化CAN
if(VCI_InitCAN(m_devtype,index,cannum,&init_config)!=STATUS_OK)
{
MessageBox("初始化CAN失败!","警告",MB_OK|MB_ICONQUESTION);
VCI_CloseDevice(m_devtype,index);
return;
}
//...
//启动CAN
if(VCI_StartCAN(m_devtype,m_devind,m_cannum)==1)
{
ShowInfo("启动成功",0);
}
else
{
CString str;
str="启动失败";
ShowInfo(str,2);
}
只要在初始化部分增加设置波特率操作,就能将USBCAN-II的源码很好的移植到USBCAN-2E-U上了.
其它的,接收过滤器上的接口也做了优化,这里就不做详情介绍了.