USBCAN-II/II+使用方法以及qt操作介绍

一.USBCAN-II/II+介绍

USBCAN-II/II+ 是一款常用的 USB-CAN 转换器,广泛应用于汽车电子、工业自动化等领域。以下是使用该设备的一般步骤和方法:

1. 硬件连接

连接设备:将 USBCAN-II/II+ 的 USB 接口连接到计算机的 USB 端口。

连接 CAN 网络:将 CAN 端口连接到 CAN 总线,确保接线正确,避免极性接反。

2. 安装驱动程序

下载驱动:访问设备制造商的网站,下载适用于操作系统的驱动程序。

安装驱动:按照安装向导的指示完成驱动程序的安装。

下载地址:https://www.zlg.cn/can/down/down/id/255.html

3. 配置软件

选择软件:可以使用设备附带的软件,或者使用其他支持 CAN 协议的工具(如 CanTest、CANalyzer、PCAN-View 等)。

设置参数:在软件中配置 CAN 通信参数,如波特率、数据格式等。

  • 这里以CanTest举例

4. 进行数据通信

发送数据:使用软件界面发送 CAN 消息,通常需要输入消息 ID 和数据内容。

接收数据:监控接收到的 CAN 消息,软件界面通常会显示接收到的所有数据。

5. 故障排查

检查连接:确保所有连接正确,CAN 总线的终端电阻是否安装。

查看日志:软件通常提供日志功能,可以帮助分析通信问题。

6. 断开连接

安全断开:在完成测试后,确保安全断开 USB 和 CAN 连接,避免数据丢失或设备损坏。

注意事项

电源要求:确保 CAN 网络供电正常。

波特率一致性:确保所有连接的设备波特率一致。

软件兼容性:选择与 USBCAN-II/II+ 兼容的软件工具。

二.Qt操作USBCAN-II/II+

在使用 Qt 操作 USBCAN-II/II+ 设备时,通常需要通过相关的库进行 CAN 通信。以下是一个简单的示例,展示如何在 Qt 中使用 USBCAN-II/II+ 进行基本的 CAN 消息发送和接收。

1. 环境准备

确保你已经安装了 Qt 和相应的 USBCAN-II/II+ 驱动程序。你可能还需要下载相关的 SDK 或库文件。(在上面的网址进行下载)

  • 我这里以配置zlgcan_x64为例。
  1. 将 .h和 lib文件都放到pro工程目录下

  2. 将kerneldlls文件夹和dll 文件放在debug下的exe目录下

  3. 在下面中将.h文件都添加到现有的项目中

  4. 添加外部库(添加lib路径)

将为debug版本添加'd' 作为后缀取消

2. 调试与测试

cpp 复制代码
 // 打开 CAN 设备
        DEVICE_HANDLE dhandle = ZCAN_OpenDevice(DEVICE_TYPE, 0, 0);
        if (INVALID_DEVICE_HANDLE == dhandle)
        {
            std::cout << "打开设备失败" << std::endl;
            return;
        }else
        {
            std::cout << "打开设备成功" << std::endl;
        }

        // 设置波特率
        if (ZCAN_SetValue(dhandle, "0/baud_rate", "500") != STATUS_OK) {
            std::cout << "设置波特率失败" << std::endl;
            ZCAN_CloseDevice(dhandle);
            return;
        }else
        {
            std::cout << "设置波特率成功" << std::endl;
        }

        // 初始化 CAN 通道
        ZCAN_CHANNEL_INIT_CONFIG cfg;
        memset(&cfg, 0, sizeof(cfg));
        cfg.can_type = TYPE_CANFD;
        cfg.can.filter = 0;
        cfg.can.mode = 0; // 正常模式
        cfg.can.acc_code = 0;
        cfg.can.acc_mask = 0xffffffff;

        CHANNEL_HANDLE chHandle = ZCAN_InitCAN(dhandle, CHANNEL_INDEX, &cfg);
        if (INVALID_CHANNEL_HANDLE == chHandle) {
            std::cout << "初始化通道失败" << std::endl;
            ZCAN_CloseDevice(dhandle);
            return;
        }else
        {
            std::cout << "初始化通道成功" << std::endl;
        }

        // 启动 CAN 通道
        if (ZCAN_StartCAN(chHandle) != STATUS_OK) {
            std::cout << "启动通道失败" << std::endl;
            ZCAN_CloseDevice(dhandle);
            return;
        }else
        {
            std::cout << "启动通道成功" << std::endl;
        }

        // 准备要发送的 CAN 帧
        ZCAN_Transmit_Data frame;
        memset(&frame, 0, sizeof(frame));
        frame.frame.can_id = 0x00000000; // 设置帧 ID
        frame.frame.can_dlc = 8; // 设置数据长度
        BYTE data[] = {1, 2, 3, 4, 5, 6, 7, 8}; // 数据
        memcpy(frame.frame.data, data, sizeof(data));

        // 发送数据
        UINT ret = ZCAN_Transmit(chHandle, &frame, 1);
        if (ret != 1)
        {
            std::cout << "发送数据失败" << std::endl;
        } else
        {
            std::cout << "发送数据成功, 数据: ";
            for (int i = 0; i < frame.frame.can_dlc; ++i)
            {
                std::cout << (int)frame.frame.data[i] << " ";
            }
            std::cout << std::endl;
        }

        // 等待接收数据
        std::this_thread::sleep_for(std::chrono::seconds(1)); // 等待一秒以便接收数据

        // 接收数据
        ZCAN_Receive_Data recvFrame;
        if (ZCAN_Receive(chHandle, &recvFrame, 1) > 0)
        {
            std::cout << "接收到数据, ID: " << std::hex << recvFrame.frame.can_id << ", 数据: ";
            for (int i = 0; i < recvFrame.frame.can_dlc; ++i)
            {
                std::cout << (int)recvFrame.frame.data[i] << " ";
            }
            std::cout << std::dec << std::endl; // 恢复到十进制输出
        } else
        {
            std::cout << "未接收到数据" << std::endl;
        }

        // 关闭通道和设备
        ZCAN_CloseDevice(dhandle);
相关推荐
用户805533698036 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner6 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz11 天前
QML Hello World 入门示例
qt
xcyxiner14 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner14 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner15 天前
DicomViewer (添加模型类)3
qt
xcyxiner16 天前
DicomViewer (目录调整) 2
qt
xcyxiner16 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00617 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术17 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript