等待(ms)函数和等待下一个整数倍毫秒函数之间的功能区别

更新 Sep 13, 2019

适用于

Software

  • LabVIEW

问题详述

等待(ms)函数和等待下一个整数倍毫秒函数似乎实现的是相同的功能。在LabVIEW中,这两个函数的功能有哪些区别呢?

解决方案

这两个函数都被用作将程序的执行阻滞一段特定的时间,这样做通常是为了控制循环执行的速率。它们之间的不同之处在于:等待(ms)函数单纯地根据等待时间(毫秒)接线端的设定值阻滞代码的执行,而等待下一个整数倍毫秒函数则是在系统毫秒时钟的当前值可以被毫秒倍数接线端的指定值整除之前对执行的代码进行阻滞。

下图展示了两个函数对于代码执行的不同阻滞方式。横轴表示系统毫秒时钟的取值,两个函数所对应的代码都从50毫秒处开始运行,并且都将100毫秒作为接线端的输入值。图中的圆点表示函数停止阻滞代码执行的时间点。

您还可以通过下面的代码范例来观察这两个函数之间的执行差异。

等待(ms)
等待(ms)函数会根据等待时间(毫秒)接线端的设定值阻滞代码的执行。
  • 范例1:一个循环中包含需要5毫秒来执行的代码以及一个将10毫秒作为等待时间(毫秒)接线端输入值的等待(ms)函数。该While循环总共将需要10毫秒的时间来完成一次迭代的执行,其中代码的执行在5毫秒后完成,而等待(ms)函数则在代码执行完成的5毫秒后停止对本次迭代的阻滞。当前的情况下,等待(ms)函数与循环中的代码并行执行。

在这个范例中,循环的执行定时将由顺序结构外部的等待(ms)函数进行设置。
  • 范例2:循环的结构与上一个范例相同,但现在代码需要15毫秒才能完成执行。顺序结构外部的等待(ms)函数仍然将10毫秒作为等待时间(毫秒)接线端的输入值 。因为外部等待(ms)函数的等待时间小于代码执行所需花费的时间,所以代码执行完成后没有延迟,循环将在15毫秒的执行过程结束后立即进入下一次迭代。

在这个范例中,循环的执行定时将不再由等待(ms)函数决定,而是由循环内代码的总执行时间决定的。

等待下一个整数倍毫秒
您可以使用等待下一个整数倍毫秒函数,根据系统的毫秒时钟实现各个不同的循环之间的同步。顾名思义,该函数会等待系统毫秒时钟到达下一个通过毫秒倍数接线端所指定时间的倍数,之后才会解除对代码执行的阻滞。
  • 范例3:下图中第一个循环包含需要100毫秒才能完成执行的代码,而等待下一个整数倍毫秒函数与这段代码并行执行,该函数毫秒倍数接线端的输入值为200毫秒。每当系统毫秒时钟到达200毫秒的倍数时,该循环便会执行一次。相同的VI中存在第二个循环,它也包含一个将200毫秒作为毫秒倍数接线端输入值的等待下一个整数倍毫秒函数。第二个循环中的代码需要150毫秒的执行时间,且与第一个循环并行执行。每当系统毫秒时钟到达200毫秒的倍数时,这两个循环将会同步地开始下一次的迭代。这个方法可以保证每个循环在相同的时间点开始后续的迭代。

相关信息

请注意,在循环中使用等待下一个整数倍毫秒函数时,第一次迭代的延迟将与毫秒倍数接线端输入值所指定的时间不同。这是因为等待下一个整数倍毫秒函数会在系统毫秒时钟的当前值可以被毫秒倍数接线端的指定值整除之前进行等待,因此当其第一次运行时,它等待的时间将取决于系统毫秒时钟的绝对时间。后续的每次迭代都将以第一次等待结束的时间为基准对齐,并且完全根据您通过毫秒倍数接线端指定的时间间隔进行等待。

请注意,与等待(ms)函数相同,若与等待下一个整数倍毫秒函数并行执行的代码所花费的时间超过毫秒倍数接线端所指定的时间,那么等待下一个整数倍毫秒函数将不会对循环的执行速度产生任何影响这种情况下,循环的下一次迭代将在本次迭代的代码执行完成后直接开始执行。

有关等待(ms)函数等待下一个整数倍毫秒函数之间差异的更多信息,请参阅LabVIEW帮助文件

本文是否有帮助?

无帮助