子面板的作用:

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所保留。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