# Kvaser_ZCANPRO **Repository Path**: hmf1235789/kvaser_zlg_usbcan ## Basic Information - **Project Name**: Kvaser_ZCANPRO - **Description**: 将Kvaser驱动进行封装,封装为ZLG的USBCANI,可用于cantest和ZCAN Pro软件用于系统分析使用 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2025-08-20 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KvaserCAN `KvaserCAN` 是一个用于在 Windows 上用于将 Kvaser CAN 设备(如 Kvaser CAN Leaf V2等)转换为ZLG(`USBCAN-II`的中继器,用于在支持USBCAN设备的上位机软件(如:Zcanpro.exe CanTest.exe)直接支持Kvaser CAN设备,无需二次开发Kvaser CAN驱动支持。 ![示意图](./help/images/1.png) ![示意图](./help/images/2.png) ![示意图](./help/images/3.png) ## 📁 功能特性 - 模拟`USBCAN-I`设备,最多支持四个CAN通道。 - 通过`USBCAN`模式,打开和关闭 Kvaser CAN 设备。 - 通过`USBCAN`模式,初始化和配置 CAN 通道。 - 通过`USBCAN`模式,启动和重置 CAN 通信。 - 通过`USBCAN`模式,发送和接收 CAN 消息。 - 通过`USBCAN`模式,读取设备状态和错误信息。 - 通过`USBCAN`模式,清除消息缓冲区。 ## 🛠 系统要求 - Windows 操作系统 - Microsoft Visual Studio(已在 2019 版本测试) - Kvaser CAN 硬件及驱动程序 - Zlg-ControlCAN的 USBCAN-II驱动程序 ## 📦 安装步骤 1. 从 Gitee 克隆仓库: ```bash git clone https://gitee.com/hucyc/kvaser_zlg_usbcan ``` 2. 使用 Visual Studio 打开解决方案文件 `KvaserCAN.sln`。 3. 选择合适的配置 `Release `模式 (调试/发布,x86/x64)来构建项目。 4. 确保 `canlib32.dll` 已存在于系统路径或项目输出目录中。 5. 如无需构建程序,请直接参考 【使用方法】。 ## 🚀 使用方法 1. 将生成的 `KvaserCAN.dll` `canlib32.dll`、复制到`ZcanPro.exe`的安装目录下的`kerneldlls`目录中,示例 `..\ZCANPRO\kerneldlls\`。 ![示意图](./help/images/4.png) 2. 将附件 `usbcan1.xml` 复制到 `..\ZCANPRO\kerneldlls\devices_property\`中。 ![示意图](./help/images/7.png) 3. 将附件 `dll_cfg.ini` 复制到 `..\ZCANPRO\kerneldlls\`中。 ![示意图](./help/images/5.png) ### 示例代码 以下代码演示了如何使用USBCAN的驱动初始化设备并启动一个 CAN 通道: ```cpp #include "ControlCAN.h" int main() { DWORD ret; int channel = 0; // 打开设备 ret = VCI_OpenDevice(VCI_USBCAN1, 0, 0); if (ret != STATUS_OK) { printf("Open device failed: %d\n", ret); return -1; } printf("Device opened.\n"); // 初始化通道 VCI_INIT_CONFIG config = { 0 }; config.Timing0 = 0x00; config.Timing1 = 0x1C; // 250kbps config.Mode = 0; // 正常模式 ret = VCI_InitCAN(VCI_USBCAN1, 0, channel, &config); if (ret != STATUS_OK) { printf("Init CAN failed: %d\n", ret); VCI_CloseDevice(VCI_USBCAN1, 0); return -1; } printf("CAN initialized.\n"); // 启动通道 ret = VCI_StartCAN(VCI_USBCAN1, 0, channel); if (ret != STATUS_OK) { printf("Start CAN failed: %d\n", ret); VCI_CloseDevice(VCI_USBCAN1, 0); return -1; } printf("CAN started.\n"); // 发送一帧 VCI_CAN_OBJ tx = { 0 }; tx.ID = 0x123; tx.DataLen = 8; for (int i = 0; i < 8; ++i) tx.Data[i] = i; ULONG sent = VCI_Transmit(VCI_USBCAN1, 0, channel, &tx, 1); printf("Sent %lu frames.\n", sent); // 接收循环 VCI_CAN_OBJ rx[32]; while (true) { ULONG count = VCI_GetReceiveNum(VCI_USBCAN1, 0, channel); if (count > 0) { ULONG received = VCI_Receive(VCI_USBCAN1, 0, channel, rx, 32, 100); for (ULONG i = 0; i < received; ++i) { printf("RX: ID=0x%03X DLC=%d Data=", rx[i].ID, rx[i].DataLen); for (int j = 0; j < rx[i].DataLen; ++j) { printf("%02X ", rx[i].Data[j]); } printf("TS=%u\n", rx[i].TimeStamp); } } else { Sleep(100); // 避免 CPU 100% } } // 关闭设备 VCI_CloseDevice(VCI_USBCAN1, 0); printf("Device closed.\n"); return 0; } ``` ## 📚 API 参考 以下是本库导出的部分关键函数: - `VCI_InitializeComponent` - 初始化组件及内部资源。 - `VCI_OpenDevice` - 打开与 Kvaser CAN 设备的连接。 - `VCI_CloseDevice` - 关闭与设备的连接。 - `VCI_InitCAN` - 初始化并配置 CAN 通道。 - `VCI_ReadBoardInfo` - 从设备读取板卡信息。 - `VCI_ReadErrInfo` - 获取错误信息。 - `VCI_ReadCANStatus` - 读取 CAN 控制器的当前状态。 - `VCI_Transmit` - 发送一个或多个 CAN 消息。 - `VCI_Receive` - 接收一个或多个 CAN 消息。 更多信息请参考 `KvaserCAN.cpp` 中的函数定义。 ## 📄 许可证 本项目遵循仓库中包含的许可证条款。请查看 `LICENSE` 文件以了解完整详情。 ## 🤝 贡献指南 欢迎贡献!如果您有兴趣改进本库或添加对新功能的支持,请 fork 仓库并提交拉取请求。 ## 📬 联系方式 如需支持集成其他设备或有任何疑问,请通过 Gitee 仓库联系项目维护者: 296441439@qq.com。