P.S. - Check out past nuggets here.
Message Edited by Darren on 06-19-2006 12:38 PM
I used the sequence structure simply to illustrate exactly which portion of the original code could be replaced with the Call Setup feature. As for sequence structures, I completely avoid Stacked Sequence Structures, but I find the Flat Sequence Structure quite useful in an Initialize/Handle Events/Clean Up VI, where there might be local variables or other objects in my code that don't lend themselves well to data flow.
I don't have LV8 - but there may be a good reason to upgrade hiding in your example. In LV7.1, the VI type-specifier has to be updated by browsing to the VI template when there's a connector-pane change. Is there a similar procedure in LV8 - or has requirement dissappeared along with the VI type-specifier?
Have you noticed the new "Call Setup..." menu option when right-clicking subVIs in LabVIEW 8.0? It's a really handy way to clean up your diagrams, and improve the load times of your VIs:
When using the Call Setup feature, you no longer have to worry about connector pane changes. However, if you are using the normal Open/Call By Ref/Close approach, there was no change in LabVIEW 8 regarding connector pane updates...you still have to do them manually.
I'm having trouble with "Call Setup..." "Reload for each call" not actually letting go of memory. The simplest way to state my problem is with reference to Darren's nugget example. The way that it is working for me, "Dynamically_Called_VI.vi" would actually leave memory for the LV 7.x example; however, for the example marked LV 8.0, it does not leave memory.
In my case, it is not a small deal.
Load with Callers = 1.1 GB at the end of the run
Reload for each call = 940 MB at the end of the run
The "LV 7.x" way = 94 MB at the end of the run
where the amount of memory is as seen in the process list of task manager. I'm running LabVIEW 8.5.1 on Vista.
I tried the "reload for each call" method with the profiler running, and when I take a snapshot after the program is done running (and everything should therefore be gone out of memory) I still have a huge list of VIs present in memory. For the "LV 7.x" method everything that should be gone is gone.
By the way, I have stuck a "Request Deallocation" function wired True in each of my dynamically-called VIs.
In short, "reload for each call" does not work as advertized for me--it seems to behave more like you would expect for "load and retain on first call".
I have I found a bug or is this one regard that the two methods are functionally different?
Hello Darren, i have a major problem with the call setup.
You mentioned that there are no more problems when the connector pane changes, well i couldn't figure that one out.
I have a large Application where i use a lot of the call setups when i made some chenges in the connector pattern i never get an error message.
When i build the exe file there is no error message coming up during the build process, it only comes up when the programm reaches the call and the error message only says :
Error 1031 occurred at Call By Reference Node in Untitled 1
LabVIEW: VI Reference type does not match VI connector pane.
With this kind of error message i can't even find out which Vi the error caused,
so i have to check each call setup in the VI.
This is even worse then in the old style, because if you had an error there you also saw which VI it caused.
So what possibility is there to make a general test of all VIs loaded with a call setup?
It seems to me that with the call setup the connector pane is picked once when you create a call setup from the normal vi,
and it only updates the connector pane when you do again your right click and set the call setup again.
why does it not normaly update the actual connector pane??? :mansurprised:
I also didn't understand that in the LV 7.x Version. because there was the same problem with the conector pane.
Why isnt there a possibility to auto update the connnector pane????