原创 谈谈LABVIEW的几种定时器

2008-5-6 10:26 9364 8 10 分类: 测试测量

LABVIEW提供了几种定时器(包括DELAY),如下图所示



(1) Tick Count


Returns the value of the millisecond timer. The base reference time (millisecond zero) is undefined. That is, you cannot convert millisecond timer value to a real-world time or date. Be careful when you use this function in comparisons because the value of the millisecond timer wraps from (2^32)1 to 0.(返回毫秒定时器的值. 基准参考时间(0 毫秒)未定义,也就是说,不能把返回的毫秒数直接转换成现实世界的时间和日期.必须注意当你使用这个函数进行比较的时候,毫秒定时器达到2^32-1后反转成0. )


 


基准参考时间未定义,说法比较模糊,难道会是个随机数,那显然不可能,如果是随机数,那两次调用TICK COUNT取得差值就不可能表示经过的毫秒数.无论如何,必须有个时间的起点.


 


API函数中也有一个类似的函数:GetTickCount,该函数返回计算机启动以来经过的毫秒数.在9X中,它读取的是BIOS中保存的系统时钟的滴答数,早期PC的ROM初始化Intel8259定时器芯片来产生硬件中断08H。这个中断有时称为"定时器滴答"中断。中断08H每隔54。925毫秒产生一次,或大约每秒18.2次。BIOS使用中断08H更新存于BIOS数据区的"时间"值.这就是长说的55MS的由来.对于NT操作系统,常规的说法是能精确到10MS,也就是说精度在1MS时是不精确的.


 


经过实际测试,LABVIEW的TICK COUNT的返回值和API的返回值是一致的,也就是计算机启动以来经过的毫秒数.


 


毫秒数达到2^32-1后反转成0,可见它的数值形式是U32,最大值是2^32-1,大概相当于49.7天.对于一个连续运行的计算机,用这个节点进行比较的时候,在连续运行49.7天后,该值自动恢复到零,如果在这个时刻进行比较,可能会出现错误的结果.


 


(2) wait(ms)


Waits the specified number of milliseconds and returns the value of the millisecond timer. Wiring a value of 0 to the milliseconds to wait input forces the current thread to yield control of the CPU. This function makes asynchronous system calls, but the nodes themselves function synchronously. Therefore, it does not complete execution until the specified time has elapsed.(等待指定的毫秒数并返回毫秒定时器的值(上面提到的计算机启动以来的毫秒数).如果WAIT (MS)连接0会强迫当前线程放弃控制权. )


 


WAIT 0MS是一个相当重要的特点,相当于VB 的DOEVENTS,CVI中的PROCESSSYTEMEVENTS,实际是归还控制权给操作系统,来处理队列中的其他消息,如果没有消息需要处理,系统马上把控制权交给这个线程,继续运行.这里有两种情况,如果系统消息队列中无需要处理的消息,立即返回,如果系统消息队列中有消息需要处理,并且是一个耗时操作,无法预料LV线程何时再次取得控制权.我们比较LV是否加WAIT 0MS的速度.




实验过程中未执行其它任何操作,避免了处理其他消息造成的影响.两者之间,差距是惊人的.这也体现了LABVIEW的一个优点,对于一个倾向于硬件控制的编程软件,它有着极强的任务抢先能力.


 


在一个循环里多次并行执行WAIT,是累加时间,还是按最长的执行那,实际上是异步的还是同步的问题.我们做一下实验.



可见,这三个WAIT是同时执行的.


 


由于WAIT是基于线程的,一个循环里的WAIT不会影响同时运行的其它线程的运行.


 


(3)WAIT UNTIL NEXT MS MULTIPULE


Waits until the value of the millisecond timer becomes a multiple of the specified millisecond multiple. Use this function to synchronize activities. You can call this function in a loop to control the loop execution rate. However, it is possible that the first loop period might be short. Wiring a value of 0 to the milliseconds multiple input forces the current thread to yield control of the CPU. This function makes asynchronous system calls, but the nodes themselves function synchronously. Therefore, it does not complete execution until the specified time has elapsed. (一直等到毫秒定时器变成指定时间的整数倍.可以用于在一个循环中调节循环的执行速率.但是第一次的循环周期可能比较短.可以直接连接0到这个节点,强迫当前线程放弃控制权,归还给CPU. )


 


