子VI
图标和连线板设计
使用子VI的必要性
编辑图标
左键双击图标
有很多符号供选择
连线板设计
子VI控件的接线端
推荐布局:左侧为输入控件,中间为附加项,右侧为输出控件
子VI前面板设计
保证与程序框图中控件对应,避免在连线板设计时出错
创建子VI
创建方法
方法一:直接把已有VI视为子VI
方法二:
右键编辑,选择创建子VI
- 选取代码创建子VI时,所有控件、穿过选择框的连线 都将创建接线端
- 子VI用到主VI控件的属性节点或调用节点,需要将该主VI控件引用作为接线端引出
调用子VI
主VI与子VI对比
多态VI
函数的多态性
对不同对象进行相同操作
不同数据类型间的运算,运算规则不同
创建多态VI
调用多态VI
直接使用,多态VI会根据输入类型自动使用对应的VI。
可重入VI
含义
默认情况下,VI为非重入且执行系统不能在一个VI上同时运行多个调用。
同时调用一个非重入的子VI,如果某个调用正在运行,则其它的调用要等它运行完毕后才能运行。
例:时间提醒
下列程序框图是用来提醒用户午饭时间和休息时间已到。必须对Alarm Timer VI的重入属性进行设置才能保证有理想的结果。
用户指定一个午饭时间和休息时间。假设午饭时间为12:00pm,休息时间为10:00am。
Alarm Timer VI等待指定时间。Alarm Timer VI的实例位于程序框图的并行部分,无法预测哪一个实例先执行。假设午饭时间定时器先运行。
如Alarm Timer VI被配置为不可重入执行,休息时间定时器无法在12:00pm之前开始运行,必须等到午饭时间定时器完成执行。这个延迟机制使休息时间定时器无法在10:00am触发一个提醒。为了保证各个子VI实例在合适的时间被触发,必须配置Alarm Timer VI为重入执行。
重入方式
LabVIEW的重入VI类型如下:
非重入执行-LabVIEW为所有子VI实例分配同一个数据空间。
共享副本重入执行-LabVIEW分配一个副本池在调用方之间共享,该副本池最初仅包含一个副本。调用方调用一个共享副本VI时,将从副本池取出一个副本并在调用结束执行后返回该副本。如调用方调用共享副本VI时副本池为空,LabVIEW将为调用新建一个副本,并在执行结束后将副本返回副本池,因此副本池不断增大。
预分配的副本重入执行-LabVIEW为每个子VI使用分配单独的、非共享副本。
调试重入VI
如需调试某个重入VI,可选择文件»VI属性显示VI属性对话框,从下拉菜单中选择执行并勾选允许调试复选框。
如要调试某个预分配副本的实例,打开子VI的相关实例。无法编辑副本VI,但是可以查看VI程序框图。例如,设置断点、创建探针、启用高亮显示执行过程和单步执行。
要调试共享副本的VI实例,需在源VI中使用断点、探针和启用高亮显示执行过程。副本VI无法在调用之间保持上述设置。
注: 调试应用程序或动态链接库时,无法调试打开VI引用函数创建的可重入前面板。如可重入前面板是LabVIEW创建的动态链接库的接入点,也无法对其进行调试。
VI右键菜单
说明和提示
设置子VI节点
调用设置
显示VI层次结构