如何防止cpu使用在labview中改变时间?

时间:2017-12-07 16:33:32

标签: labview

我试图编写一个代码,其中每1毫秒一个数字加一个,应该替换旧数字。 (像计时器一样!)。

问题是,由于PC上运行的其他一些程序,每当cpu使用量增加时,这1毫秒也会增加,程序中的时间也会改变!

有没有办法阻止cpu负载变化影响我的程序中的时间?

3 个答案:

答案 0 :(得分:3)

听起来好像是在尝试使用软件定时生成带有数模转换器卡的模拟输出波形,其中您的软件负责确定应该输出什么值。给定时间并相应地更新输出。

这对于静止或低速信号是可以的,但是你试图以1 ms的间隔进行,换句话说,每秒输出1000个样本或1 ks / s。您无法在桌面操作系统上可靠地执行此操作 - 有太多其他进程可能会占用CPU时间并阻止程序运行数毫秒(甚至数秒,例如网络访问)。

以下几种方法可以解决这个问题:

  • 如果您的模拟输出设备支持,请使用缓冲,硬件时钟输出。您不是一次写入一个样本,而是向设备发送波形或样本数组,并使用硬件生成的定时信号定期输出它们。不幸的是,低端DAQ设备通常不支持硬件时钟输出。
  • 不要期望将样本写入AO的循环每毫秒运行一次,而是在循环中读取LabVIEW的 Tick Count(ms)值,并将其用作样本数组的索引:而不是试图输出每个样本,你的代码现在会说'现在是什么时候,因此输出应该是什么?'这不会给你一个完美的信号输出,但至少现在它应该保持正确的频率而不是“减速” - 相反,只要环路无法跟上,你就会看到信号上的毛刺。这很容易测试,也许它足以满足您的需求。
  • 使用实时操作系统而不是桌面操作系统。对于LabVIEW,这意味着使用Real-Time软件模块和支持RT的NI硬件设备,例如CompactRIO系列,或者如果硬件兼容,则在专用PC上安装RT OS。这显然不是一个便宜的选择(除非它严格用于personal, home use)。在任何情况下,您都需要为输出设备提供兼容RT的驱动程序。
  • 使用计算机的声音输出作为输出设备。 LabVIEW具有缓冲声音输出功能,您应该能够获得可靠的结果。您需要将信号上采样到声音输出的可用采样率之一,可能是44.1 ks / s。缺点是输出电平范围有限且未校准,并且可能是交流耦合,因此您无法输出直流或极低频信号。但是,如果您想要连接它的级别是正常的,或者您可以添加适当的信号调节,这可能是一个简洁的解决方案。如果您需要校准输出电平,您可以使用DAQ卡同时测量它并缩放您输出的声音波形以保持其正确。

答案 1 :(得分:1)

您的问题的答案是“不在桌面计算机上”。这就是为什么存在像LabVIEW Real-Time和专用确定性硬件这样的产品的原因:您需要一台专门针对特定流程而构建的计算机,以便始终如一地为该流程提供服务。常规Windows / Mac / Linux桌面系统中的每个应用程序都会遇到可能被其他系统进程中断的问题,尤其是在其UI层中。

答案 2 :(得分:0)

除非计算机具有实时时钟,否则无法阻止CPU负载变化影响程序中的计时。

如果它没有实时时钟,则没有理由期望它具有确定性。你需要让你的程序以这种速度运行吗?