这被标记为一个主观问题,我希望我不会得到太多的选票.
LV似乎提供了一个很好的图形替代传统的基于文本的编程.据我所知,它不是一种公正的虚拟化/数据采集编程语言.尽管如此,似乎这种范式与其创作者的名字挂钩.
我的问题出现了,因为它似乎并没有被广泛用于多用途应用程序.我不是任何类型的LV专家,我更像是一个学习者.我还是习惯了LV.
我正在建立一个数据采集系统.获取的数据通常由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中执行数据采集,数据处理和GUI可视化(使用pyqt with pyqtgraph).原则上实现了每个部件,但是不同的部件没有很好地分开,这使得难以进行基准测试和改进性能.所以问题是:
有没有一种很好的方法来处理软件不同部分之间的大量数据?
我想到类似以下情况:
当我说"大量数据"时,我的意思是我得到的数据每秒大约有200万个数据点(16位),需要处理并可能也存储.
是否有任何Python框架可以用来正确处理大量数据?也许是我可以连接到的数据服务器的形式.
因为这是我的第一个问题,所以我想说 StackOverflow 帮助了我无数次。谢谢你。
现在我的问题。我目前正在尝试在 Qt 5.8 中实现一个简单的数据采集应用程序。该应用程序必须与 DSP 通信并以 100Hz 到 10kHz 的速率获取一些电压。由于我需要对获取的电压进行一些额外的计算,因此我认为在与 GUI 线程不同的线程中进行数据获取和操作是个好主意。
数据采集和附加计算在单独的线程中工作得很好。我的问题是,使用 QtCharts 异步显示工作线程结果的正确方法是什么?
任何建议将不胜感激。
此致,
克拉斯提夫
我有一个产生数据流的仪器;我的代码通过回调访问这些数据onDataAcquisitionEvent(const InstrumentOutput &data)。数据处理算法可能比数据到达的速度慢得多,所以我不能希望处理每一条数据(我没有必要),但希望处理尽可能多的数据。感谢该仪器作为环境传感器,其数据采集速率是我无法控制的。InstrumentOutput例如,可以是包含三个在不同位置同时进行的压力测量的类。
我还需要保留一些简短的数据历史记录。例如,假设我可以合理地希望每 200 毫秒左右处理一个数据样本。大多数情况下,我很乐意只处理最后一个样本,但有时我需要查看在最新样本之前到达的几秒钟的数据,这取决于最后一个样本中是否存在异常读数。
另一个要求是尽快退出onDataAcquisitionEvent()回调,以避免传感器中的数据丢失。
数据采集库(第三方)在单独的线程上采集仪器数据。
我想到了以下设计;具有单个生产者/单个消费者队列,并在 onDataAcquisitionEvent() 回调中将数据令牌推送到同步队列中。
在接收端,有一个循环从队列中弹出数据。由于数据到达率很高,循环几乎不会休眠。在每次迭代中,会发生以下情况:
问题:
编辑:我想到的一个问题是,当循环缓冲区的大小不足以容纳所需的历史记录时;目前我只是重新分配循环缓冲区,将其大小加倍。我希望我只需要这样做一两次。
我正在使用带有数据采集工具箱的 32 位 Matlab 中的 DataQ 采集设备。
有时,当我将采样率设置为 300 时,它会告诉我:
警告:此硬件无法支持请求的 SampleRate 值 300。采样率已设置为 1000"
但是,如果我将 SampleRate 设置为 1000,它有时会将其设置回 300,并显示相同的错误消息。
此外,如果我设置程序,以便在错误显示并且设备开始记录后它返回 SampleRate,这始终是我设置的任何值,而不是程序声称将其更改为的值。
任何人都知道我如何找出实际采样率或防止它重置我的采样率?我需要知道每秒有多少样本以进行进一步计算。
我将开发一个涉及数据采集服务器的系统,其中每次采集都会填充一行。我还需要能够通知用户应用程序何时获取新数据。
根据我的阅读,使用数据库作为消息队列不是一个好主意,反之亦然,但我想知道是否可以同时使用两者?
采集应用程序可以将新行添加到数据库中,然后通知消息系统中的侦听器。这是否是此类系统的最佳方法?会不会太复杂了?是否有一种设计模式已经实现了这一点?
我正在为我的公司购买新的数据采集系统,以用于各种项目.首先,它的主要目的是监控多达20个热电偶并控制复合材料烤箱的温度.但是,我还计划用它来监控加速度计,应变计,并充当信号发生器.
我可能不会是唯一一个使用它的人,但我对Atmel微控制器(C)有很多编程经验.我之前使用过LabVIEW,但是大约5年前.LabVIEW会很好,因为我和我的同事都很容易接受.另一方面,它很昂贵.现在我有一个带有2个电压的NI CompactDAQ系统和一个热电偶卡+ LabVIEW,它的售价为5779美元!
我将尝试使用不同的NI硬件获得相同的I/O功能,以获得更少的$ + LabVIEW,看看我是否能以更低的价格获得它.我想知道是否有人对我有任何除LabVIEW之外的建议.
提前致谢!
我正在使用 STM32F107VC 微控制器实现高频(> 100kHz)数据采集系统。它使用spi外设与高频ADC芯片进行通信。我必须使用实时操作系统。我怎样才能做到这一点?
我尝试过 FreeRTOS,但它的最大滴答频率为 1000Hz,所以我无法使用 FreeRTOS 每隔 1us 运行一个线程。我也试过Keil RTX5,它的tick频率可以达到1MHz,但我在某处研究过,不建议将tick频率设置高,因为它会增加整体上下文切换时间。所以我该怎么做?谢谢。
我对 simulink 很陌生,所以这个问题可能看起来很简单。我正在寻找一种每隔 X 秒采样连续信号的方法。
本质上我正在做的是模拟我正在运行的演示的数据采集单元的原理,但我似乎找不到一个模块来做到这一点,我能得到的最接近的是零阶保持。
simulink signal-processing discrete-mathematics data-acquisition