案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)

简介: 案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)

需求

  1.0-7通道压力采集,采集频率1~100Khz(1,10,20,30…1000Khz);

  2.0-7通道压力,可设置补偿值,测量范围;

  3.编码器0,1脉冲采集,计算位移,速度,加速度;

  4.所有通道可设置别名,隐藏/显示状态;

  5.支持定时采集,指定距离采集(以编码器周长,分辨率与脉冲计算);

  6.支持分组,可将通道0-7分为2组,并且可以分别采集和停止;

  7.对设置设置界面和主界面的所有相关配置参数进行保存,并在下次启动时恢复最后一次启动的配置数据

  8.支持日志系统,对相关操作和数据进行日志输出

  9.支持坐标轴缩放;

  10.支持不同y坐标进行加权操作,使其显示在同一个图中;

  11.使用udp重传控制机制,保障传输大量数据时,数据传输速度快,稳定,可靠。

  12.支持需要的数据可打印;


相关博客

  《案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)

  《案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)

  《案例分享:Qt便携式致病菌快速检测仪(账号管理、实验过程、二维图表、历史数据、通讯管理、实验报告、中英文等等)

  《案例分享:Qt多通道数据采集系统(通道配置、电压转换、采样频率、通道补偿值、定时采集、导出excel和图表、自动XY轴、隐藏XY轴、实时隐藏显示通道)

  《Qt开发笔记之QCustomPlot:QCustomPlot介绍、编译与使用

  《Qt开发笔记之Qwt(一):Qwt介绍、编译与Demo


体验下载地址

  特别注意:发布用的模拟数据方式,过程中的演示Demo,模拟数据方式与数据处理相关的功能不可用。

  CSDN(免积分):https://download.csdn.net/download/qq21497936/23361384

  QQ群:1047134658(点击“文件”搜索“highFreq”,群内与博文同步更新)


Demo演示

  

  


Demo v1.20.1

  


Demo v1.7.1(提供模拟采集演示版本)

  

  

  

  

  回放,可查看之前采集的数据(回放之后,可导出当前回放的数据到excel表)


  数据导出为excel表,查看数据:

  

相关头文件源码

#ifndef HIGHFREQCOLLECTMAINWINDOW_H
#define HIGHFREQCOLLECTMAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QPushButton>
#include <QAbstractButton>
#include <QCheckBox>
#include <QFrame>
#include <QElapsedTimer>
#include <QTimer>
#define SIMULATION  (1)     // 是否模拟
namespace Ui {
class HighFreqCollectMainWindow;
}
class HighFreqCollectMainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit HighFreqCollectMainWindow(QWidget *parent = 0);
    ~HighFreqCollectMainWindow();
protected:
    void loadCfg();
    void saveCfg();
    void updateEncodeStep();
protected:
    void initControls();
    void updateControls();
    void updateControlsPlayback();                                  // 更新控件回放控件
    void initCustomPlot();
protected slots:
    void slot_initControls();
protected slots:
    void slot_lineVisibleButtonClicked(bool checked);               // 是否显示通道槽函数
    void slot_startCollect();                                       // 开始采集槽函数
    void slot_startCollect2();                                      // 开始采集槽函数
    void slot_timeOutCollectEnd();                                  // 定时器停止
    void slot_timeOutCollectEnd2();                                 // 定时器停止
    void slot_startPlayback();                                      // 开始回放
    void slot_stopPlayback();                                       // 停止回放
private slots:
    void on_pushButton_apply_clicked();
#if SIMULATION
    void on_pushButton_startSimulationAll_clicked();                // 开始采集所有
    void on_pushButton_startSimulation_clicked();                   // 开始采集组1
    void on_pushButton_startSimulation2_clicked();                  // 开始采集组2
#endif
    void on_pushButton_stopAll_clicked();                           // 停止所有
    void on_pushButton_stop_clicked();                              // 停止组1
    void on_pushButton_stop2_clicked();                             // 停止组2
    void on_pushButton_group_clicked();
    void on_pushButton_channelSet_clicked();
    void on_pushButton_paramSet_clicked();
    void on_pushButton_playback_clicked();
    void on_pushButton_export_clicked();
    void on_pushButton_exit_clicked();
private:
    Ui::HighFreqCollectMainWindow *ui;
#if SIMULATION
public: // 模拟
    void startSimulation();
    void startSimulation2();
    void stopSimulation();
    void stopSimulation2();
protected slots:
    void slot_timeOutSimulation();
#endif
protected slots:
    void slot_playback();
private:
    bool _collecting;
    bool _collecting2;
    bool _collectFinished;
    bool _collectFinished2;
private:
    QList<QString> _listChannelName;
    QList<QColor> _listChannelColor;
    QList<double> _listChannelOffset;
    QList<double> _listChannelMin;
    QList<double> _listChannelMax;
    int _c;
    int _c2;
    int _n;
    int _n2;
    int _freq;
    int _mode;
    QString _saveDir;
    QList<QLabel *> _listLabelName;
    QList<QPushButton *> _listPushButton;
    QString _cfgFile;
    QList<QCheckBox *> _listCheckedBox;
private:
    QElapsedTimer _elapsedTimer;
