QT二次開發Kvaser

前言

最近工作中需要自己去開發一個上位機,上位機的通訊方式是CAN,利用Kvaser將CAN信息傳遞到上位機,所以就需要二次開發Kvaser,保證上位機的正常通訊。
原本是本着前人栽樹,後人乘涼的態度,去網絡上查找相關的源碼,不過很可惜的是,我只找到部分關於C#的源碼,而且網絡上很少有相關的資料,這裏對應的API函數可以去官網看看,裏面的內容還是挺詳細,對於英文不是很好的同學,可以參考這份文件《Kvaser API學習心得》。這篇博客也有一些資源鏈接

準備工作

1.Kvaser一條;
2.Kvaser驅動,這個可以去Kvaser官網下載;
3.安裝QT;
4.USB-CAN盒,用於接受和發送CAN報文,主要是爲了驗證我的數據發送和接收是否正確;

步驟

前面的鋪墊做好以後,可以正式來開發

1.導入CAN鏈接庫

在驅動文件夾中找到canlib文件夾
在這裏插入圖片描述
打開canlib-》Lib-》MS,找到canlib32.lib
在這裏插入圖片描述
將這個文件和canlib-》INC中canlib.h一起復制到項目文件夾下
在這裏插入圖片描述

2.初始化Kvaser

    canInitializeLibrary();//kvaser初始化
    h = canOpenChannel(0,canOPEN_EXCLUSIVE);//打開通道0,可以參照上述提到的Kvaser API學習心得文件中查看API詳細說明
    if(h == canOK)
    {
        canSetBusParams(h,BAUD_500K,0,0,0,0,0);
        canSetBusOutputControl(h,canDRIVER_NORMAL);
        canBusOn(h);
    }

3.發送數據

//這裏之發了3位數據,爲了驗證發送是否正確
	char msg[64];
    msg[0] = 0;
    msg[1] = 1;
    msg[2] = 2;
    h = canWrite(h,0x123,msg,3,0);

4.接受數據

	status = canRead(h,&id,&msg,&dlc,&flag,&time1);
    if(status == canOK)
     {
         for(int i = 0; i < 8; i++)
         {
             msg_byte[i] = msg[i] + 0x00;//這裏轉換成了十進制

         }
     }

5.結果

本博客主要爲了驗證Kvaser的通信是否正常,所以界面沒有去做設計,只有一個發送按鈕,接收的數據直接輸出到了控制檯。
實驗界面:
在這裏插入圖片描述
發送:
發送的數據在代碼中:[0,1,2],所以我們看到USB-CAN的結果。
在這裏插入圖片描述
接收
數據由USB-CAN發送出,接受到的數據我直接用qDebug輸出到了控制檯(這裏我做了進制的轉換,所以顯示的數據爲十進制,比如發送10,顯示出來的會是16)
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章