labview如何调用子vi:静态与动态两种方案
labview如何调用子vi分为静态调用、动态调用两大类,静态调用直接将子VI图标放置到程序框图,操作简单、调试便捷,适合项目固定、子VI不会频繁替换的开发场景;动态调用依靠VI引用实现加载,可在程序运行时切换被调用文件,执行完毕后释放内存,适合插件化程序、多版本切换的项目,静态调用必须提前给子VI配置好连线板,否则无法完成信号接线,动态调用里的调用引用节点还要求生成严格类型VI引用,无严格类型引用会直接出现接线端子缺失的问题。
labview如何调用子vi之静态调用
你先打开作为子VI的文件,在前面板右上角右键图标,勾选显示连接器,把输入控件绑定到左侧端子、输出指示器绑定到右侧端子,保存这个VI文件,没有配置连接器的VI不能作为子VI接入程序框图。
打开顶层调用VI,切换到程序框图,打开函数选板,点击选择VI,在文件夹里选中保存好的子VI,双击即可把图标放到框图内;也可以直接把子VI窗口右上角的图标,拖拽到顶层VI的程序框图里,完成放置。
把顶层VI的信号连线到子VI对应的输入端子,再把子VI输出端子接到后续代码,运行程序就能完成调用。
静态调用会在顶层VI打开时同步加载子VI,子VI文件路径一旦变动,程序就会弹出找不到VI的报错,只适合文件目录长期固定的项目。
labview如何调用子vi之动态调用
动态调用分为引用节点调用、RunVI方法调用两种,二者在接线灵活性、界面控制上存在明显区别。
| 调用方式 | 核心组件 | 参数传递能力 | 适用场景 |
|---|---|---|---|
| 调用引用节点 | 打开VI引用、调用引用节点、关闭引用 | 支持直接连线传递输入输出数据 | 批量数据运算、后台执行,不需要弹出子VI面板 |
| RunVI方法 | 打开VI引用、调用Invoke节点、关闭引用 | 只能通过控件名称写入数据,接线较为繁琐 | 需要打开子VI前面板、人机交互操作的场景 |
使用调用引用节点时,必须先创建严格类型VI引用,在打开VI引用函数里勾选严格类型,选定目标子VI,节点才会自动生成和子VI连线板一致的接线端子,否则无法直接连线传参。
动态调用仅在代码执行到引用节点时才加载子VI,调用结束后执行关闭引用函数,即可把VI从内存中卸载,能够降低大型程序的启动占用内存。
调用子vi的路径问题处理
把顶层VI和子VI放在同一个项目文件内,依托项目浏览器拖拽调用,LabVIEW会自动记录相对路径,减少文件移动后找不到子VI的故障。
如果脱离项目单独运行VI,优先使用当前VI路径函数拼接子VI的文件地址,不要使用电脑绝对路径,避免更换电脑后路径失效。
调用子vi的边界限制
静态调用不支持运行时更换子VI文件,一旦顶层VI保存,绑定的子VI文件就被固定;动态调用不能在实时RT终端里随意使用,NILabVIEWReal-Time模块对VI引用的加载权限存在约束,频繁打开关闭引用容易产生内存碎片。
子VI如果设置了执行模式为对话框模式,静态调用时会强制弹出前面板,后台自动运行的程序要把子VI的执行属性改成标准模式。
