一款QT上位机实现【2024年12月18日】

引言

最近,需要一款上位机软件,实现CAN通信,Bootloader烧写,下位机控制(可定制协议),串口通信,曲线显示,数据记录,以及后续要更新的软件频谱分析仪功能。

设计要点

  1. 基于QT,开源
  2. 模块化设计,方便后续功能的修改和新功能的加入
  3. 可支持大量数据的收发和曲线作图显示,不能出现卡顿
  4. 支持CAN J1939协议
  5. Bootloader功能,应能进行协议的定义和修改
  6. Bootloader支持Hex和Bin双格式,Hex采用逐行发送,根据应答信号进行连续发送;Bin支持CRC校验
  7. 数据记录格式支持txt、csv或xls

基本思路

  1. 多线程设计,收发线程独立(处理CAN卡相关操作),解析线程独立(处理数据解析部分),显示线程独立(独立显示插件进行大量数据显示),存储线程独立处理文件操作部分,主线程总体调度和管理
  2. 线程间采用信号槽机制,实现信号和数据的传递,尽量不采用自定义数据结构,尽量不传递大量数据
  3. 采用线程锁,确保数据安全
  4. 线程中,采用while(1)循环+标志位控制相关功能的使能

界面规划

  1. 设备控制界面,实现CAN卡基本设置和启动
  2. CAN基本报文信息收发功能页
  3. Bootloader功能页
  4. 下位机控制功能页
  5. 其他功能页

关键技术

1.多线程和并发

上位机需要将CAN卡货串口接收到的数据进行:①报文收发,②解析,③存储,④作图和界面刷新。为提高性能,需要采用多线程来提高实时性。
设计思路为:①主线程;②CanMsgThread负责原始报文接收,作为生产线程;③ParseThread线程,用于根据协议,实现数据的解析;④SaveMsgThread作为存储线程,对选择的数据进行存储;⑤PlotThread线程,用来读取解析后的报文后,由信号槽机制通知UI线程刷新;⑥设备控制DevCtrlThread线程,读取解析后的报文,进行保护、控制等状态的更新,由信号槽机制通知UI刷新;

2.多线程方案

QT多线程的实现方法有多种:
1. 继承QThread类,重写Run()方法。缺点:①只有重写的run函数在新线程中运行;②信号槽不好实现;有点是简单直观,易于控制。详见:https://blog.youkuaiyun.com/qq_45790916/article/details/136390241
2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HardBeans

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值