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

news2024/11/27 1:19:56

一.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. 调试与测试

 // 打开 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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多功能声学气膜馆:解决城市噪音难题的标杆建筑—轻空间

在现代城市中&#xff0c;噪音污染已成为一个普遍存在且难以解决的问题。随着城市人口的增加和交通的繁忙&#xff0c;如何为市民提供一个安静、舒适的活动空间&#xff0c;成为城市规划者和建筑设计师亟待解决的挑战。多功能声学气膜馆&#xff0c;作为一种创新的建筑形式&…

只有IP如何实现https访问

IP也是访问网站的一种方式&#xff0c;现在有很多网站并未绑定域名&#xff0c;而是通过IP直接访问的。 但是域名访问网站的方式会更多一些&#xff0c;主要还是因为域名相较于IP数字要更加好记&#xff0c;所以域名绑定网站的情况会更多。 随着现在网络安全意识的逐渐提升&a…

Android MediaRecorder 视频录制及报错解决

目录 一、start failed: -19 二、使用MediaRecorder录制视频 2.1 申请权限 2.2 布局文件 2.3 MediaRecordActivity 2.4 运行结果 三、拓展 3.1 录制视频模糊(解决) 3.2 阿里云OSS上传文件 3.2.1 权限(刚需) 3.2.2 安装SDK 3.2.3 使用 相关链接 一、start failed…

[每周一更]-(第110期):QT开发最佳实战(php/go/python/javascript)

文章目录 1. 使用 Go 开发 Qt 应用工具&#xff1a;therecipe/qt安装和配置示例代码 2. 使用 Python 开发 Qt 应用工具&#xff1a;PyQt 或 PySide安装和配置示例代码&#xff08;PyQt5&#xff09; 3. 使用 PHP 开发 Qt 应用工具&#xff1a;PHP-Qt安装和配置示例代码 4. 使用…

VLL基本原理

VLL的基本架构 VLL技术通过隧道承载CE&#xff08;Customer Edge&#xff09;端的各种二层业务&#xff0c;透明传递CE端的二层数据&#xff0c;为用户提供点对点的二层VPN服务。 VLL的基本架构可以分为AC、VC和Tunnel三个部分&#xff0c;而PW这个概念也会经常用到。如图1所…

工控接入网关:实现工业物联网的关键技术

工业控制系统随着科技的发展&#xff0c;逐渐向数字化、智能化的方向发展。工控接入网关作为工业物联网的关键技术之一&#xff0c;具有重要的作用和意义。本文将从工控接入网关的定义、功能、应用、优势等方面进行全面详细地介绍。    一、工控接入网关的定义与功能 工控接…

新零售社交电商系统前景分析

新零售社交电商系统前景分析 新零售社交电商系统作为数字经济的创新趋势之一&#xff0c;展现出强大的市场活力和发展潜力。 以下是对其前景的分析&#xff1a; 市场规模的增长&#xff1a;中国社交电商的交易规模在2021年达到了23785.7亿元&#xff0c;并预计在2023年将增长…

面了拼多多算法岗,被疯狂拷打。。。

暑期实习基本结束了&#xff0c;校招即将开启。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友解惑答疑&…

8-4 循环神经网络

对于 (8.4.2)中的函数 f f f&#xff0c;隐变量模型不是近似值。 毕竟 h t h_{t} ht​是可以仅仅存储到目前为止观察到的所有数据&#xff0c; 然而这样的操作可能会使计算和存储的代价都变得昂贵。 回想一下&#xff0c;我们在前面讨论过的具有隐藏单元的隐藏层。 值得注意的…

VS Code安装配置ssh服务结合内网穿透远程连接本地服务器详细步骤

文章目录 前言1. 安装OpenSSH2.VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

Windows系统开机出现Minimal BASH-like line editingis supported解决方法

Minimal BASH-like line editingis supported解决方法 一、问题描述 因为电脑不知道是不是安装了双系统&#xff0c;开机的时候会出现标题中的这个问题&#xff0c;网上查找资料一般说是双系统的问题&#xff0c;引导项缺失&#xff0c;然后Ubuntu进不去。可是我的电脑好像没有…

LR12 在Controller设置脚本并运行

1、当在Generator配置脚本完成后&#xff0c;点击工具-创建Controller场景&#xff0c;输入线程数即Vuser后点击确定。 2、这时会Controller中打开刚才配置的脚本&#xff0c;显示如下图所示&#xff0c; 在全局计划中点击启动Vuser,界面会显示如下弹窗&#xff0c;设置并发用户…

NTP时间服务器的工作原理解析

在当今数字化和信息化高度发展的时代&#xff0c;时间的准确性和同步性对于各种系统和应用程序至关重要。NTP时间服务器作为确保时间精准同步的关键设备&#xff0c;发挥着不可或缺的作用。 NTP 时间服务器的核心目标是为网络中的设备提供准确、一致和可靠的时间信息。它基于一…

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…

7.实时时钟(RTC)

理论 使用时钟晶振&#xff1a;32.768KHz(2{15}) 代码编写 OLED显示实时时间&#xff0c;串口打印 晶体、RTC配置 晶体配置 RTC配置 串口配置参考&#xff1a;链接 Cube IDE代码 mian.c /* USER CODE BEGIN Includes */ #include "string.h" //27行 /* USER CODE EN…

TPAMI 2024 带Token迁移的整体预训练Transformer金字塔网络——Fast-iTPN

Fast-iTPN: Integrally Pre-Trained Transformer Pyramid Network with Token Migration https://github.com/sunsmarterjie/iTPN/blob/main https://arxiv.org/pdf/2211.12735 Introduction 背景 近年来&#xff0c;视觉模型取得了两大进展&#xff0c;一是将Vision Trans…

SAP LE学习笔记03 - 在IM(在库管理)中收货到仓库的流程,关联 WM移动Type与IM移动Type

上一章讲了 LE-WM的 WM和IM之间的关系。 SAP LE学习笔记02 - WM和库存管理&#xff08;IM&#xff09;之间的关系&#xff0c;保管Lot&#xff08;Quant&#xff09;-CSDN博客 本章继续将LE-WM的知识。 目录 1&#xff0c;在IM(在库管理)中收货到仓库的流程 a&#xff09;&…

Golang | Leetcode Golang题解之第337题打家劫舍III

题目&#xff1a; 题解&#xff1a; func rob(root *TreeNode) int {val : dfs(root)return max(val[0], val[1]) }func dfs(node *TreeNode) []int {if node nil {return []int{0, 0}}l, r : dfs(node.Left), dfs(node.Right)selected : node.Val l[1] r[1]notSelected : …

EMC学习笔记5——辐射骚扰发射

辐射骚扰发射是基本的实验项目&#xff0c;目的是检验设备在工作时有没有产生意外的过强电磁辐射。 例如发电机&#xff0c;在工作时会产生意外的电磁波辐射&#xff0c;因为电子设备中隐藏了一些天线&#xff0c;这些隐藏的天线在辐射电磁波。 一、两种基本的天线结构 如前面…

智能小家电能否利用亚马逊VC搭上跨境快车?——WAYLI威利跨境助力商家

智能小家电行业在全球化背景下&#xff0c;正迎来前所未有的发展机遇。亚马逊为品牌商和制造商提供的一站式服务平台&#xff0c;为智能小家电企业提供了搭乘跨境快车、拓展国际市场的绝佳机会。 首先&#xff0c;亚马逊VC平台能够帮助智能小家电企业简化与亚马逊的合作流程&am…