1.2 子面板的使用介绍
子面板是模块化UI设计的核心工具,可将复杂界面拆分为独立VI模块,支持动态切换和代码复用。使用InsertVI将VI嵌入子面板前需调用RemoveVI,以避免资源泄漏和逻辑冲突。RunVI函数的WaitUntilDone参数控制同步/异步执行模式,AutoDisposeRef决定是否自动释放引用。VI运行状态分为Bad、Idle、RunTopLevel和Running四种,反映当前执行情况。这些机
子面板的作用:
1.模块化 UI 设计:
允许您将复杂的用户界面拆分成多个独立的 VI(模块),然后像拼图一样在主界面中动态组合和切换。
2.动态界面切换:
无需关闭和重新打开窗口,即可在不同的功能界面之间无缝切换(例如,在测试系统中切换“配置”、“运行”、“诊断”等不同面板)。
3.代码复用:
可以将通用的界面模块(如登录窗口、数据图表显示、仪器控制面板)制作成子VI,在多个主程序中重复使用。
一、子面板的使用
通过打开Vi引用、Run.Vi, 然后Insert Vi 可以把某个vi添加到子面板中。
1.Insert VI 方法:将指定 VI 的前面板嵌入到子面板控件中
2.Remove VI:从子面板中移除当前正在显示的 VI,并停止其运行;
【备注】Insert vi之前为啥要使用Remove vi?原因如下:
1. 资源管理:每个被插入的 VI 都是一个独立的实例,会占用内存和 CPU 资源。如果直接插入新 VI 而不移除旧的,旧的 VI 会继续在后台运行,但你对它失去了控制和引用,这会导致内存泄漏(Memory Leak)。随着次数的增加,应用程序会占用越来越多内存,最终可能崩溃。
2. 逻辑冲突:两个 VI 可能会尝试同时访问相同的硬件资源(如串口、DAQ设备),导致硬件错误和应用程序不稳定。
3. 预期行为:你通常希望在新界面出现时,旧界面完全停止并清理。Remove VI 正是确保这一点的正确操作。
二、Run VI函数参数解释
1. Wait until done (等待直到完成)
含义:决定调用方VI(父VI)是否等待被调用VI(子VI)运行结束后,再继续执行自身后续的代码。
TRUE (默认值):同步操作。父VI启动子VI后,自身会暂停执行,直到子VI运行完毕。
适用场景:需要按顺序执行任务,必须拿到子VI的运行结果后才能进行下一步操作时。
FALSE:异步操作。父VI启动子VI后,立即继续执行自身的后续代码,不会等待子VI。
子VI与父VI并行运行。
适用场景:需要启动一个后台任务(如日志记录、数据监控、用户界面更新)而不阻塞主线程时。
2. Auto Dispose Ref (自动处理引用)
含义:决定是否在子VI运行结束后,自动关闭其引用。
TRUE:子VI运行结束后,系统会自动管理其引用,您不需要手动再使用 Close Reference 函数来关闭它。这非常方便,但有时会失去对VI状态的控制。
FALSE (默认值):子VI运行结束后,其引用依然保持打开状态。您必须在后续代码中手动使用 Close Reference 函数来关闭它,否则会导致内存泄漏。
三、Vi的运行状态:
Bad:VI有错误无法执行或VI目前没有执行。
Idle:VI没有执行,但是在内存中。
Run top level:VI在执行结构中属于上层VI。
Running:VI由一个或多个执行中的VI所保留。
更多推荐
所有评论(0)