linux系统中使用QT实现CAN通信的方法

简介: linux系统中使用QT实现CAN通信的方法

      大家好,今天主要和大家分享一下,如何使用QT中的CAN Bus的具体实现方法。



 

第一:CAN Bus的基本简介

     从QT5.8开始,提供了CAN Bus很庆幸,我们可以直接使用QT提供的CAN相关类的编程即可。从资源上来看,开发板上预留了一个CAN接口。

     

第二:CAN通信应用实例

      可以直接使用开发板,需要使用CAN必须进行初始化,它的开启与关闭都是由系统完成。最大比特率为 1000kBit/s

利用命令开启CAN。

ip link set up can0 type can bitrate 1000000 restart-ms 100

    需要在pro项目文件添加相应的模块支持,需要添加对应的头文件。

QT += core gui serialbus

   在头文件“mainwindow.h”的代码如下。一些声明。

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QCanBusDevice>
6 #include <QCanBus>
7 #include <QPushButton>
8 #include <QTextBrowser>
9 #include <QLineEdit>
10 #include <QVBoxLayout>
11 #include <QLabel>
12 #include <QComboBox>
13 #include <QGridLayout>
14 #include <QMessageBox>
15 #include <QDebug>
17 class MainWindow : public QMainWindow
18 {
19 Q_OBJECT
20
21 public:
22 MainWindow(QWidget *parent = nullptr);
23 ~MainWindow();
24
25 private:
26 /* CAN 设备 */
27 QCanBusDevice *canDevice;
28
29 /* 用作接收数据 */
30 QTextBrowser *textBrowser;
31
32 /* 用作发送数据 */
33 QLineEdit *lineEdit;
34
35 /* 按钮 */
36 QPushButton *pushButton[2];
37
38 /* 下拉选择盒子 */
39 QComboBox *comboBox[3];
40
41 /* 标签 */
42 QLabel *label[4];
43
44 /* 垂直布局 */
45 QVBoxLayout *vboxLayout;
46
47 /* 网络布局 */
48 QGridLayout *gridLayout;
49
50 /* 主布局 */
51 QWidget *mainWidget;
52
53 /* 设置功能区域 */
54 QWidget *funcWidget;
55
56 /* 布局初始化 */
57 void layoutInit();
58
59 /* 插件类型项初始化 */
60 void pluginItemInit();
61
62 /* 比特率项初始化 */
63 void bitrateItemInit();
64
65 private slots:
66 /* 发送消息 */
67 void sendFrame();
68
69 /* 接收消息 */
70 void receivedFrames();
71
72 /* 插件发生改变 */
73 void pluginChanged(int);
74
75 /* 处理 can 错误 */
76 void canDeviceErrors(QCanBusDevice::CanBusError) const;
77
78 /* 连接或者断开 can */
79 void connectDevice();
80 };
81 #endif // MAINWINDOW_H
82

     在mainwindow.cpp的具体实现方法

1 #include "mainwindow.h"
2 #include <QGuiApplication>
3 #include <QScreen>
4 
5 MainWindow::MainWindow(QWidget *parent)
6 : QMainWindow(parent)
7 {
8 /* 使用系统指令比特率初始化 CAN,默认为 1000000bits/s */
9 system("ifconfig can0 down");
10 system("ip link set up can0 type can bitrate 1000000 restart-ms 100");
11
12 /* 布局初始化 */
13 layoutInit();
14
15 /* 可用插件初始化 */
16 pluginItemInit();
17
18 /* 可用接口项初始化 */
19 pluginChanged(comboBox[0]->currentIndex());
20
21 /* 比特率项初始化 */
22 bitrateItemInit();
23 }

     分析:连接/断开 CAN,很遗憾 Qt QCanBusDevice::BitRateKey 不能设置比特率,因为系统的 CAN 需要使用 ip 指令以一个比特率才能进行初始化,Qt 需要系统 CAN 起来才能进行操作。所以需要使用系统指令设置 CAN

第三:程序的运行效果

    在 Ubuntu 上运行 界面效果如下,因为 Ubutnu 没有 CAN 设备,所以在可用接口处是不可选的。请把程序交叉编译到开发板上运行。与 CAN 仪器以相同的比特率通信,插件类型默认是(必须是)socketcan,可用接口为 can0,即可发送消息与接收消息。

目录
相关文章
|
9月前
|
监控 编译器 Windows
Qt5实现Windows平台串口通信
Qt5实现Windows平台串口通信
|
11月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
11月前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
1668 21
|
11月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
2589 10
|
11月前
|
Ubuntu Linux 图形学
推广与体验Ubuntu Linux的便捷方法
如果你的朋友或家人对尝试Linux感兴趣,但希望在安装之前先体验一下,你可以分享以下链接给他们:Ubuntu在线导览。通过这个链接,他们可以在任何地方轻松体验Ubuntu,无需安装即可深入了解这个流行的操作系统。
|
网络协议 Ubuntu Linux
Wireguard in Linux的安装方法
本文介绍了如何在Ubuntu和Rocky Linux中安装配置WireGuard,并探讨了配置过程中可能出现的DNS泄露问题及解决方法,包括通过nmtui设置DNS及调整DNS优先级参数。
|
Linux C++
linux 模拟生成 CAN 设备
/************************************************************************************** * linux 模拟生成 CAN 设备 * 说明: * 最近在看CANopenSocket的过程中看到能够生成模拟的CAN设备,于是查了点资料,结果发现 * 真的可以,这样做测试就OK。
1094 0
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1031 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
672 137
|
10月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1633 58