配置:

把kerneldlls文件夹、ControlCAN.dll、ControlCAN.lib放在工程下面(debug和Release下面,最后需要exe和这些文件在一起);右键工程属性,链接器->输入->附加依赖项,填入./ControlCAN.lib。

查看工程的外部依赖性里面有了controlcan.h就成功了

 

 

一、打开can

VCI_INIT_CONFIG init_config;//定义一个初始化can的结构体

memset(&init_config,0,sizeof(VCI_INIT_CONFIG));

init_config.AccMask = 0xffffffff; //屏蔽码,表示全部接接收

init_config.Mode = 0; //正常模式

init_config.Timing0 = 0x00; //定时器0,和波特率有关,1M波特率

init_config.Timing1 = 0x14; //定时器1

VCI_OpenDevice(VCI_USBCAN2,a,0);//打开设备

VCI_InitCAN(VCI_USBCAN2,a,b,&init_config);//初始化can,VCI_USBCAN2=4,a:设备号,b:通道号

VCI_StartCAN(VCI_USBCAN2,a,b);//打开指定通道

二、关闭can

VCI_CloseDevice(VCI_USBCAN2,a);

三、复位can

(VCI_ResetCAN(VCI_USBCAN2,a,b);//复位

VCI_StartCAN(VCI_USBCAN2,a,b);//再打开

四、发送

VCI_CAN_OBJ vco;//数据结构体

VCI_Transmit(VCI_USBCAN2,a,b,&vco,1);//发送

五、接收

VCI_CAN_OBJ frameinfo[100];//接收结构体

VCI_ERR_INFO errinfo;//错误结构体

int buf_frame_lenth = 0;//缓冲区没有被读取的帧数据个数

DWORD rcv_lenth = 0;//接收到的数据

int a ;

int b ;

a = ((CComboBox*)can_this->GetDlgItem(IDC_COMBO10))->GetCurSel();//设备号

b = ((CComboBox*)can_this->GetDlgItem(IDC_COMBO11))->GetCurSel();//通道号

while (can_this->ISOPEN)

{

Sleep(100);

buf_frame_lenth = VCI_GetReceiveNum(VCI_USBCAN2,a,b);//查看缓冲区有多少帧数据

if(buf_frame_lenth != 0)//如果缓冲区有未被读取的数据,开始读数据

{

rcv_lenth = VCI_Receive(VCI_USBCAN2,a,b,frameinfo,100,20);//接收数据

if(rcv_lenth == 0xFFFFFFFF)//读取错误

  VCI_ReadErrInfo(VCI_USBCAN2,a,b,&errinfo);//读取错误信息

//开始解析

}




长风破浪会有时,直挂云帆济沧海!