Search code examples
matlabactivexlabview

How can a Labview VI be run as a background task through an ActiveX call ? (without keeping ActiveX busy)


I would like to execute a Labview VI through ActiveX in Matlab.

I use the following commands:

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

This works correctly and the VI is seen to execute on its front panel. However, Matlab keeps waiting until the VI has terminated. I want Labview to run the VI silently, without telling Matlab (through ActiveX) to wait.

How can a VI be executed without keeping ActiveX busy ? Is there a standard way to do so ? (I assume there should be, given how multitask-oriented Labview is - which is not the case of Matlab in its standard form).


Solution

  • I finally found the answer (thanks to smercurio_fc on the NI forum):

    To run the VI in the background (without waiting until done):
    vi.Run(1);

    To run it and wait until its execution is complete:
    vi.Run(0);
    or
    vi.Run;

    In the background execution mode with vi.Run(1), execution can be interrupted with vi.Abort. During execution, input and output values can be changed with vi.SetControlValue and vi.GetControlValue.
    For instance, to get the value of a numerical control 'z' during execution:
    vi.GetControlValue('z')