mfc配置CAN通信


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

//開始解析

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM