标签: data-acquisition

为什么人们不将LabVIEW用于数据采集和虚拟化以外的目的?

这被标记为一个主观问题,我希望我不会得到太多的选票.

LV似乎提供了一个很好的图形替代传统的基于文本的编程.据我所知,它不是一种公正的虚拟化/数据采集编程语言.尽管如此,似乎这种范式与其创作者的名字挂钩.

我的问题出现了,因为它似乎并没有被广泛用于多用途应用程序.我不是任何类型的LV专家,我更像是一个学习者.我还是习惯了LV.

virtualization labview data-acquisition

20
推荐指数
6
解决办法
6万
查看次数

什么是Linux下软实时数据采集的良好存储候选?

我正在建立一个数据采集系统.获取的数据通常由15个信号组成,每个信号以(例如)500Hz采样.也就是说,每秒大约15 x 500 x 4字节(有符号浮点数)将到达并且必须保持不变.

以前的版本是在.NET(C#)上构建的,使用DB4O db进行数据存储.这非常有效并且表现良好.

新版本将基于Linux,使用Python(或Erlang)和......是的!什么是合适的存储候选者?

我在想MongoDB,将每个样本(或实际上是一堆样本)存储为BSON对象.每个样本(块)都有一个样本计数器作为密钥(索引)字段,以及信号源标识.

问题是我必须能够很快地检索样本.根据要求,使用样本计数器范围和请求的信号源,必须在不到一秒的时间内检索多达30秒的数据.当前(C#/ DB4O)版本管理此正常,在不到100毫秒的时间内检索数据.

我知道Python可能不是理想的性能,但我们稍后会看到它.

系统("服务器")将连接多个采集客户端,因此架构必须很好地扩展.

编辑: 经过进一步研究后,我可能会使用HDF5获取样本数据,使用Couch或Mongo获取更多类似文档的信息.我会及时向大家发布.

编辑: 最终解决方案基于HDF5和CouchDB.它表现得很好,用Python实现,在Raspberry Pi上运行.

python linux storage hdf5 data-acquisition

7
推荐指数
1
解决办法
863
查看次数

如何在Python中正确分离数据采集,处理和可视化?

我正在开发一个项目,我希望在Python中执行数据采集,数据处理和GUI可视化(使用pyqt with pyqtgraph).原则上实现了每个部件,但是不同的部件没有很好地分开,这使得难以进行基准测试和改进性能.所以问题是:

有没有一种很好的方法来处理软件不同部分之间的大量数据?

我想到类似以下情况:

  • 获取:从某些设备获取数据并将其存储在可从其他位置访问的某个数据容器中.(这部分应该能够在没有处理和可视化部分的情况下运行.这部分是时间关键的,因为我不想丢失数据点!)
  • 处理:数据容器中获取数据,处理数据,并将结果存储在另一个数据容器中.(此部分应该能够在没有GUI的情况下运行并且在采集后延迟(例如我上周记录的过程数据).)
  • GUI /可视化:容器中获取已获取和已处理的数据并将其可视化.
  • 保存数据:我希望能够将数据的某些部分存储/流式传输到磁盘.

当我说"大量数据"时,我的意思是我得到的数据每秒大约有200万个数据点(16位),需要处理并可能也存储.

是否有任何Python框架可以用来正确处理大量数据?也许是我可以连接到的数据服务器的形式.

python data-acquisition

6
推荐指数
1
解决办法
924
查看次数

Matlab的数据采集工具箱?

当与LabVIEW一起使用时,我花了很多时间阅读NI产品及其功能.然而,LabVIEW和NI硬件几乎是我唯一看过的东西,我很好奇在采集和控制方面与LabVIEW竞争的是什么.

硬件支持对我来说是件大事.NI有许多不同的高质量硬件.此外,还有一些第三方制造商为LabVIEW编写驱动程序.MathWorks列出了所有已编写驱动程序以使用此工具箱的制造商.但是制造商仍然在做这个或者是否已经或者让MATLAB工具箱失去了人气?

matlab labview data-acquisition

6
推荐指数
1
解决办法
4745
查看次数

从工作线程更新 QtCharts 的正确方法?

因为这是我的第一个问题,所以我想说 StackOverflow 帮助了我无数次。谢谢你。

现在我的问题。我目前正在尝试在 Qt 5.8 中实现一个简单的数据采集应用程序。该应用程序必须与 DSP 通信并以 100Hz 到 10kHz 的速率获取一些电压。由于我需要对获取的电压进行一些额外的计算,因此我认为在与 GUI 线程不同的线程中进行数据获取和操作是个好主意。

数据采集​​和附加计算在单独的线程中工作得很好。我的问题是,使用 QtCharts 异步显示工作线程结果的正确方法是什么?

任何建议将不胜感激。

此致,

克拉斯提夫

c++ multithreading data-acquisition qtcharts qt5.8

6
推荐指数
1
解决办法
981
查看次数

处理仪器捕获数据

我有一个产生数据流的仪器;我的代码通过回调访问这些数据onDataAcquisitionEvent(const InstrumentOutput &data)。数据处理算法可能比数据到达的速度慢得多,所以我不能希望处理每一条数据(我没有必要),但希望处理尽可能多的数据。感谢该仪器作为环境传感器,其数据采集速率是我无法控制的。InstrumentOutput例如,可以是包含三个在不同位置同时进行的压力测量的类。

我还需要保留一些简短的数据历史记录。例如,假设我可以合理地希望每 200 毫秒左右处理一个数据样本。大多数情况下,我很乐意只处理最后一个样本,但有时我需要查看在最新样本之前到达的几秒钟的数据,这取决于最后一个样本中是否存在异常读数。

另一个要求是尽快退出onDataAcquisitionEvent()回调,以避免传感器中的数据丢失。

数据采集​​库(第三方)在单独的线程上采集仪器数据。

我想到了以下设计;具有单个生产者/单个消费者队列,并在 onDataAcquisitionEvent() 回调中将数据令牌推送到同步队列中。
在接收端,有一个循环从队列中弹出数据。由于数据到达率很高,循环几乎不会休眠。在每次迭代中,会发生以下情况:

  1. 从队列中弹出所有可用数据,
  2. 弹出的数据被复制到一个循环缓冲区中(我使用了 boost 循环缓冲区),这样一些历史总是可用的,
  3. 处理缓冲区中的最后一个元素(并可能查看之前的元素),
  4. 重复循环。

问题:

  1. 这个设计合理吗,有什么陷阱?和
  2. 什么是更好的设计?

编辑:我想到的一个问题是,当循环缓冲区的大小不足以容纳所需的历史记录时;目前我只是重新分配循环缓冲区,将其大小加倍。我希望我只需要这样做一两次。

c++ buffering circular-buffer data-acquisition

5
推荐指数
1
解决办法
634
查看次数

为什么 MATLAB 在尝试采集数据时会改变采样率?

我正在使用带有数据采集工具箱的 32 位 Matlab 中的 DataQ 采集设备。

有时,当我将采样率设置为 300 时,它会告诉我:

警告:此硬件无法支持请求的 SampleRate 值 300。采样率已设置为 1000"

但是,如果我将 SampleRate 设置为 1000,它有时会将其设置回 300,并显示相同的错误消息。

此外,如果我设置程序,以便在错误显示并且设备开始记录后它返回 SampleRate,这始终是我设置的任何值,而不是程序声称将其更改为的值。

任何人都知道我如何找出实际采样率或防止它重置我的采样率?我需要知道每秒有多少样本以进行进一步计算。

matlab sample data-acquisition sample-rate

5
推荐指数
1
解决办法
538
查看次数

同时使用消息队列和数据库

我将开发一个涉及数据采集服务器的系统,其中每次采集都会填充一行。我还需要能够通知用户应用程序何时获取新数据。

根据我的阅读,使用数据库作为消息队列不是一个好主意,反之亦然,但我想知道是否可以同时使用两者?

采集应用程序可以将新行添加到数据库中,然后通知消息系统中的侦听器。这是否是此类系统的最佳方法?会不会太复杂了?是否有一种设计模式已经实现了这一点?

database message-queue data-acquisition

5
推荐指数
1
解决办法
1572
查看次数

LabVIEW + National Instruments硬件还是???

我正在为我的公司购买新的数据采集系统,以用于各种项目.首先,它的主要目的是监控多达20个热电偶并控制复合材料烤箱的温度.但是,我还计划用它来监控加速度计,应变计,并充当信号发生器.

我可能不会是唯一一个使用它的人,但我对Atmel微控制器(C)有很多编程经验.我之前使用过LabVIEW,但是大约5年前.LabVIEW会很好,因为我和我的同事都很容易接受.另一方面,它很昂贵.现在我有一个带有2个电压的NI CompactDAQ系统和一个热电偶卡+ LabVIEW,它的售价为5779美元!

我将尝试使用不同的NI硬件获得相同的I/O功能,以获得更少的$ + LabVIEW,看看我是否能以更低的价格获得它.我想知道是否有人对我有任何除LabVIEW之外的建议.

提前致谢!

labview data-acquisition

4
推荐指数
2
解决办法
5258
查看次数

如何在 RTOS 的 Cortex-M3 微控制器中以高频(> 100kHz)运行周期性线程?

我正在使用 STM32F107VC 微控制器实现高频(> 100kHz)数据采集系统。它使用spi外设与高频ADC芯片进行通信。我必须使用实时操作系统。我怎样才能做到这一点?

我尝试过 FreeRTOS,但它的最大滴答频率为 1000Hz,所以我无法使用 FreeRTOS 每隔 1us 运行一个线程。我也试过Keil RTX5,它的tick频率可以达到1MHz,但我在某处研究过,不建议将tick频率设置高,因为它会增加整体上下文切换时间。所以我该怎么做?谢谢。

rtos cortex-m3 stm32 data-acquisition cmsis

3
推荐指数
1
解决办法
1105
查看次数

Simulink:将连续信号转换为离散信号

我对 simulink 很陌生,所以这个问题可能看起来很简单。我正在寻找一种每隔 X 秒采样连续信号的方法。

本质上我正在做的是模拟我正在运行的演示的数据采集单元的原理,但我似乎找不到一个模块来做到这一点,我能得到的最接近的是零阶保持。

simulink signal-processing discrete-mathematics data-acquisition

0
推荐指数
1
解决办法
2万
查看次数