如何通过ActiveX调用将Labview VI作为后台任务运行? (不保持ActiveX忙)

时间:2012-02-15 19:20:50

标签: matlab activex labview

我想在Matlab中通过ActiveX执行Labview VI。

我使用以下命令:

e=actxserver('LabVIEW.Application');
vipath='C:\DATA\Labview\test.vi';
vi=invoke(e,'GetVIReference',vipath);
vi.Run;

这样可以正常工作,看到VI在其前面板上执行。 但是,Matlab一直等到VI终止。 我希望Labview无声地运行VI,而不告诉Matlab(通过ActiveX)等待。

如何在不保持ActiveX忙的情况下执行VI?有标准的方法吗? (我假设应该有,考虑到多任务导向的Labview是什么 - 这不是Matlab标准形式的情况)。

2 个答案:

答案 0 :(得分:1)

你可以:

  • 启动LabVIEW.exe作为进程,将VI指定为参数(搜索帮助)。肯定有一种方法可以告诉Matlab不要等待流程执行结束
  • 使用VI服务器在启动器VI内动态运行VI,并让Matlab调用启动器VI。后者将在调用VI后立即返回,Matlab将不会等待主VI结束。

答案 1 :(得分:1)

我终于找到了答案(感谢NI论坛上的smercurio_fc):

在后台运行VI(不等到完成):
        vi.Run(1);

运行它并等待其执行完成:
        vi.Run(0);

        vi.Run;

在使用 vi.Run(1)的后台执行模式下,可以使用 vi.Abort 中断执行。在执行期间,可以使用vi.SetControlValue和vi.GetControlValue更改输入和输出值。
例如,要在执行期间获取数字控制'z'的值:
        vi.GetControlValue( 'Z')