VI动态加载到子面板速度优化



主要软件: LabVIEW Development Systems>>LabVIEW Full Development System
主要软件版本: 2010 SP1
主要软件修正版本: N/A
次要软件: LabVIEW Development Systems>>LabVIEW Full Development System

问题:     使用WLAN的工具包编写测试项VI,然后需要将这些测试项VI动态加载到主VI的子面板(Subpanel)上,当采用open vi reference的方式进行动态加载,随着加载的测试项VI增多,加载时间高达90s怎么样能把这个加载的时间缩短呢
  


解答:

        如图1,有些功能VI其调用的子VI很多,那么实际打开这个功能VI时或者动态加载这个功能VI时,我们就会看到LabVIEW要确认所调用到的子VI的路径并进行加载,这个加载的过程是比较耗时间的。然而,当我们打开这个功能VI或者动态加载这个功能VI时,为了避免每次都要将加载子VI加载一遍,就必须将其调用的所有子VI进行编译,并将编译信息进行保存,如图2所示。只有将编译信息保存了,LabVIEW才可以知道各个子VI的路径信息,那么下次打开这个功能VI时或者动态加载这个功能VI时,其调用的子VI就不需要重新加载了。因此,要优化VI动态加载到子面板的速度,我们就必须注意对功能VI中子VI的编译信息进行保存。

1  VI加载耗时

编译子VI

    下面我们实际做一个验证,由于平时我们编写的VI层次结构并不复杂,所以无法看出VI编译对于加载时间的影响,所以我们用一个复杂一些程序来说明这个问题。如图3所示,该VI调用到了较多的子VI,因此当在没有保存编译信息的情况,由于要加载所调用到的子VI,所以打开该VI的时间就会比较长,自然要把该VI动态加载到子面板上的时间也会比较长。

调用了较多子VI的功能VI

    如图4所示,在该功能VI没有被保存编译信息的情况下,将其加载到子面板的时间约为1.6s

4 动态加载一个未被编译的功能VI耗时约1.6s

    如图5所示,当加载10个这种没有被保存编译信息的VI时,可以看到在程序框图中虽然是并行加载的代码,但是时间却是12.3s,相当于10VI加载时间的和。之所以会出现这样的情况,就是因为每一个功能VI的动态加载都需要将其调用的子VI重新加载一遍,所以在此就根本没有体现出LV编程天然并行执行的这样一个思想。

5  动态加载10个未被编译的功能VI耗时约12.3s

    我们找到了VI动态加载到子面板耗时的原因是因为编译信息没有被保存,所以每次打开VI或者动态加载VI都需要重新加载程序中调用的子VI。那么LV是如何保存编译信息的呢?经验证的方法有三种,我们按照操作的简洁程度依次进行介绍。第一种就是将该功能VI进行保存,如图6所示,当我们关闭这个功能VI时,虽然没有对功能代码和界面做任何更改,但是依旧会提示保存该VI,这时候保存的就是编译信息。

6 提示保存功能VI

    

      

7 动态加载一个已经编译过的子VI的功能VI的时间为0.2s

动态加载10个已经编译过的子VI的功能VI的时间为0.8s

将主VI和子VI批量编译

           第三种方法就是将调用的子VI手动保存,具体操作就是将子VI的前面板打开,然后保存即可,这个过程就是子VI编译信息的保存。

          综上论述,当我们动态加载调用子VI较多,层次结构复杂的功能VI时,对于子VI编译信息的保存是不能忽视的,其严重影响VI动态加载的速度。


相关链接:

附件:





报告日期: 01/07/2013
最近更新: 01/07/2013
文档编号: 6561QKL9