我們知道CAN總線是連接車身各個模塊之間的橋樑,通過協議通訊,在車輛標定和測試中很多情況是用上位機和車身相連,收發滿足CAN總線的信號。這中間如何通訊呢?這就需要用到Kavser。
Kvaser 公司是 CAN 測試設備的優秀供應商,提供的 API 函數,通過Kvaser公司的設備,結合Kvaser CANlib的 API 函數,可以方便的編寫自己的 CAN 測試工具,對 CAN 網絡的開發測試有很大的幫助。
Kvaser Canlib地址: http://canlandbucket.s3-website-eu-west-1.amazonaws.com/productionResourcesFiles/6b1cefab-0210-415a-9925-55d6088c4716/canlib.exe
1. Kvaser設備:
常用的Kvaser設備型號如下:
Kvaser Hybrid 2xCAN/LIN: 標準USB接口和兩個高速CAN或LIN通道,兩個獨立9針D-SUB CAN接口。
Kvaser Leaf Light R v2 :採用標準USB2.0連接和高速CAN通道,配有9針D-SUB CAN接口,可處理標準和擴展CAN報文的傳送和接收,時間戳精度爲100微秒。
2. Kvaser CANLIB
a. 信息服務類:
b. 通道開啓和關閉:
c. 通道參數:
d. 接收消息:
e. 發送消息
f. 通知和等待:
3. 操作實例:
使用 Kvaser CANLIB 時,在文件開頭,必須包含 #include <canlib.h>
簡單操作流程
- 初始化驅動程序
- 讀 CAN 通道數目,獲取通道句柄
- 選擇開啓指定通道
- 設定通道參數
- 設定通道工作類型
- 打開總線
- 讀 CAN 消息或寫 CAN 消息
- 關閉總線
- 關閉通道
代碼實例:
void main(void)
{
canHandle h;
canInitializeLibrary();
h = canOpenChannel(0, canWANT_EXCLUSIVE);
if (h != canOK) {
char msg[64];
canGetErrorText((canStatus)h, msg, sizeof(msg));
fprintf(stderr, "canOpenChannel failed (%s)\n", msg);
exit(1);
}
canSetBusParams(h, BAUD_250K, 0);
canSetBusOutputControl(h, canDRIVER_NORMAL);
canBusOn(h);
canWrite(h, 123, "HELLO!", 6, 0);
canWriteSync(h, 500);
canBusOff(h);
canClose(h);
}