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中的附件里,可点击下载。进一步了解,可联系们。

相关文章
|
6月前
|
iOS开发 UED
Flutter 动态修改应用图标功能指南
探索Flutter中动态应用图标的实现方法,了解如何为用户提供独特体验,促进用户升级和应用内购买。
202 0
Flutter 动态修改应用图标功能指南
|
6月前
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
111 0
|
前端开发 JavaScript API
020 Umi@4 中如何实现动态菜单
020 Umi@4 中如何实现动态菜单
1049 0
020 Umi@4 中如何实现动态菜单
|
计算机视觉 容器
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
|
1月前
|
JavaScript
avaScript如何实现 选项卡功能
avaScript如何实现 选项卡功能
19 1
|
6月前
LabVIEW强制子VI前面板停留在其他面板前面
LabVIEW强制子VI前面板停留在其他面板前面
56 1
Three.js开发:修改默认鼠标操控
Three.js开发:修改默认鼠标操控
204 0
|
6月前
|
Python 容器
pyqt5-布局管理入门-信号和槽关联-菜单与工具栏-打包资源文件
pyqt5-布局管理入门-信号和槽关联-菜单与工具栏-打包资源文件
48 0
|
C++ 计算机视觉 Python
Qt+C++自定义标题栏最大最小化关闭堆叠切换美化
这篇博客针对<<Qt+C++自定义标题栏最大最小化关闭堆叠切换美化>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
115 0
|
JavaScript
fastadmin 自定义 按钮 动态切换数据 TAB切换
fastadmin 自定义 按钮 动态切换数据 TAB切换
278 0