#if SIMULATION
private:
    double _nowX;                       // 当前X值,即当前采集时间,从0开始
    double _nowMinY;                    // 最小Y值
    double _nowMaxY;                    // 最大Y值
    QTimer *_pTimerSimulation;          // 模拟采集时使用的定时器
    int _intervalSimulation;            // 模拟采集间隔
#endif
private:
    QTimer *_pTimerCollectEnd;          // 采集固定式时间时使用
    QTimer *_pTimerCollectEnd2;         // 采集固定式时间时使用
    double _distanceEnd;                // 采集固定距离时使用
    double _distanceEnd2;               // 采集固定距离时使用
    double _encoder0Count;              // 当前采集位移0脉冲数
    double _encoder1Count;              // 当前采集位移1脉冲数
    double _encoder0Step;               // 编码器0的脉冲位移
    double _encoder1Step;               // 编码器1的脉冲位移
private:
    QList<int> _listGroup1;             // 组1组成
    QList<int> _listGroup2;             // 组2组成
private:
    bool _playback;                     // 当前是否回放
    QString _record;                    // 回放的记录名称(文件夹名称,yyyy-MM-dd hh-mm-ss)
    QTimer *_pTimerPlayback;            // 回放读取数据定时器
    bool _firstPlayback;
};
#endif // HIGHFREQCOLLECTMAINWINDOW_H



相关文章
|
11月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
10月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
本内容展示了基于Vivado2019.2的算法仿真效果,包括设置不同信噪比(SNR=8db和20db)下的结果及整体波形。同时,详细介绍了2ASK调制解调技术的原理与实现,即通过改变载波振幅传输二进制信号,并提供数学公式支持。此外,还涉及帧同步理论,用于确定数据帧起始位置。最后,给出了Verilog核心程序代码,实现了2ASK解调与帧同步功能,结合DDS模块生成载波信号,完成信号处理流程。
205 0
|
开发者
Qt异步实现事件的定时执行 - QTimer和QThread的联合使用
通过将QTimer和QThread结合使用,Qt开发者可以实现高效的异步定时任务执行。这种方法不仅可以提升应用程序的响应能力,还可以在复杂的多线程环境中保持代码的简洁和可维护性。希望本文的详细介绍和示例代码能够帮助您更好地理解和应用这一技术。
866 14
|
算法 异构计算
基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4-ASK调制解调系统的算法仿真效果、理论基础及Verilog核心程序。仿真在Vivado2019.2环境下进行,分别测试了SNR为20dB、15dB、10dB时的性能。理论部分概述了4-ASK的工作原理,包括调制、解调过程及其数学模型。Verilog代码实现了4-ASK调制器、加性高斯白噪声(AWGN)信道模拟、解调器及误码率计算模块。
454 8
|
算法 物联网 异构计算
基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4FSK调制解调系统的Verilog实现,包括高斯信道模块和误码率统计模块,支持不同SNR设置。系统在Vivado 2019.2上开发,展示了在不同SNR条件下的仿真结果。4FSK调制通过将输入数据转换为四个不同频率的信号来提高频带利用率和抗干扰能力,适用于无线通信和数据传输领域。文中还提供了核心Verilog代码,详细描述了调制、加噪声、解调及误码率计算的过程。
492 11
|
存储 算法 数据处理
基于FPGA的8PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本系统在原有的8PSK调制解调基础上,新增了高斯信道与误码率统计模块,验证了不同SNR条件下的8PSK性能。VIVADO2019.2仿真结果显示,在SNR分别为30dB、15dB和10dB时,系统表现出不同的误码率和星座图分布。8PSK作为一种高效的相位调制技术,广泛应用于无线通信中。FPGA凭借其高度灵活性和并行处理能力,成为实现此类复杂算法的理想平台。系统RTL结构展示了各模块间的连接与协同工作。
308 16
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
### 简介 本项目采用VIVADO 2019.2进行了十六进制相位移键控(16PSK)算法仿真,结果显示,在SNR=30dB时效果为Tttttttttttttt12,在SNR=20dB时效果为Tttttttttttttt34。系统RTL结构如Tttttttttttttt555555所示。16PSK是一种高效的相位调制技术,能在每个符号时间内传输4比特信息,适用于高速数据传输。其工作原理包括将比特流映射到16个相位状态之一(Tttttttttttttt777777),并通过匹配滤波和决策进行解调。具体Verilog核心程序见完整代码。
231 1
|
算法 测试技术 开发工具
基于FPGA的QPSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
该系统在原有的QPSK调制解调基础上,新增了高斯信道和误码率统计模块,验证了不同SNR条件下的QPSK误码性能。系统包括数据生成、QPSK调制与解调等模块,使用Vivado 2019.2进行仿真,展示了SNR分别为15dB、10dB、5dB和1dB时的误码情况。系统采用Verilog语言实现,具有高效、可靠的特点。
284 3
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于Vivado 2019.2实现了2ASK调制解调系统,新增高斯信道及误码率统计模块,验证了不同SNR条件下的ASK误码表现。2ASK通过改变载波振幅传输二进制信号,其调制解调过程包括系统设计、Verilog编码、仿真测试及FPGA实现,需考虑实时性与并行性,并利用FPGA资源优化非线性操作。
291 0