LabVIEW关于定时的研究

发布者:Serendipity22最新更新时间:2012-09-07 来源: 21IC 关键字:LabVIEW  定时 手机看文章 扫描二维码
随时随地手机看文章

    对于LabVIEW中用于定时的两个最常用的vi就是Wait (ms).vi 以及 Wait Until Next ms Multiple,本文将用实际例子来讲述这两个vi的区别。不想看后面的详细讨论的可以只看下面几个结论即可: 

  1. 如果想实现定周期While循环时,需要用Wait(ms).vi而不是Wait Until Next ms Multiple.vi
  2. Wait(ms).vi在与代码并行时可以保证整个运行时间为设定值,这个功能一般都会以为是Wait Until Next ms Multiple.vi的特性
  3. Wait Until Next ms Multiple.vi 并非想象中那么好用,它会造成不少的问题,至少第一次的运行时间无法保证为设定值。
  4. 在代码执行时间没超过设定值时,两者可以通过编程实现大致相同的功能,但是当代码执行时间很大时,两者的处理方法是截然不同的。

一.Wait (ms)

 
   对于Wait (ms) 这个vi来说需要分两部分来讨论,即它是被顺序地放入代码中还是并行地放入代码中,这两种方式的不同将导致它起的作用完全不同。
 (1)顺序模式
   看一下附带程序中的Wait Sequence Demo 1.vi ,在一个While循环中,首先用Time Delay.vi延时0.05s,然后顺序地使用Wait (ms).vi,设为20ms。
 
   最后运行后的结果如下图,循环的周期在70ms左右。
 
   从结果中可以得知,在顺序模式中,Wait (ms).vi是实打实地延时了所设定的时间,如果其他顺序中的代码耗了时间后,那整个循环的时间就是代码时间+延时的时间。即使在此例中将Time Delay换成一些其他消耗一定时间的code后结果也是一样。

 (2)并行模式
  当在并行模式时,在不是跑Real-Time时,Wait (ms)这个vi竟然是能保证整个循环周期是所设定的值,我们看下面的例子(Wait Parallel Demo 1.vi),程序如下:
 
    循环中有n多Wait(ms).vi,运行后的结果是循环周期是20ms,因此可以初步得出结论,对于Wait(ms).vi与其他代码并行时,它会保证整个部分的运行时间是所设定的值(millisecondes to wait)。
 
    如果还不很确定的话可以看下面一个例子(Wait Parallel Demo 2.vi):整个程序的循环中有一个Code.vi这样一个小vi,它的作用就是运行一堆代码从而占据一段时间(可调)。Results中有两条曲线,白线表示的是代码的运行时间,红线表示的是整个循环的运行时间。 
 
    运行后,我们将Loop Num设小一点,比如5,以保证代码的执行时间小于20ms,得到下面的结果曲线,可以看到,当代码时间不大于设定时间值时,整个循环周期保证为设定值。
 
    我们再将Loop Num增大,使代码执行时间大于20ms,从而得到下面的结果曲线,即循环周期跟着代码的时间走了。
 
    那么我们大致知道了Wait(ms).vi在并行时的特性了,那么在下面的框图中可以很明显地推断出循环周期是50ms。
 
[page]

二.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就会一直等到下一个设定值的整数倍才能结束。
 

关键字:LabVIEW  定时 引用地址:LabVIEW关于定时的研究

上一篇:在LabVIEW下建立弹球模型
下一篇:NI为美海军提供通信测试设备

推荐阅读最新更新时间:2024-03-30 22:29