相比WAIT MS,这个节点在循环中更为常用,对于几个采用相同参数的WAIT UNTIL NEXT MS MULTIPULE,可以实现不特别精确的同步.由于LABVIEW的循环的特点,首次是立即执行的,所以第一次是不能保证同步的.如果必须要保证同步的话,可以在循环中第一次执行空循环来避免这个问题.


 


(4) TIME DELAY EXPRESS


我们先把TIME DELAY EXPRESS VI转换成常规VI,跟踪一下它是如何实现的.


 


 


进一步跟踪SUBTIMEDELAY



 


可见,实际上还是调用的wait(ms),不过是数据类型换成的DOUBLE,表示秒数,同时增加了错误簇,有利于实现顺序延时动作.其他完全等同于wait(ms).


 


(5)   ELAPSED TIME EXPRESS


LV7.1后新增加了这个ELAPSED TIME快速节点,这是一个非常有用的定时器.功能强大,可以实现复杂的控制功能.


 


1.循环定时触发一个事件.


 


 


2.输出一个方波 (5秒)



 


3.PWM波形.



 


4.系统时钟



 


出处:http://www.eefocus.com/myspace/blog/show_148601.html



 

文章评论2条评论)

登录后参与讨论

用户377235 2013-3-4 13:49

专家看见留言请联系我QQ990978555有酬劳

用户377235 2013-1-29 16:20

OFFSET约束基本概念 可以概括为三大注意点: (a)OFFSET约束是用来约束数据和时钟之间的时延关系。 (b)它只能用于与FPGA管脚(PAD)相连的信号,不能用于内部信号。 (c)它告诉ISE布局布线工具,外部时钟和数据输入输出管脚之间的时序关系。 TIMEGRP "data" OFFSET = IN 2ns BEFORE "sysclk"; 其中"data"是一组输入信号的组名,sysclk是输入时钟管脚名字。 这个2ns究竟是什么含义呢? 2ns的含义,就是告诉ISE,在时钟信号和数据信号进入FPGA之前,它们之间的时延是2ns。用一句拗口的话来说就是:在时钟信号沿来之前的2ns,数据准备好。

用户251222 2010-10-10 23:53

图文并茂啊!cool

ilove314_323192455 2009-3-11 18:40

谢谢支持

zhangshaobing517_935512703 2009-3-11 16:27

翻了一下,这位师兄的博客,欣赏欣赏,对电子方面做得很多,学习了!

用户137602 2008-5-7 13:00

这个不错哈,比较好
相关推荐阅读
用户1027019 2015-03-12 10:35
LM2596器件选型
LM2596有不同生产商但提供的规格数据都一样。下图为典型12V输入,输出5V 3A电路。输出电压由R1 R2  Vref等决定 ,  Vout =Vref(1+R2/R1),Vref=1.23V固定...
用户1027019 2009-05-12 22:23
C语言 条件编译详解
预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根...
用户1027019 2009-04-22 16:31
c语言中volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。没有用vo...
用户1027019 2009-04-10 18:09
什么是差动保护?
差动保护是输入的两端CT电流矢量差,当达到设定的动作值时启动动作元件。保护范围在输入的两端CT之间的设备(可以是线路,发电机,电动机,变压器等电气设备) 逆相序上面两位已经解释了,有功反向是逆功率而不...
用户1027019 2009-03-14 13:09
labview安装的技巧
labview安装的技巧2007-09-14 01:13下载: Labview8.0      Labview破解补丁首先下载labview8.2注册机,现在网上很多,随便提供个链接http://ww...
用户1027019 2009-02-07 22:31
LATEX文件中如何JPG插图?
使用一个名字叫ebb的工具。一般widows下装上Ctex都会带这个小工具,Linux下安装Latex后一般也会有,先用ebb生成对应的BoundingBox文件,如输入命令: ebb test.jp...
我要评论
2
8
关闭 站长推荐上一条 /2 下一条