Does "Run VI" invoke node work on strict references to REENTRANT VIs?

I am using LV 6.02 on Windows 2000.
I am trying to use the "Run VI" invoke node method with a reference to a Reentrant VI, with no success. (It works when VI is not reentrant. Perhaps there is a reason this cannot work. But if not, I wonder if there is a workaround, or if LabVIEW 6.1 has a fix?
Hopefully the picture of the block diagram I included is sufficient...but I also included the actual code just in case.
Thanks!
Steve
Attachments:
block_diagram.jpg ‏66 KB
Parent_VI_Example.vi ‏43 KB
Prototype_subVI_shell_for_Simplex_Fit.vi ‏40 KB

Hi, Labviewguru,
Thanks for taking the time to look at my admittedly messy (flawed) block diagram. I will try to state my ultimate goal:
You may be familiar with Levinberg-Marquardt nonlinear curve fit in Labview, which is about 5 VIs in a LLB file. In order to change the type of curve fitting, one has to either modify a formula node in the lowest subVI (Target Func and Deriv), or place a different subVI in there. That's fine until I want to have many different sorts of algorithms.
What I was thinking of doing is instead passing Target Func and Deriv a reference to the VI which would perform the calculations. This would allow me to use the same fitting code to fit different types of data with substantially different methods--without modifyin
g the low-level fitting code at all.
I'm not sure this is going to make any sense to you, but thanks again for your help.
In regards to your answer above, let me clarify somewhat. I had the call by reference node in there to prove that the reference to the VI was "good" and worked fine...this same reference was passed to the invoke node, which didn't have any apparent effect.
Also, I don't think the path to the VI I am opening the reference to is redundant. It is required to tell the "Open VI reference" which VI to load.
I agree that using references to pass values around is not generally a good idea: I was using that method for my supposed versatility in the future.
Thanks,
Steve

Similar Messages

  • LabVIEW Applicatio​n throws Error in Run VI Invoke node

    Hi All,
    We are facing an issue with an application developed from LabVIEW 2010SP1.
    Application Description:
    In our application, there is a top level VI which tries to run VIs dynamically[using Run VI invoke node] from a particular folder. This folder is like a plugin - not part of Exe. This implies when the top level VI is launched, the plugin VIs under particular folder will not be in memory. When we try to run a VI dynamically from the  top level VI, the VI execution works perfectly in LabVIEW development mode.
    Problem Faced:
    When we created an EXE, it worked well in my PC [LabVIEW is installed]. We created an installer and tested in few other PCs.
    [Non LabVIEW PCs – Win XP and 7]. In few PCs it throws the following error, when the plugin VI is run dynamically.
    Error 1003 occurred at Invoke Node 
    Possible reason(s):
    LabVIEW:  The VI is not executable. Most likely the VI is broken or one of its subVIs cannot be located. Select File>>Open to open the VI and then verify that you are able to run it.
    Method Name: Run VI
    We tried the following possible ways to find the reason for the issue:
    1. Installed LabVIEW - Issue got fixed.
    2. Installed .net 2.0 without installing LabVIEW - Issue got fixed.
    3. But in one of the Windows 7 [Non - LabVIEW PC] in which .net was already installed, we faced the same error.
       Only after installing LabVIEW the error got fixed.
    4. When .net 2.0 is uninstalled the EXE itself is broken.
    We are not sure what is the Exact reason fo the issue. Anyone faced these kind of issues? Please share the solution. Thanks in advance.
    Note:
    1. The VIs which are dynamically called is a plugin and not a part of EXE.
    2. These plugin VIs have no dependencies from vi library and is completely isolated.
    3. We are not using any .net related objects in any of the VIs.
    4. The plugin VIs use Call library function node in which a C DLL developed from Microsoft Visual Studio 2010 is used.
    Thanks,
    Meena
    Solved!
    Go to Solution.

    Error 1003: This clearly indicates that the 'Dynamic VI' is broken and now you should check for the various reasons, why the 'Dynamic VI' is broken.
    Also path of 'Dynamic VI' is not a problem.
    One thing that you may try is:
    -> First open just the 'Dynamic VI' in a new LabVIEW project and check for the 'Dependencies'.
    -> Now if any of the item in 'Dependencies', other than what is listed in vi.lib (lets call it 'Dependency.VI'), is also a part of your 'Main Exe', then its a problem. Because when you will execute the 'Main Exe', say in a new computer other than your development computer, it will load all its dependencies including 'Dependency.VI' (and the path will be within the 'Main Exe', but when it will try to (dynamically) load the 'Dynamic VI', this VI will also try to load the same 'Dependency.VI' but from different path and that will cause a conflict. I had experienced this.
    -> If thats the issue, you may want to rename (add suffix/prefix) to all dependencies of your 'Dynamic VI' which is common to the 'Main Exe'.
    Hope this solves your issue.
    I am not allergic to Kudos, in fact I love Kudos.
     Make your LabVIEW experience more CONVENIENT.

  • Run VI Invoke Node: VI works, EXE doesn't?

    This is LV2009 with no patches or updates. I am calling buffer.vi by static reference with an invoke node set to Run VI. I don't have an incredibly good reason for doing this, but just don't want that code on the block diagram. I hate to put alot of effort into this since I can just drop the code on the main diagram and I'm sure it will work, but I don't understand why it gives me the error 1000: VI not in a state compatible with this operation?
    In the EXE, when I check the execution state of the buffer.vi before I tell it to run, it comes up bad. Same code in the VI, comes up idle. I also tried replacing the static VI reference with an open VI reference using the name of the buffer and received the same error. I have the buffer VI included in the build under always included.
    Solved!
    Go to Solution.

    "You did not compile the vi to be in the EXE, did you?"
    I'm not sure what you mean. I have included buffer.vi and all of its sub VIs in the build as Always Included. I am investigating creating a source distribution. Never done that before. I will let you know if it works.
    I attached snippets of the caller and buffer.vi itself. I was playing around with the caller, trying to abort if running and such...
    Edit: Sorry if its confusing, what I'm calling buffer.vi is actually Waveform FIFO AE.vi
    Message Edited by deskpilot on 04-08-2010 09:04 AM
    Attachments:
    Remote Call.png ‏34 KB
    Buffer.png ‏42 KB

  • Multiple VI instance will not RUN using invoke node

    Hi,
    I need to have multiple instances of the same VI running.
    I've created a template of the VI i wan't to call multiple times.
    The VI is called via Open VI reference with a reference to the VI template.
    Parameters to the instance is passed via set control value.
    When opened and parameters has been passed, I use a invoke node to run the VI.
    An error occur.
    "Error 1000 occurred at Invoke Node in Template_Call plot window.vi
    Possible reason(s):
    LabVIEW:  The VI is not in a state compatible with this operation.
    Method Name: Run VI
    VI Path: NULL"
    Note ! The VIs should stay open after the call running independently of each other and the caller should not be waiting until the VI stops.
    Any ideas what I am doing wrong
    Regards Kahr
    Certified LabVIEW Architect
    CIM A/S
    Solved!
    Go to Solution.
    Attachments:
    Call_Plot Window.png ‏31 KB
    Template_Plot window.png ‏23 KB

    As simple as that Kumar !
    Thank You all
    Regards Kahr
    Certified LabVIEW Architect
    CIM A/S

  • Error 15 at "Run VI" Invoke Node When Building a LabVIEW Executable

    I am trying to run a vi by using the "run VI" method of the invoke node. The source code works perfect. However, I cannot run the vi when I use the executable version. Specifically, I get the Error code 15 at the "error out" output of the invoke node while using the executable version. Why is this occuring?
    Thanks

    Hello ameng,
    This behavior is typically the result of trying to call VI that has had its front panel removed. The KnowledgeBase linked below has more information on this issue.
    Error 1 or 15 Opening Dynamic VI from LabVIEW Application
    Please let me know if you have any other questions about this issue.
    Regards,
    Matt F
    Keep up to date on the latest PXI news at twitter.com/pxi

  • VI loaded with either Invoke Node or Call by Reference only functions properly when it is already open

    I have modified the Dynamic Loading example so that my case for the first button loads three VIs in succession, rather than one.  The first VI generates a waveform, the second uses this waveform to calibrate the measurement, and the last VI stops the waveform generation.  I discovered that the middle Calibrate.vi would only function properly if the Calibrate.vi was already open.  I attempted the VI loading of the Calibrate.vi with both the Call by Reference (identical to the example) and the Invoke Node method.  In both cases, the first and last VIs (Multitone Gen.vi and Stop Gen.vi) functioned properly, but the Calibrate.vi only worked correctly when it was already open.
    I have tried resetting the NI USB DAQ device and that hasn't helped.
    My search for answers has come up empty and I am hoping that someone in the forum might be of assistance.  I have attached a snapshot of each version of my code, both built off of the Dynamic Loading example.
    Thanks!!
    Attachments:
    Call by Reference.png ‏19 KB
    Invoked Node.png ‏21 KB

    Hello Anjelica,
    I do not receive any error messages when the middle VI is loaded and run.
    The Calibrate.vi acquires three separate corrections (Open, Short, Load), averaging results from a  number (N) of measurements, determined by the user.  When the VI is loaded and run correctly, information describing the multitone waveform generated by the first VI is first acquired.  Then the user selects each correction individually.  The corrections are made and averaged after N corrections, taking approximately 10 seconds per N.
    When the Calibrate.vi is malfunctioning, the multitone waveform information is not loaded and when a correction is selected, the indicator displaying the number of measurements performed (n of N where n = 0 to N) instantaneously displays N of N.  The correction measurements are not performed.  I have even tried using the Front Panelpen method and then running the middle VI and this results in the same malfunction unless the Calibrate.vi is already open.
    Though it is an obvious workaround, I can live with opening the Calibrate.vi via the Open VI Reference method outside of the while loop. This will be my solution for now.
    Thank you for your response.
    Attachments:
    Open Outside Loop.png ‏23 KB

  • TS Sequence Context and Invoke Node problems

    I have a Vi that was developed in 7.1 and TS 3.1.  I inherited this design from a past developer.  The Invoke node works fine when loaded with LV 7.1 but not when I load the Vi with LV 8.2.1.  I have gone through everything I can think of to correct the problem.  Help would be appreciated. [email protected]  (contact address to let me know you posted or you can do it directly.  Thanks in advance.
    Attachments:
    TestStand - Dist LabVIEW Test - Sequence Context.ctl ‏6 KB
    TestStand - Get Property Value (Number).vi ‏42 KB

    I just loaded this vi in 7.1, 8.2 and 8.5 and it works just fine for me. Although my TS version is 4.0. Can you expalin what you mean by it doe not work in 8.2. Does it load correctly? Have you reinstalled teststand into LV 8.2 so that you can open the TS pallette in LV 8.2? Are you running this inside of a sequence and passing the sequence context to it. It will not run correctly if a sequnce context is not passed to it from TS.
    Also you should post this in the teststand forum and not the LV forum
    Joe.
    "NOTHING IS EVER EASY"

  • Frontpanel opened by Invoke Node blocks other FP

    Hello,
    In a project I am working on I would like to open and close a frontpanel displaying a few plots from a different VI. I have managed to create the Visualisation VI and am passing references to the Indicators and the VI itself on to the next block. I can open the FP by using an Invoke Node on the VI ref, but then I can only interact with the newly opened VI. To get back I have to close it by hitting X, I would prefer it if I could just have it running in the background or minimized once I click on my "main" Vi again. I have attached the required VIs.
    Solved!
    Go to Solution.
    Attachments:
    FP_Open_plots.zip ‏63 KB

    Hi,
    I can't see your code as I haven't upgraded to 2014 yet (shame on me ). Here is a Main VI that opens a Graph VI in two ways:
    1. Without running it, just by FP.Open. The main VI remains responsive. This is not really recommended but I think it was what you meant to do.
    2. (enable disabled diagram): by running the VI using the Run VI invoke node. In this way the Graph VI is called dynamically and the Main VI doesn't wait until it's done to continue.
    Good luck,
    Danielle
    "Wisdom comes from experience. Experience is often a result of lack of wisdom.”
    ― Terry Pratchett
    Attachments:
    Main VI.vi ‏11 KB
    Graph VI.vi ‏33 KB

  • Method Not Found Invoke Node error 1316 using Solid Works IEdm

    Hi Forum members,
    I have been having a problem with calling a function in a dll file.  I have attached the VI as example.  When I use the GetFile method I get a reference to that.  I then use the Invoke node and recieve a list of methods, the first of which is ChangeState.  I select this method and wire all required inputs and when I run the program I receive the error at that invoke node that the method does not exist.  How is this possible?  I have tried various methods to ensure the inputs are all correct and none have worked.  I do not believe the fault lies in the inputs, but I cannot for the life of me find the problem...  Perhaps someone has experience using Solid Works in Labview?  Any help would be appreciated.!!
    Cheers
    Ben
    Attachments:
    SetFileSatus.vi ‏18 KB

    I have determined that there is a problem with the Invoke node not recognising the function.  This is a Labview problem as the function is listed and selectable, so when the error comes saying the function is not found, this is a problem with Labview and not the dll.  The Function when selected also has the right input parameters that automatically appear.  How is it then that the method is not found when the program is run?

  • Invoke node (parallely working VIs in a library)

    Hello everyone,
    I am trying to evaluate a temperature sensor.To do that I have to monitor thermocouple readings.Thermocouple is connected to FP-TC-120 temperature module. Besides, I have to acquire data from an optical spectrum analyzer. I am using 3650.VI to monitor the temperature and 86140B Trace_Screen Capture(2).llb o trace the data from the OSA.
    I am trying to use Invoke Node VI to trace data from spectrum analyzer. To do that I specified the necessary file path as an input to the code. The problem is the necessary VI (Write Trace to File.VI) is inside of a llb. file and needs other codes to completely function.
    That's when I run the code, (and when the stability condition is met) the computer asks me to save the spectrum analyzer data to a file called trace.csv. When I press ok, it just saves an empty file with a header (Power(dbm) Wavelength (nm)). Apparently it works parallely with other VI. How can I make use of the VIs inside of a .llb file with invoke node VI or should I use other VI to do combine temperature monitor VI with data tracing VI.
    The second problem is with the stability criterion of temperature.In the attached VI, I check whether the thermocouple reading stays within 0.8 degree stability range for 900 seconds. I want to change this. I
    want to check the stability of the temperature by comparing the final data with the previous ones. Is there any specific VI that should be exploited to check the fluctuations of waveforms?
     Thanks a lot
    Solved!
    Go to Solution.
    Attachments:
    3650.vi ‏107 KB
    86140B Trace_Screen Capture(2).llb ‏143 KB

    deniz wrote:
    I tried to implement the first method you suggested. But i had trouble since I am just a beginner. Could you please be more specific in explaining the solution? I am stating the problem again. Once the stability criterion is met I want the case structure to execute on the increments of 30 second or so. How can I do that by using shift registers? I tried to do  what you suggested as in the code attached but it did not work. (I could not make the case structure dependent on two conditions)
    I understood what you wanted perfectly fine. You just didn't implement it correctly. See attached. Please revisit my comment regarding the Write To Spreadsheet File that already exists inside of the "Trace Xfer" VI.
    The other proplem is again about timing. The while loop execute only if the temperature value changes since it is dependent on FP Open sub VI.
    The while loop has no dependence on the FP Open VI other than waiting for the error cluster and Fieldpoint refnum. There is no dependence on the while loop executing only if the temperature value changes. The while loop continuously acquires data, so I do not understand your statement. 
    Thus, the elapsed time VIs that are inside of the loop does not progress at 1 second increments. Is there any way to set an elapsed time  that is independent of timestamp of thermocouple reading device? 
    They can't and won't. The Elapsed Time VIs simply tell you ... elapsed time. They have no bearing on how fast the loop runs. It seems as if you have contradictory requirements. Do you want to the loop to run once a second and record, or run at the advise rate and only do something once a second, or run at the advise rate and only do something if the temperature changes?
    Attachments:
    3650.vi ‏116 KB

  • Does the error of the error cluster appear at invoke node?

    I use a "Open VI Reference" with "Invoke Node: Run VI and Wait until Done= True" if the VI run and have an error. Does the error return to the caller/server?

    No, you will need to use a CallByReference node to run the VI and then you can see the error cluster (if it is wired in the called VI's connector pane). Another option is to use the "Get Control Value" VI Server Method on the VI, to return the "error out" cluster of the called VI after the Run method is completed.
    -Jim

  • How does RAC determine which instance number to run on which node

    Good afternoon
    I am trying to script a process and I need to identify how RAC decides which node runs which instance. Is it the first one of the pair added to the cluster that runs node 1 or is there some other piece of information that I need to work this out
    This is on Redhat Linux with 10.2.0.3 for CRS, ASM and databases
    Cheers
    Peter

    Before "you" start an instance you set env variable ORACLE_SID. This identifies an instance. When you go into sqlplus and issue STARTUP, Oracle starts the instance named by the sid. Thus the instance running on the server is controlled by you. This changes as noted below.
    If you were using a non-Oracle tool to start instances, such as Veritas, then you would see it start the instance you coded into the tool. It would not randomly pick an instance. It looks in the Veritas config file and sees that you always want instance 1 on this node and instance 2 on that node.
    That said, you can make Oracle more random or "grid" like. 10g RAC done Oracle's way likes to bounce around between primary and secondary nodes. To see which instances are running on a node you can "ps -ef | grep pmon". Alternatively, use sqlplus to look in the database: view gv$instance gives you each instance name paired with the name of the host it is currently running on. There is one line of output per instance currently running.
    -Mark

  • I just bought a 13" macbook pro retina display. I need to run films and presentations remotely. Does RemoteHD work on a machine without an IR sensor, or does anybody know what would work?

    I have a mid 2009 Macbook Pro and I have just bought a 13" macbook pro retina display. I need to run films and presentations remotely., i.e not sitting at the computer.
    Does RemoteHD work on a machine without a built in IR sensor, or does anybody know what would work?

    I can't vouch for this as I've never tried one, but I think this does what you're after.
    http://www.satechi.net/index.php/bluetooth/bluetooth-remote/satechi-bluetooth-sm art-pointer

  • Is it better to use Invoke nodes or property nodes to set/get control values?

    I have a series of VI's that run in parallel, each to manage different functions- pumping, sensing, a fluid flow model, an experiment generator/runner.
    These need to exchange data, which I am currently doing using invoke nodes (that are all in subVIs), using methods "Set control value" and "Get control value". I find that every now and then (perhaps 1% of the time) the data isn't exchanged correctly and therefore the system doesn't work. I can imagine how "set" could go wrong if they happen simultaneously, and can devise ways of preventing this. However, the "Get" method suffers from the same problem. This is a major problem, because I want to leave it running for several hours.
    I could in
    principle achieve the same thing using property nodes and find myself wondering if this might be more reliable. But I don't want to change over only to find it makes no difference!
    Can anyone advise?

    You can use some kind of syncronization such as queues, occurances, or notifiers but I think the easiest way would be to create and action engine. This was only one action can execute at a time avoiding a "race condition". Possibly a write action and a read action might help. You also can add queues or notifiers into this concept. hope this helps.
    BJD1613
    Lead Test Tools Development Engineer
    Philips Respironics
    Certified LV Architect / Instructor

  • Error when executing VI with "Invoke Node" in loop

    Hello,
    please check if this is possible what i am doing here or if there is a better way to do it.
    The goal is to have a VI that i can start in TestStand which is then running in a loop until i set a global variable.
    I do this currently with:
    1.) Starting the VI with "Invoke Node" (see screenshot 01)
    2.)  This Vi is then running all the time in a loop until the global for exiting is True (screenshot 02)
    3.) Then i have another VO to set the Quit-variable to true
    Normally this works as it should, but sometimes i get the error-message:
    Invoke Node in NameOfTheViCalledInTestStand.vi
    Method Name: Run VI
    VI Path: NameOfTheViThatContainsTheInvokeNode.vi
    LabVIEW:  Das VI befindet sich in einem für  diese Operation unzulässigen Zustand.
     The question is: what does this error mean and what better ways are there to do what i want to.
    Perhaps for better understanding, the VI which runs in a loop executes dll-functions to enable and disable an ample-tower to make a light blinking.
    And because there is no function "blink", i have to make it on off on off on off....
    So the vi loops and makes on off until i say "quit" then blinking stops.
    Thanks for any ideas
    Attachments:
    01_InvokeNode.jpg ‏8 KB
    02_ViRunsInLoop.jpg ‏23 KB

    I cant´t do this "Try changing the "Run" node
    to "Wait Until Done" = True." because then the TestStand-Step is
    hanging until the loop is finished.
    I only want to start the "blinking" and the continue normally in the sequence.
    To
    avoid that the vi with the "Invoke Node" is started twice a have a vi
    above it whick checks with the globalVariable "IsCurrentlyBlinking" if
    the start is allowed.
    If  IsCurrentlyBlinking= True then nothing happens.
    So normally it can´t happen  that it starts twice. Only if the GlobalVariables are not correct.
    The
    variable "IsCurrentlyBlinking"is set to TRUE in the subvi before the
    loop starts and after the loop is finished its set to FALSE in the
    subvi.
    Attachments:
    03_CheckStart.jpg ‏16 KB

Maybe you are looking for