配置:
把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);//讀取錯誤信息
//開始解析
}