二.Wait Until Next ms Multiple
要比较好的解释这个vi,需要知道系统(至少Windows里有)中有一个millisecond timer这样一个计时器,这个vi跟这个计时器有着千丝万缕的关系。
简单来说,这个vi将一直等到ms timer得到输入值的整数倍才结束,通过下面的example,将会更好的理解(Wait Until Demo 1.vi)。程序中,首先输入50ms给Wait Until,计算第一次Wait Until花的时间,再输入50ms,同样地计算出第二次Wait Until花的时间。
运行完程序后,得到大致下面的结果:
每次运行的结果都不相同,但是可以看到,第一次Wait Until所花的时间总不是50ms,而第二次花的时间肯定是50ms,并且Timer Value两次一般都是50ms的倍数;出现这样的情况是这样来解释:首先,在程序运行的时候,系统的Timer值并不会正好是50的倍数,假设为10450935,那么程序在运行了15ms后Timer达到10450950(50的倍数)从而结束第一个Wait Until;在之后又进入第二个Wait Until,在达到后一个50的倍数(10451000)后完成。
因此,如果将Wait Until并行地放在While循环中时,可能会出现两个问题,首先是它的第一次的周期就是不确定的。如下面的例子(Wait Until Parallel Demo 1.vi):
将按钮调在Wait Until和Wait,运行程序后,得到下面的对比结果:
可以看到,在用Wait Until时,第一次(即第二个值)都达不到20ms,但用Wait时,第一次就能保证在20ms,这是由于程序刚开始时Timer值不是整数倍导致。
用Wait Until Next ms Multiple.vi的第二个问题见下面的链接,讲得也很清楚了:http://zone.ni.com/devzone/cda/tut/p/id/4120
最后再看一个例子,当Wait Until放在顺序模式中时,大致可以起到Wait的并行模式的作用,但是在代码时间超过设定值时,两者还是有着很大的区别。
当将Loop Num设大后,代码执行时间超过了20ms,此时得到的结果如下图,执行周期达到了40ms,这也证明了一旦代码时间超过设定值后,Wait Until就会一直等到下一个设定值的整数倍才能结束。
2/2 首页 上一页 1 2 |