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

简介: LabVIEW动态加载VI到子面板速度优化

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


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


解答:


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

f184aadbd6d78ec2ba1c111bb68fac66.png

编辑

添加图片注释,不超过 140 字(可选)

图1 子VI加载耗时

编辑


添加图片注释,不超过 140 字(可选)


图2 编译子VI


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

9ef631b4dfeb16a022bee388c148d5ea.png

编辑

添加图片注释,不超过 140 字(可选)

图3 调用了较多子VI的功能VI

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

编辑


添加图片注释,不超过 140 字(可选)


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


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

9397548d0a1514fb7f3287a270d4707b.png

编辑


添加图片注释,不超过 140 字(可选)


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


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

abdd76cb819b6f9fc912526a201ceee2.png

编辑

添加图片注释,不超过 140 字(可选)

图6 提示保存功能VI


编辑

添加图片注释,不超过 140 字(可选)

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


编辑

添加图片注释,不超过 140 字(可选)

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

编辑


添加图片注释,不超过 140 字(可选)



图9 将主VI和子VI批量编译


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


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


LabVIEW、LabVIEW开发、LabVIEW编程、LabVIEW程序


上文中提到的例子和资料,均在word中的附件里,可点击下载。进一步了解,可联系们。

相关文章
|
27天前
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
43 0
|
8月前
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
41 0
|
计算机视觉 容器
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
|
26天前
LabVIEW强制子VI前面板停留在其他面板前面
LabVIEW强制子VI前面板停留在其他面板前面
17 1
|
26天前
|
容器
LabVIEW主VI前面板中显示或使用多个子VI
LabVIEW主VI前面板中显示或使用多个子VI
20 2
|
27天前
|
监控 C++
C++ Qt开发:QFileSystemWatcher文件监视组件
QFileSystemWatcher 是 Qt 框架中提供的一个类,用于监视文件系统中的文件和目录的变化。它允许你在文件或目录发生变化时接收通知,并可以用于监视文件的创建、删除、重命名以及内容修改等操作。这对于需要实时监控文件系统变化的应用程序是非常有用的。
54 5
C++ Qt开发:QFileSystemWatcher文件监视组件
|
11月前
Three.js开发:修改默认鼠标操控
Three.js开发:修改默认鼠标操控
146 0
|
27天前
|
SQL 数据库 C++
C++ Qt开发:SqlTableModel映射组件应用
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`SqlTableModule`组件的常用方法及灵活运用。 在多数情况下我们需要使用SQL的方法来维护数据库,但此方式相对较为繁琐对于表格等数据的编辑非常不友好,在`Qt`中提供了`QSqlTableModel`模型类,它为开发者提供了一种直观的方式来与数据库表格进行交互。通过使用该组件可以将数据库与特定的组件进行关联,一旦关联被建立那么用户的所有操作均可以使用函数的方式而无需使用`SQL`语句,该特性有点类
30 1
|
7月前
|
JavaScript
网页里如何使用js屏蔽鼠标右击事件
网页里如何使用js屏蔽鼠标右击事件
36 0
|
11月前
|
JavaScript
fastadmin 自定义 按钮 动态切换数据 TAB切换
fastadmin 自定义 按钮 动态切换数据 TAB切换
199 0