代码之家  ›  专栏  ›  技术社区  ›  Azim J

如何在高速采集多通道数据时定期更新Labview图表

  •  1
  • Azim J  · 技术社区  · 16 年前

    正在寻找有关Labview数据采集程序的帮助。如果我能在每通道8kHz(提供16个数据点)下采集2ms的数据(我使用国家仪器数据采集板在4个模拟通道上采集数据)。DAQ-MX采集任务提供4个波形的1D阵列。

    如果我不显示数据,我可以做的所有计算时间约为2ms,如果处理循环稍微落后于收集循环,这是可以的。更新Labview前面板中的图表会导致无法接受的延迟。我们不需要很快地更新显示器,可能5-10Hz就足够了。但我不知道怎么设置。

    我当前的Labview VI有三个并行循环

    1. 用于分析和处理的循环
    2. 用于将数据作为TDMS文件缓存到磁盘的低优先级循环

    数据通过队列从收集循环传递到其他循环。Labview的例子给了我一些想法,但我被卡住了。

    谢谢

    跟进问题

    eaolson建议我为显示目的重新采样数据。来自DAQ-MX读取的数据是一维波形阵列。因此,我需要以某种方式构建或连接每个通道的波形数据。然后在更新前面板图表之前重新采样数据。我认为最好的方法是对数据进行排队,然后在显示循环中对堆栈构建进行排队,并根据屏幕分辨率重新采样数据,然后更新图表。还有其他办法吗。我会看着的 http://forums.ni.com/ni/board?board.id=170] 有关更多信息,请参见eaolson的建议。

    更新

    1. 将图形的可接受更新率更改为5-10Hz(感谢Underflow和eaolson)
    2. 谢谢你的回复。
    2 回复  |  直到 16 年前
        1
  •  5
  •   Joe Z    16 年前

    您的总体架构描述听起来很可靠,但是。。。对于任何非平凡的图形,达到30Hz都将是一个挑战。确保你 真的需要

    有帮助的参考资料:

    你可以 defer panel updates . 这可以防止前面板刷新,直到您准备好刷新前面板为止,从而允许您在后台缓冲数据,并且仅偶尔绘制数据。

    (a)synchronous display . 此选项允许对显示速率进行某种控制。

    有一些 general advice 提供关于加速执行的信息。

    有一个(有点过时) report

        2
  •  2
  •   eaolson    16 年前

    电视更新频率约为30赫兹。任何超过这个速度的东西都比人眼所能看到的要快。30赫兹应该是最大的更新率你应该考虑的显示器,而不是起点。考虑更新速率为5-10Hz。

    LabVIEW charts 将最新数据附加到它们存储的历史数据,并一次显示所有数据。在8 kHz的频率下,每通道每秒至少可以获取8000个数据点。这意味着支持该图形的数组必须不断调整大小以容纳新数据。此外,即使图形的宽度为1000像素,也意味着每个屏幕像素显示8个数据点。通常没有任何理由显示每个像素超过一个数据点。如果您确实需要快速更新率,请绘制较少的数据。创建一个数组以保存历史数据,并仅每N个数据点绘制一个数据点,其中选择了N,因此您只绘制了几百个点。

    避免 property nodes 如果可以的话。它们在UI线程中运行,这比大多数其他执行都慢。

    除此之外,在没有看到代码或更多细节的情况下,很难提供大量实质性的建议。同时考虑一下你的问题。 NI LabVIEW forums . 那里有很多乐于助人的人。

    推荐文章