c++ - 使用 Qt、QWT 和 C++ 绘制实时数据

标签 c++ qt qwt

我是 Qt、QWT 的新手,对 C++ 有基本的了解。

根据我得到的项目,我必须获取大篷车上的传感器提供的一些数据,例如太阳能电池板的电压和电流、温度、湿度等。所有这些数据都由一些传感器采集,并由 NI 6229 DAQ 设备收集。

到现在为止,我只是给出了侧光。现在我要解决真正的问题了。

我想采集来自DAQ设备的数据,并在程序中显示、绘图、记录和登录。

我决定使用 C++、Qt 和 QWT。当然还有用于从 DAQ 设备获取数据的 NIDAQMX API。

我已经设计了部分 GUI,但我卡住的地方是我的代码的真正工作部分。

我不知道如何在考虑性能标准的情况下实现所有这些东西,我真的需要一个指南。

我应该如何处理数据采集?

我应该如何绘制我获取的数据?

这些是否需要由不同的线程或其他结构分隔?

收集近 10 或 12 个 channel 的数据并实时绘制是否会导致合理的性能问题?如果是这样,我该如何处理?

提前致谢。

最佳答案

如果您编写一个简单的程序来使用 NI 6229,您需要设置操作的优先级:绘图或记录数据。
在大多数情况下,数据存储是最重要的操作。
在我的实践中,我使用了以下算法:

  • 1 个 GUI 线程(通用 UI + 绘图),1 个线程用于每个设备的数据采集,1 个线程用于记录数据。
  • 数据采集线程每 dT 时间运行一次(我们询问设备:- 准备好多少数据?- 10000 个样本 - 好的,给我)。由于 NI 6659 的采样频率小于 1 MSamples/s,我认为 dT 的值大约为 50-200 ms(取决于接口(interface))。
  • 从设备读取数据后,我使用队列将数据发送到线程进行记录。
  • 绘图也是如此。我将 qwt 与数据抽取一起使用(但你应该保存峰值)。 Qwt 有很好的例子。您还可以找到提高绘图性能的解决方案。我的建议是将图表拆分成组,例如,一个组可能包含 4 个图表。

它仅适用于简单程序,不适用于实时操作系统。

关于c++ - 使用 Qt、QWT 和 C++ 绘制实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735734/

相关文章:

C++文件读取问题

c++ - 使用Qt登录网站

c++ - 来自 C++ 数组的实时颜色图

c++ - 使用 QwtPlotCurve 断开第一个和最后一个点

c++ - 在 Ubuntu 14.04 上从源代码编译时如何链接到 opencv 3.0?

c++ - QT中如何使背景半透明?

c++ - QtCreator中如何远程编译

c++ - 通过 QDataStream 从客户端发送到服务器的字节不匹配

qt - 使用 QWT 构建时出错

c++ - 为什么用三元运算符来定义宏中的 1 和 0?