USB-CAN總線接口
適配器接口函數
圖書館使用說明
第一部分結束VIEW
如果用戶只是使用USB-CAN總線接口適配器進行CAN總線通信測試,則可以直接使用隨機提供的USB-CAN Tool軟件進行測試數據的收發。
如果用戶打算為自己的產品編寫軟件程序。 請仔細閱讀以下說明並參考amp我們提供的代碼:
⑴ C++Builder ⑵C# ⑶VC ⑷VB ⑷VB.NET ⑩Delphi ⑺LabVIEW ⑻ LabWindows/CVI ⑼Matlab ⑽QT ⑾Python/Python-可以。
開發庫 file :ControlCAN.lib、ControlCAN.DLL
VC版函數聲明 file :控制CAN.h
VB版函數聲明 file: 控制CAN.bas
實驗室VIEW 版本庫函數包模塊:ControlCAN.llb
Delphi版本函數聲明 file: 控制CAN.pas
第二部分兼容函數庫和數據結構
2.1. 類型定義
2.1.1.設備類型
類型定義 | 類型值 | 描述 |
DEV_USBCAN2 | 4 | USBCAN-2A/USBCAN-2C/CANalyst-II MiniPCIe-CAN |
2.1.2. VCI_BOARD_INFO
VCI_BOARD_INFO 結構包含 USB-CAN 系列接口卡設備信息。
該結構將填充在 VCI_ReadBoardInfo 函數中。
成員:
硬件版本
硬件版本號,十六進製表示法。 例如 0x0100 表示 V1.00。
fw_版本
硬件版本號,十六進製表示法。 例如 0x0100 表示 V1.00。
第2頁
dr_版本
驅動版本號,十六進制。 例如 0x0100 表示 V1.00。
in_版本
接口庫版本號,十六進製表示。 例如 0x0100 表示 V1.00。
中斷號
系統預留。
可以數
表示 CAN 通道總數。
str_Serial_Num
此闆卡的序列號。
str_hw_類型
硬件類型,例如“USBCAN V1.00”(注意:包括字符串終止符'\0')。
預訂的
系統預留。
2.1.3. VCI_CAN_OBJ
在函數VCI_Transmit 和VCI_Receive 中,VCI_CAN_OBJ 結構用於發送CAN 消息幀。
成員:
ID
消息標識符。 直接ID格式,右對齊,請參考:附件一:ID對齊詳解。
時間聖amp
接收聖amp 時間幀信息,CAN控制器初始化時開始計時,單位為0. 1ms。
時間標誌
在是否使用時間st方面amp, 1 是有效的 TimeStamp. TimeFlag 和 TimeStamp 只有在接收到幀時才有意義。
發送類型
發送類型。 = 0 表示 Normal 類型, = 1 表示 Single Send。
遠程標誌
是否為遠程標誌。 = 1 表示遠程標誌, = 0 表示數據標誌。
外部標誌
是否為外部標誌。 = 1 表示外部標誌, = 0 表示標準標誌。
數據線
Data length(<=8) ,即數據的長度。
數據
數據包。
預訂的
系統預留。
2.1.4. VCI_INIT_CONFIG
VCI_INIT_CONFIG 結構定義了 CAN 的初始化配置。 該結構將填充在 VCI_InitCan 函數中。
成員:
密碼
接收過濾後的接受代碼。
掩碼
接收過濾掩碼。
預訂的
預訂的。
篩選
過濾方式,允許設置範圍0-3,詳見過濾方式表2.2.3節。
時序0
SJA1000 波特率參數,Timing0 (BTR0)。
時序1
SJA1000 波特率參數,Timing1 (BTR1)。
模式
操作模式,0 = 正常操作,1 = 只聽模式,2 = 自發接納和發送測試模式。
評論:
關於過濾器的設置請參考:附件二:CAN參數設置說明。
CAN Timing0和Timing1用於設置波特率,這兩個參數只在初始化時使用tage.
常規波特參考表:
CAN波特率 | 時序0(BTR0) | 時序1(BTR1) |
10k 比特/秒 | 0x31 | 0x1C |
20k 比特/秒 | 0x18 | 0x1C |
40k 比特/秒 | 0x87 | 0xFF |
50k 比特/秒 | 0x09 | 0x1C |
80k 比特/秒 | 0x83 | 0xFF |
100k 比特/秒 | 0x04 | 0x1C |
125k 比特/秒 | 0x03 | 0x1C |
200k 比特/秒 | 0x81 | 0xFA |
250k 比特/秒 | 0x01 | 0x1C |
400k 比特/秒 | 0x80 | 0xFA |
500k 比特/秒 | 0x00 | 0x1C |
666k 比特/秒 | 0x80 | 0xB6 |
800k 比特/秒 | 0x00 | 0x16 |
1000k 比特/秒 | 0x00 | 0x14 |
33.33Kbps | 0x09 | 0x6F |
66.66Kbps | 0x04 | 0x6F |
83.33Kbps | 0x03 | 0x6F |
- 用戶只需按照SJA1000(16MHz)設置波特率參數即可。
- 適配器暫時不支持低於 10K 的波特率。
2.2. 功能說明
2.2.1. VCI_開放設備
該函數用於連接設備。
DWORD __stdcall VCI_OpenDevice(DWORD DevType、DWORD DevIndex、DWORD 保留);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
預訂的
保留參數,填0。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
2.2.2. VCI_關閉設備
該函數用於關閉連接。
DWORD __stdcall VCI_CloseDevice(DWORD DevType,DWORD DevIndex);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
2.2.3. VCI_InitCan
該函數用於初始化指定的CAN。
DWORD __stdcall VCI_InitCAN(DWORD DevType, DWORD DevIndex, DWORD CANIndex,
PVCI_INIT_CONFIG pInitConfig);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
CAN索引
CAN通道索引,比如當只有一個CAN通道時,索引號為0,如果有兩個,則索引號可以為0或1。
p初始化配置
初始化參數結構。 成員參數列表:
成員 | 功能說明 |
pInitConfig->AccCode | AccCode 和 AccMask 可以一起工作來確定哪些數據包可以被接受。 這兩個寄存器用於設置ID左對齊,即AccCode和AccMask的最高位(Bit31)與ID值的最高位對齊。 |
pInitConfig->AccMask | 關於ID對齊參考附件: 附件一: ID對齊細節。 例:如果設置AccCode的值為0x24600000(即0x123左移21位),AccMask的值 設置為0x00000000,則只接受CAN報文幀ID為0x123的數據包(AccMask值為0x00000000表示所有位相關 |
位)。 如果AccCode值設置為0x24600000,AccMask值設置為0x600000(0x03左移21位),則只接受CAN報文幀ID為0x120~0x123的數據包(AccMask值 0x600000 表示除了 bit0 ~ bit1 其他位(bit2 ~ bit10)都是相關位)。 筆記: 此過濾器設置 examp標準框架的文件,例如ample,高11位為有效位; 在擴展幀的情況下,則有效 ID 為 29 位。 AccCode 和 AccMask 設置高 29 位為有效位! |
|
pInitConfig->保留 | 預訂的 |
pInitConfig->過濾器 | 過濾模式設置請參考過濾模式表部分。 |
pInitConfig->Timing0 | 波特率T0設置 |
pInitConfig->Timing1 | 波特率T1設置 |
pInitConfig->模式 | 操作模式: 0-正常運行 1-只聽模式 2-自發收送測試模式(ZLG函數庫中不包含該值) |
過濾模式表:
價值 | 姓名 | 描述 |
1 | 接收所有類型 | 適用於標準框架和加長框架! |
2 | 只接收標準幀 | 適用於標準框架,並擴展 |
frame會直接過濾掉! | ||
3 | 只接收擴展幀 | 適用於擴展框架,標準框架將被刪除 直接過濾! 。 |
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
例如
2.2.4. VCI_ReadBoardInfo
該函數用於讀取適配器硬件信息。 一般來說,可以忽略。
DWORD __stdcall VCI_ReadBoardInfo(DWORD DevType,DWORD
DevIndex,PVCI_BOARD_INFO pInfo);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。 pInfo
VCI_BOARD_INFO 是用來存放設備信息的結構體指針。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
2.2.5。 VCI_GetReceiveNum
該函數用於指定接收到但還沒有被讀取的幀在指定的接收緩衝區中。
DWORD __stdcall VCI_GetReceiveNum(DWORD DevType、DWORD DevIndex、DWORD CANIndex);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始升序排列。
CAN索引
CAN 通道索引。
返回:
返回尚未讀取的幀。
例如
#include “ControlCan.h” int ret=VCI_GetReceiveNum(2,0,0);
2.2.6. VCI_清除緩衝區
該函數用於清除指定通道的接收和發送緩衝區
USB-CAN 適配器。
DWORD __stdcall VCI_ClearBuffer(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始升序排列。
CAN索引
CAN 通道索引。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
2.2.7. VCI_StartCAN
該函數用於啟動CAN控制器和適配器內部中斷接收功能。
DWORD __stdcall VCI_StartCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
CAN索引
CAN 通道索引。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
2.2.8. VCI_復位CAN
該函數用於復位 CAN 控制器。
DWORD __stdcall VCI_ResetCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
CAN索引
CAN 通道索引。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
2.2.9. VCI_傳輸
該函數用於發送 CAN 報文幀。
DWORD __stdcall VCI_Transmit(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pSend,DWORD 長度);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
CAN索引
CAN 通道索引。 發送
必鬚髮送的數據幀數組的首地址。
長度
需要發送的數據幀數,最大1000,高速下推薦48。
返回:
返回實際已經發送的幀數,返回值=-1表示設備錯誤。
例如
2.2.10。 VCI_接收
該函數用於請求接收。
DWORD __stdcall VCI_Receive(DWORD DevType,DWORD DevIndex,DWORD CANIndex,PVCI_CAN_OBJ pReceive,ULONG Len,INT WaitTime);
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
CAN索引
CAN 通道索引。
接收
接收數據幀的第一個設置指針。
倫
數據幀的數組長度必須大於2500才能返回正常消息。
否則,無論是否收到消息,返回長度都將為零。 適配器為每個通道設置一個 2000 幀的緩衝區。 用戶可以根據自己的系統和工作環境,從2500中選擇合適的數組長度。
等待時間保留。
返回:
返回實際讀取的幀數,-1表示設備錯誤。
例如
第三部分其他函數及數據結構說明
本章介紹USB-CAN適配器接口庫ControlCAN.dll中包含的不兼容ZLG接口庫的其他數據類型和函數。 請做
如果使用兼容的ZLG模型進行二次開發,不要調用這些函數,以免影響兼容性。
3.1 功能說明
3.1.1. VCI_UsbDeviceReset
重置USB-CAN適配器,重置後需要使用VCI_OpenDevice重新打開設備。
DWORD __stdcall VCI_UsbDeviceReset(DWORD DevType,DWORD DevIndex,DWORD 保留
參數:
開發類型
設備類型。 請參閱:適配器設備類型定義。
開髮指數
設備索引,例如ample,當只有一個USB-CAN適配器時,索引號為0,當有多個USB-CAN適配器時,索引號從0開始按升序排列。
保留 保留。
返回:
返回值=1,表示操作成功; = 0表示操作失敗; = -1 表示設備不存在。
bRel = VCI_UsbDeviceReset(nDeviceType, 獨立性, 0);
3.1.2. VCI_查找UsbDevice2
當同一台 PC 使用多個 USB-CAN 時,用戶可以使用此功能查找當前設備。
DWORD __stdcall VCI_FindUsbDevice2(PVCI_BOARD_INFO pInfo);
參數:
信息
pInfo用於存放參數的第一個數據緩衝區地址指針。
退貨
返回插入計算機的 USB-CAN 適配器的編號。
第四部分接口庫函數使用流程
為了增加設備功能,我們提供了額外的功能(以綠色背景呈現的功能),這些功能包括:VCI_FindUsbDevice2 VCI_UsbDeviceReset。 二次開發時,這些函數不一定要調用。 即使忽略這些功能,也可以實現USB-CAN適配器的所有功能。
www.waveshare.com
www.waveshare.com/wiki
文件/資源
![]() |
WAVESHARE USB-CAN總線接口適配器接口函數庫 [pdf] 使用說明書 USB-CAN Bus Inter face Adapter接口函數庫,USB-CAN,Bus Inter face Adapter接口函數庫,接口函數庫,函數庫 |