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,即可发送消息与接收消息。

目录
相关文章
|
1月前
|
Ubuntu Linux 网络安全
在Linux上安装软件有多种方法
在Linux上安装软件有多种方法
100 64
|
8天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
29 2
|
14天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
16 1
|
15天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
60 1
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
35 0
Linux C/C++之TCP / UDP通信
|
1月前
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
40 1
|
Linux C++
linux 模拟生成 CAN 设备
/************************************************************************************** * linux 模拟生成 CAN 设备 * 说明: * 最近在看CANopenSocket的过程中看到能够生成模拟的CAN设备,于是查了点资料,结果发现 * 真的可以,这样做测试就OK。
926 0
|
18天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
126 5
|
17天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
59 4
|
4天前
|
缓存 监控 Linux
下一篇
无影云桌面