LabVIEW 关于定时的研究

摘要:
最终操作后的结果如下图所示,循环周期约为70ms。从结果中,我们可以看到,在序列模式中,Wait.vi实际上延迟了设置的时间。如果其他序列中的代码消耗时间,则整个周期的时间为代码时间+延迟时间。运行后,我们将LoopNum设置为低一点,例如5,以确保代码执行时间小于20ms,并获得以下结果曲线。我们可以看到,当代码时间不大于设置的时间值时,整个循环周期保证为设置值。

对于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)

LabVIEW 关于定时的研究第1张

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

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

二.Wait Until Next ms Multiple

LabVIEW 关于定时的研究第10张

 
       要比较好的解释这个vi,需要知道系统(至少Windows里有)中有一个millisecond timer这样一个计时器,这个vi跟这个计时器有着千丝万缕的关系。
       简单来说,这个vi将一直等到ms timer得到输入值的整数倍才结束,通过下面的example,将会更好的理解(Wait Until Demo 1.vi)。程序中,首先输入50ms给Wait Until,计算第一次Wait Until花的时间,再输入50ms,同样地计算出第二次Wait Until花的时间。
LabVIEW 关于定时的研究第11张 
       运行完程序后,得到大致下面的结果:
LabVIEW 关于定时的研究第12张 
        每次运行的结果都不相同,但是可以看到,第一次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):
LabVIEW 关于定时的研究第13张
       将按钮调在Wait Until和Wait,运行程序后,得到下面的对比结果:
LabVIEW 关于定时的研究第14张 LabVIEW 关于定时的研究第15张 
  可以看到,在用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的并行模式的作用,但是在代码时间超过设定值时,两者还是有着很大的区别。
LabVIEW 关于定时的研究第16张 
     当将Loop Num设大后,代码执行时间超过了20ms,此时得到的结果如下图,执行周期达到了40ms,这也证明了一旦代码时间超过设定值后,Wait Until就会一直等到下一个设定值的整数倍才能结束。
LabVIEW 关于定时的研究第17张

 

免责声明:文章转载自《LabVIEW 关于定时的研究》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇日志审计小结使用sonar进行代码质量检查下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ubuntu下vi的使用

ubuntu下vi的使用 ssh之后对于server的文件,我习惯用gedit,可是不好改动,于是就用vi. 1、vi的基本概念   基本上vi能够分为三种状态,各自是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode), 各模式的功能区分例如以下:   1) 命令行模式command mod...

LabVIEW 串口通信

Instrument I/O   利用LabVIEW内置的驱动程序库和具有工业标准的设备驱动软件,可对 GPIB(通用接口总线)、Ethernet(以太网)接口、RS-232(标准串行接口总线)/RS-485 等 I/O 仪器设备进行控制。在LabVIEW的仪器I/O子模板上提供了多种图标可对各种I/O仪器设备进行驱动。   在LabVIEW功能模板的I...

centos下 Vim常用快捷键操作命令大全

VIM命令的安装方法:同样vim也有两种安装方法: 一、yum安装,centos下安装软件最简单的方法了,还能解决依赖问题,首推该方法,缺点是源里面有一些软件并不是其官网上最新的 sudo yum install -y vim 二、源码编译安装,今天重点介绍这种方法,不过也挺简单的 1.通过git下载vim最新版 git clone https://git...

vi编辑器的学习使用(七)

vi编辑器学习使用之七vi是一个强大的编辑器,他不仅可以用来处理我们平时的文本工作,他还可以用写程序文件。在vi中有许多命令可以方便的完成我们的程序处理工作。在用vi进行程序处理时,vi充分的显示出来了他的强大之处,他可以实现在语法加亮显示,实现自动缩进,实现括号匹配,还可以在程序中实现查找和跳转。我们可以用这样的命令在vi中打开语法加亮显示的功能::sy...

LabVIEW介绍

LabVIEW是NI(National Instruments,美国国家仪器)公司推出的上位机图形化编程软件,最初主要应用于数据采集和测控领域,随着LabVIEW在国内的逐步应用和普及,开始作为一种通用的上位机编程语言而被广泛使用在各个场合。 简单来说,LabVIEW可以实现VB、VC一样的功能(甚至功能更加丰富和强大),但是它的图形化编程方式可以极大地提...

Linux中VI的使用方法累积

1:在命令行中输入:vi filename(文件名自己给定)即可新建一个文件类型按照新建市给定的后缀 2:进入VI后 i--进入插入模式  esc--命令模式 3:命令模式下的常用命令 {set nu}---设置行号   {/file}---查找file文件    {yy}---复制当前行 {yyn}---复制从当前行开始的n行      {pp}---粘贴...