养成良好的LabVIEW程序编写习惯之三部曲
首部曲 ~ VI 把VI有系统地放置,您可以用资料夹来管理subVI或是把subVI储存成LLB档。 不样将过多的VI存到LLB档,因为往后要储存VI到LLB档时,会花费较多的时间。 利用:Tools Edit VI Library去设定LLB里面的顶层VI(Top VI)。通常会将主程序设成Top VI,这样下次要开启主程序时,比较容易找的到主程序。 如果你开发的某一个subVI常常被其它VI当成subVI的话,不妨设一个.mnu档吧,把这个subVI放到「Functions All Functions User Libraries」,这样下次你会更容易找到这个subVI。 给你的VI一个有意义的档名吧!不要老是叫它te
[测试测量]
MSP432的相关定时
定时器 定时器模块是MSP432单片机中非常重要的资源,可以用来实现定时控制、延时、频率测量、脉宽测量以及信号产生等。此外,还可以在多任务的系统中作为中断信号实现程序的切换。例如在MSP432单片机实时控制和处理系统中,需要每隔一定时间就对处理对象进行采样,再对获得的数据进行处理,这就要用到定时信号。 MSP432单片机的定时器模块功能如下: (1)看门狗定时器:基本定时,当程序发送错误时执行一个受控的系统重启动; (2)16位定时器A:基本定时,支持捕获输入信号、比较产生PWM波形等功能; (3)32位定时器:基本定时,功能基本同定时器A,但比定时器A灵活,功能更强大; (4)定时时钟:基本定时,日历功能。
[单片机]
MSP432的相关<font color='red'>定时</font>器
基于LabVIEW的智能家居监控系统设计
随着测控技术和网络通信技术的高速发展及人们家居理念的变化与提升,现代社会家庭成员已把追求数字家庭智能化带来的多元信息安全、舒适便利的生活环境作为理想目标。因此,如何建立一个高效率、低成本、易扩展的智能家居系统已成为人关注的焦点。虚拟仪器强调“软件就是仪器”的新概念,它是在计算机为核心的硬件平台上,配以相应测试功能硬件作为I/O接口,利用仪器软件由用户自己定义、设计测试功能的一种计算机仪器系统,虚拟仪器具有数据采集、数据分析处理、结果输出显示三大基本功能。LabVIEW是NI美国国家仪器公司的虚拟仪器软件开发平台,是目前最完善、应用最广泛的图形化软件开发集成环境,LabVIEW拥有丰富的工具包,编程效率高,大大缩短了系统开发时间。本
[测试测量]
基于<font color='red'>LabVIEW</font>的智能家居监控系统设计
mini2440 按键驱动添加定时器消抖动
测试程序和Makefile同前面的实验一样的,这里只记录一下驱动的源代码就行了,改动不大,就是把唤醒进程和发送异步信号的操作移动到定时器的超时函数里面去了,这样做的目的是为了消除按键的机械抖动。 驱动源代码: #include linux/module.h #include linux/kernel.h #include linux/device.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include linux/interrupt.h #include linux/irq.h #include linux/gp
[单片机]
STM32定时器做外部脉冲信号计数器用
今天,尝试使用STM32的计数器的外部时钟功能,来对外部脉冲信号进行计数。效果还不错。具体设置如下: /* TIM3_CH2 为脉冲输入口 1. 配置GPIO_GPIOA_PIN7 输入 2. 配置TIM3 计数器在TI2 端的上升沿计数: 1). TIMx_CCMR1: CC2S =01; 配置通道2检测TI2输入的上升沿 2). TIMx_CCMR1:IC2F =000; 选择输入滤波器带宽 3). TIMx_CCER: CC2P =0; 配置上升沿极性 4). TIMx_SMCR: SMS =111; 选择定时器外部时钟模式1 5). T
[单片机]
配备音乐定时器的蓝牙智能牙刷
没有计时器的帮助,如何保证刷牙的时间达到推荐的2分钟?来自智能牙刷Beam Brush的幕后人员表示:人们平均的刷牙时间仅有46秒,但是一个简单的定时器,就能让50%以上的人们达到2分钟的推荐时间。该团队的蓝牙牙刷,在1年前的CES上首次亮相,并在6月得到了FDA的批准,上周正式上市的价格为49.99美元。除了一个跟踪刷牙的频率和时间的传感器,它还有一个可以播放2分钟音乐的定时器。      通过牙刷柄上的一个按钮,用户还可以将数据同步到配套的应用上,并将其发送给牙医。   来自肯塔基州路易斯维尔的Beam Technologies公司甚至想到了实际的奖励计划,比如达到了每天刷牙至少2次、每次至少2分钟的话。
[模拟电子]
配备音乐<font color='red'>定时</font>器的蓝牙智能牙刷
C51入门2,定时器和中断应用
实验一:定时器中断闪灯 程序: #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include reg52.h //端口设置 sbit P10=P1^0; sbit K1=P3^2; char code dx516 _at_ 0x003b; //主函数 void main(void) { TMOD=0x01; //设置定时器0工作再方式1 TR0=1; //启动定时器0,TR0必须置1 ET0=1; //开定时器中断 EA=1; //开总中断 while(1) //死循环 { ;
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新测试测量文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved