【问题标题】:Real Time Data Plotting With Qt, QWT and C++使用 Qt、QWT 和 C++ 进行实时数据绘图
【发布时间】:2012-10-04 20:52:58
【问题描述】:

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

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

直到现在,我只是给了侧灯。现在我要解决真正的问题了。

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

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

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

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 这取决于 NIDAQMX API 的工作方式。它会触发事件吗?多常?涉及多少数据?

标签: c++ qt qwt


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多