在实际应用中,更多的情况是需要得到一个VI 上的某个控件,而不是所有控件.先得到所有的控件,再一一判别它们是否是所需的那个控件,这种方法比较麻烦。实际上,这可以利用LabVIEW 已有的一个VI[LabVIEW]\resource\importtoo)s\Common\ VI Scripting\ VI\Front Panel\Method\Get Control. vi 来实现(见图6. 10) 。
有些对象是无法直接为其创建属性节点的,只能通过这种间接的方法来得到该对象的引用。例如,无法通过右键菜单来为界面上的修饰物(控件选板”新式→修饰”中的对象)创建属性节点;若要设置其属性,就必须首先得到它所在的VI 的引用,再得到前面板的引用,然后得到修饰物的引用,最后使用这个引用来设置属性(见图6.1 1) .有些系统风格的装饰物的颜色是由系统设置决定的,不能在程序中改变。
image.png
一个对象的引用可以通过使用”编程→应用程序控制→转换为特定的类”或”编程→应用程序控制→转换为通用的类”,把这个引用转换成更加通用或更加特定的类型.

类浏览器

类浏览器工具的对话框中选择”VI 服务器”,再选择需要处理的类;它会在”属性和方法”列表框中列出这个类所有的属性和方法.双击一个条目,就可以把这个属性或方法添加在VI 的程序框图上.如果需要查看LabVIEW 中所有的、可以用于VI Scripting 编程的类及其属性、方法,可以打开LabVIEW 的帮助文档,在索引中输入”VI 服务器类的层次结构“(VI Server Class Hierarchy) 即可按照层次结构查阅到VI 服务器中每个类所具有的属性、方法以及事件
image.png
image.png

装载和运行子vi

静态与动态装载子vi

一般情况下,一个VI 被打开时,它所有的子VI 也都会同时装入内存。这种把子VI 载入内存的方式称为静态装载.对于一些小型程序而言,这种做法没有任何不妥.但是对于大型的、有成百上千个子VI 组成的程序来说,在主VI 打开的同时,装人所有的子VI .这种做法将带来两个主要的弊病2 一是占用内存过大,二是程序启动速度过慢.

动态调用VI

运行动态调用子VI 一般有3 步z 动态打开一个VI,运行VI ,关闭VI 的引用.
“通过引用节点调用”只能传入有类型说明符的VI 引用,所以,在使用”打开VI引用”函数时,要为其指定”类型说明符气见图6.20). “类型说明符”用于表明动态打开的VI 的连线板模式以及每个参数的数据类型,这样,在”通过引用节点调用”运行这个VI 时,才可以为其输入/输出适合的参数。指定”类型说明符”的方法是:右击”打开v1引用”函的”类型说明符v1引用句柄〈仅用于类型)”参数,为其创建一个常量s 然后右击新创建的常量,在右键菜单中选择”选择v1服务器类→浏览”,选择一个具有与动态词用v1的连线板模式以及数据类型完全相同的V1.于是,”通过引用节点调用”节点内显示的子v1会以连线板的方式显示出来,它可以运行任何一个具有这种类型连线板的V1;而输入”打开v1引用”节点的路径,则用来指定特定的某个V1.

image.png
应用:主VI 在一个线程内运行,要求子VI 在另一线程内并行独立运行。选用此种动态调用方式就能满足此要求。对循环事件结构中耗时代码处理的最佳方案是,让耗时代码在另一独立线程中调用运行,而不影响主程序继续处理后续的事件。其实现方法就是把耗时代码单独做成一个子VI.然后以不等待的方式动态调用它。
用”打开VI 引用”函数打开的引用必须被关掉,否则, VI 被装入内存,却从来不被卸载出内存,就会引起内存泄漏

插件结构

测试程序主体作为一个框架,每个测试任务作为一个插件.若增加了新的需求,不必改动框架程序, 只须编写出新的插件,即可被框架加载进来以供使用。框架式程序的核心是通过动态调用,让插件VI 运行起来的。在设计插件式程序时,首先要确定插件的规范。插件VI 命名或者存放位置的规范,以便框架程序可以正确地找到插件:插件的参数接口规范,可以使框架程序为每个插件传递正确的参数。
image.png