1

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

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

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

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

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

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

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

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

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

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

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

提前致谢。

4

1 回答 1

3

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

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

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

于 2012-10-04T22:58:07.863 回答