vi_server_for_subvi #52
Replies: 7 comments 14 replies
-
老师您好,在学习异步调用的例子时调用“开始异步调用”时,引用处连线报错:“通过引用调用”函数的所有类型的引用输入必须为严格VI引用,请问老师这个应该怎么解决 |
Beta Was this translation helpful? Give feedback.
-
老师您好,想向老师请教一个问题:怎么在主vi中实现修改异步调用vi的输入控件值呢。 |
Beta Was this translation helpful? Give feedback.
-
老师您好:关于异步调用vi的释放, 看到一个文章,建议““打开 VI 引用”这个函数的“VI指定类型”参数,不使用 "严格类型的 VI 引用" 。是下面这个网址:https://labviewcoder.com/2016/07/06/quick-tip-asynchronously-launching-vis-the-right-way/。 |
Beta Was this translation helpful? Give feedback.
-
阮老师,使用动态调用的时候是不是就蕴含了【每次调用是重新加载】,还是说仍然可以设置【每次调用是重新加载】or【首次调用后保留】呢? |
Beta Was this translation helpful? Give feedback.
-
阮老师,请教一下,异步调用的VI如何通过编程在调用它的VI里面把它终止运行(前面板也同时·关掉)呢? |
Beta Was this translation helpful? Give feedback.
-
阮老师请教一下,动态调用的话,必须要提供路径和VI的源文件吗?不能嵌入到应用程序的EXE里面吗? |
Beta Was this translation helpful? Give feedback.
-
之前博客上的相关文章,搬到这里: 后台任务有一些任务在运行的时候,并不需要与用户交互。它们通常在不打扰用户其它工作的时候默默的执行。这样的任务叫后台任务。与之对比,前台任务就是用户看得见的。 比如,一个文本编辑软件,帮助用户上编辑文字的任务都是前台执行的。如果这个软件做得好,最好还有自动保存文件的功能,这样在系统突然崩溃之后,不至于所有用户做的改动都白费。自动保存这个功能一般都被作为后台任务,他在执行时,不打扰用户其它工作。 后台任务的应用还有很多。在 LabVIEW 中实现后台任务的方法,就是使用 VI Scripting 技术,动态把负责后台的任务在新的线程里启动起来。下面以一个比较常用的功能来说明后台任务是如何实现的。 大型 LabVIEW 程序启动的时候可能会比较慢,这是因为程序在它所有的子VI都被装入内存之后才能执行。把大量子VI装入内存可能要花费几秒钟的时间,如果这段时间,什么都不显示给用户,用户可能会以为是程序出错或者死机了,从而做出一些错误的操作。好的做法是,在启动程序的时候立刻显示给用户一个提示界面,告诉用户程序正在装载,已经装载的进度。同时把所有的子VI装入内存,然后再启动程序的主界面。 在程序显示启动画面这个阶段,当子VI全部装入内存后,启动画面仍然显示在前台,而程序会再启动一个后台任务,把主程序运行起来。之后,启动画面程序把自己关闭,而主程序界面也从后台跳到前台来了。 启动画面的程序代码如下图所示: 它由5个部分组成: 第1部分负责把主程序的子VI都装入内存(用 Open VI Reference 函数打开这些子 VI 就可以把它们装入内存)。这部分与后台任务无关,不细说了。 第2部分 Open VI Reference 函数打开主程序的主VI,它的输入是主VI的地址。后续使用到的针对这个 VI 的 Scripting 函数,都依赖于在此打开的 VI 的引用。 第3部分设置主VI的 Front Panel:Open 属性。这个属性值为真的时候,主程序的界面被显示出来。在我们这个程序中,主程序最终是要跳到前台来与用户交互的,所以需要显示他的界面。有些后台任务,比如自动保存任务,没有交互界面,就不需要设置此属性。 第4部分调用主VI的 Run VI 方法。调用这个方法之后,主程序开始运行。目前主程序还是作为后台任务在运行。这里需要注意的是 Run VI 方法的两个参数: Wait Until Done 参数如果设为真,启动画面程序运行到这里就会暂停下来,一直等到后台任务结束,才继续执行后面的代码。但是,作为启动画面程序,我们显然不希望出现这种情况。我们需要让前台任务和后台任务同时执行,所以这个参数在本程序中被设为“假”。后台程序在另一个线程中被执行,它的结束与否不影响当前程序的执行,我们的启动画面程序会立即去执行下一条语句。 用 Open VI Reference 函数打开的引用必须被关掉,否则,VI被装入内存,却从来不被卸除出内存,就会引起内存泄漏。Auto Dispose Ref 参数用于决定由谁来关闭动态运行起来的VI的引用,是前台任务,还是后台任务自己。真对于我们的例子,后台任务是主程序,我们希望用户关闭它的同时,把它从内存中卸除。所以实例中这个参数的值是“假”,后台程序结束时自动释放引用。对于那些没有界面的后台任务,它们的启动、停止都需要由前台程序来控制。这是这个参数就需要被设为“真”。前台程序还需要这个引用来停止后台任务、卸除后台任务的VI。 第5部分是对启动画面VI自身进行操作的。程序运行到这里,主程序已经运行起来,而启动画面程序的使命也已完成,应当让位给主程序了。启动画面程序在此调用 Front Panel:Close 把自己关闭。 |
Beta Was this translation helpful? Give feedback.
-
vi_server_for_subvi
静态与动态装载子 VI
https://lv.qizhen.xyz/vi_server_for_subvi
Beta Was this translation helpful? Give feedback.
All reactions