应用:探测电路,排除故障,打开/关闭灯泡
最基本的模拟数据采集类型是单点的、有限的、软件定时的模拟输入。这意味着一个单一的模拟值被从ADC中检索出来并被带入操作系统的存储器中。这种形式的数据采集不使用硬件定时引擎;操作系统进行驱动调用以检索数据点。
采集完一个点后,显示数值,程序就结束了。这不是数据采集的一个非常常见的用例。然而,它被用于非常基本的任务,如探测电路以确保电压水平是正确的,以及排除DAQ设备的故障以确保其工作正常。
应用:记录温度,监测湿度
单点、连续、软件定时采集对于不需要确定(周期精确)采样周期的应用来说是一种完美的方法。大多数缓慢的数据记录应用将使用这种方法,因为每10纳秒采样一次并不关键,一秒钟采样一次就足以调查一个房间的温度。
主要的注意事项是,计时引擎是基于CPU的毫秒计时器,它受到操作系统上运行的所有其他进程和应用程序的影响。这意味着,如果启动了一个反病毒程序,它可能会使采集周期延迟几毫秒。这被称为软件时间偏移。对于需要确定性采样的控制应用的单点采集,可以考虑使用我们的NI-RIO平台的实时操作系统。
应用:冲击测试,加速度监测
多点、有限、硬件定时采集在需要一组非常快速的数据的应用中很常见,仅此而已(例如,一旦加速度计超过10米/秒,2就以1000个样本/秒的速度采集1000个样本)。这允许只采集所需的数据,并消除了记录大量不必要的数据的需要。这种采集方法几乎总是与触发器相配,但这不是必须的。
硬件计时引擎是非常精确的周期,它将自动获取并将样本存储在设备的板载存储器中。一旦获得所需数量的样本,它们将通过数据传输进入PC内存,以进行处理和显示。
应用:振动监测,电机性能
多点、连续、硬件定时采集也是一种非常流行的数据采集方法。这种类型的测试通常要运行几分钟到几天,限制因素通常是用于存储数据的可用内存的数量。常见的应用涉及的情况是,必须有周期精确的样本,以便进行数学转换,找到数据的变化率。这项技术也使用DAQ设备的硬件计时引擎。
软件定时或硬件定时用于控制信号生成的时间。硬件定时,例如,设备上的时钟(数字信号),控制信号生成的速率。软件定时就是由操作系统和软件来控制采样生成,而不是由测量设备来控制。硬件时钟运行远比软件快。硬件时钟比软件更为精确。
在NI-DAQmx中,选择采样时钟定时函数/VI来确定硬件定时,或设置采样时钟的采样定时类型属性。如不进行上述设置,将采样定时类型属性设置为按需采集,表示已选择软件定时。
在硬件定时单点采样模式下,采样通过硬件定时方式连续生成和采集,不带缓冲机制。必须使用采样时钟或改动检测定时类型。其他定时类型不支持。
如要获知循环是否在规定时间内(例如,控制应用)完成,请使用硬件定时单点采样模式。
因为使用硬件定时单点采样模式时没有缓冲区,所以要确保读取和写入的速度能满足硬件定时的速度。如读取或写入操作延迟,将会返回错误。
连续脉冲(硬件定时更新)是硬件定时单点的计数器输出。
对于 NI-DAQmx 的硬件定时单点模式,默认的 AI 转换时钟速率与缓冲操作的时钟速率不同。通过缓冲操作,转换时钟在整个采样周期内均匀分布,以允许扫描中通道之间的最大可能稳定时间。这种行为最大限度地减少了每个多路复用通道之间的重影。然而,它也会给单点 PID RT 应用带来潜在问题,因为它在最后一个被采样的多路复用通道与开始下一次 PID 处理扫描之间的时间太短。
因此,NI-DAQmx 中用于硬件定时单点操作的 AI 转换时钟的默认行为是在采样时钟周期的一半内均匀地间隔复用通道。这有效地使 AI 转换时钟速率加倍。
在HWTSP模式下,可以采用无缓冲硬件定时来连续采集或生成信号。由于必须逐点连续采集/更新和处理采样,因此需要使用高速确定性总线。
PCI/PXI/PCIe/PXIe系列的以下设备支持AI/AO硬件定时单点采样模式:
以下设备不支持任何任务类型的硬件定时单点采样模式:
优点
缺点
/O采样可能受软件的误差影响。
Operating System | Typical Timing Resolution (ms) |
---|---|
Windows 3.x | 55 |
Windows 9x/Me/NT/2000/XP/Vista/7/8/10 | 1 |
Macintosh 68k | 17 |
PowerMac | 1 |
SUN Solaris | 10 |
Linux | 10 |
Mac OS X (PowerPC) | 10 |
例如,任何软件定时操作在 Windows 7 操作系统上的精度均为 +/- 1 毫秒。
如果您使用LabVIEW/LabWindows定时器函数来控制循环,那么您可以预期循环每次迭代之间的时间间隔会有所不同,具体取决于当时计算机上正在运行的其他进程。例如,如果同时打开多个窗口,并且在数据采集期间在不同窗口之间切换,那么中央处理单元 (CPU) 上可能会产生大量开销,这可能会减慢循环速度执行数据采集。
在这种类型的定时应用中,最好使用硬件定时而不是软件定时,以提高准确性和可靠性。例如,如果您想每 1 ms 扫描一个通道,您可以将硬件配置为以 1000 个样本/秒的速率扫描,而不是使用软件定时,这相当于每次扫描之间有 1 ms 的间隔。这种方法无需依赖操作系统的可变时序即可实现相同的结果。
在许多操作系统上要求比 1 ms 系统定时器更高精度的应用中,硬件计时也变得很有必要。
将PC缓冲区想象成充满水的木桶
使用NI-DAQmx时,NI-DAQmx定时VI 会为您自动进行内存分配:
DAQmx定时.vi
中的采样模式设置为有限采样),NI-DAQmx分配的缓冲区大小等于每通道采样数的值。DAQmx定时.vi
中的采样模式设置为连续采样),NI-DAQmx分配的缓冲区大小如下表所示:采样率 | 缓冲区大小 |
---|---|
0-100 S / s | 1 kS |
100-10,000 S / s | 10 kS |
10,000-1,000,000 S / s | 100 kS |
> 1,000,000 S / s | 1 MS |
通常,数据在DAQmx PC缓冲区中被覆盖,原因有两个:
连续采样的DAQmx应用程序的读取速率低于采样率,导致样本在DAQmx PC缓冲区中累积,直到发生覆盖。
解决方案:
第一步应该是确保应用程序的读取速率和采样率相同。
由于DAQmx应用程序的读取速率取决于每个DAQmx读取请求的样本数量,以及一秒钟内调用DAQmx读取函数的次数,因此可以通过控制读取速率来调整读取速率。 DAQmx Read所需的样本数,或者使用Wait(ms)等节点控制包含DAQmx Read的while循环在一秒内执行的次数:
注意: DAQmx Read将自动等待直到所请求的样本数量可用,因此通常只需要在特定应用程序中控制其中一个参数。
如果while循环的执行速度低于预期,则可能需要使用生产者/消费者体系结构,以便在采集循环之外移动其他进程,例如日志记录,后处理,分析和用户界面(UI)功能。
如果不能提高while循环性能,则可能需要降低应用程序的采样率。
不要将高亮执行与包含DAQmx Read VI的代码一起使用,因为它会降低执行速度并导致缓冲区溢出。
DAQmx PC缓冲区太小,无法容纳任务所需的数据量,导致在获取数据之前在DAQmx PC缓冲区中进行覆盖。
手动增加主机端数据缓冲区的大小即可解决此错误。但是,请记住,如果发生错误是因为没有足够快地从DAQmx缓冲区中读取数据(参见原因1),增加缓冲区大小只会延迟错误的发生 - 它不会完全消除它。
DAQmx应用程序的读取速率取决于两个因素 - 每次采集的样本数和每秒读取数:
即使您将读取速率和采样率设置为相同,您的程序也可能无法以您期望的速度执行。当while循环中需要处理很多任务时会发生这种情况,导致每次迭代花费的时间比预期的要长。这将导致DAQmx读取不像预期的那样进行,并且样本堆积在缓冲区中。您可以使用循环基准测试技术(如下所示)来验证while循环实际上是否以您期望的速度执行: