Conditionally include Front Panel of a Subvi in an EXE

I want to make two versions of an EXE, one "normal" version and a debug version. I know how to set conditional disable symbols via pre/post build actions (btw. NI: these variables should REALLY be defineable per build specification; even bare command line C compilers are easier to use in that regard than Labview).
The "normal" version won't show anything but the main vi. The front panels shouldn't even be included in the exe. For the debug version I want to show the front panels on request (I've queues for sending that to the subvis). Simply calling "FP.open" does not work with an compiled exe, because I get a "resource not found" error (the front panel of the subvi is not compiled into the exe). I tried setting show "frontpanel when called" which forces the FP to be compiled into the exe, but then the FP will shortly flash on the screen, even when the first command of the subvi is hiding the frontpanel.
How can I make a subvi depending on a conditional disable symbol include its front panel into the exe without forcing it to show its frontpanel at the same time?

There are a number of things which cause LV to keep a FP when building. These include things like open when called (which you understandably don't like), but also various things which statically require the front panel. Things like changing the scrollbar settings or creating a property node for a control on the FP. Personally, my preference is for the latter because you can document it better.
If you don't actually mind whether the FP is included, you can just do that and be done with it. If you really do mind, you can check whether placing the property node for the control in a conditional disable structure has an impact on this or not. I have no idea whether it does or not, since I don't know exactly how LV will treat the code in the disabled case.
The other alternative is making two builds and configuring it for each VI:
The disadvantage here is that you have to manage two builds and do this manually for each VI.
If you want, there's a related idea on the idea exchange, but it won't actually help in your case, because it's not conditional:
http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Add-a-property-to-guarantee-that-the-front-panel-of-a-...
Try to take over the world!

Similar Messages

  • Reference to control on main front panel fails when subvi front panel is closed?

    Hi All,
    I'm experiencing an odd bug. In my code, I use a subvi to control a piece of hardware. This subvi has controls for all of the functions of my hardware.
    I'm changing the value of one of these controls from my main front panel by running a reference to a knob on my main front panel into the subvi, grabbing the value of the knob with a property node, and then updating the value of the subvi control using a signaling property node.
    This works fine when my subvi front panel is open but fails to work at all when the subvi front panel is closed.
    I'm new to labview , so any help is appreciated.
    Thanks,
    Arpan
    Solved!
    Go to Solution.

    What is your LabVIEW version?
    Front panels that are not shown are typically not updated and might not even be loaded into memory.
    The presence of certain code elements (e.g. property nodes) often forces the front panel to be in memory even if it is not shown, but I haven't studied it in a long time so there might be subtleties. Maybe somebody from NI can give more details.
    If it does not work unles the FP is open, open the front panel minimized to avoid distraction.
    Can you attach some code? Maybe there are better ways to do all this anyway.
    LabVIEW Champion . Do more with less code and in less time .

  • Looking for a way to programmatically set the visible portion of the front panel when a subVI opens

    I am looking for a way to programmatically set the visible portion of the front panel when a subVI opens.  Haven't found any posts that relate, but I'm not sure how to ask the right question.  To be clear, I want to write a helper VI to go through a list of subVIs to make sure the background images are all in the same place when their respective subVIs open.  I hate manually playing with scroll bars before I save each of the VIs...  I'm figuring I need to find the top/left location of the background image (know how to do this already) and then set a VI FP property to  these values or some offset, but I can't find the relevant property. FP:run-timeposition:custom looked promissing, but only affects the location of the window, not the area of the front panel the window is displaying.
    Solved!
    Go to Solution.

    Cool.  Getting closer.  The way I implemented your suggestion affects the subVI only if it is open.  I can use this to do what I'm after, perhaps putting the code into each subVI.  Maybe open all subs, run the helper, and save.    Seems like I'm missing the elegant version...
    My proof of concept code:

  • It is possible to open the front panel of a subVI more then one time at the same moment?

    I want to open a subvi´s front panel several times with each one operating independently. The subvi has a ring with several variables to choose to show in a graphic. The subvi is called from a button on the Main Front Panel. It is possible to, for instance, open the subvi and set it to show a temperature graphic and click again on the button to call another instance of the same subvi and select pressure for the graphic, keeping both new windows side by side? Will I still be able to access the Main Front Panel?

    Yes you can. You have to use a .vit (VI template file). There's an example here. There's also been lot's of discussion on the subject. I think if you do a search for vit, you'll be able to find additional information and examples.

  • Hi. I want to build a GUI based on several windows appearing following a certain sequence. How can i create different windows in the same VI? Also, i want the front panel of a subvi to appear when i run, how can i enable this.Thanks

    Having several windows appear ...

    Hi,
    You can't create several windows for one VI. But you can use the "Tab Control" and change tab's in the program. Or you can use sub VI's and show ther front panels.
    To show the front panel of a sub VI you have to open the VI you want to show and select "File->VI Properties". In the VI Properties window select Category "Window Appearance" and click Customize...
    In the Customize Window Appearence window, here you can set a number of attributes for how the window will appear, select "Show front panel when called" and "Close afterwards if originally closed" click OK and OK and save the VI, done.
    Now the VI front panel will appear then you use it as a sub VI.
    /Thomas

  • Printing front panel images of subvis from executables

    I have a top level vi which calls a subvi which has all the plots I want to print in a report.  This works as a vi as I can reference the subvi that I want to print the image of.  When I make it an executable it no longer works, and even if I change the reference to request the image of the toplevel vi, so that there is a clearly viable  (.exe) reference to print, it does not work.  I can use file print window, but this does not give me the report. only the image.  Any advice gratefully received
    Solved!
    Go to Solution.

    We need to see your code to be sure, but I'm guessing you are getting the VI reference using the path to the VI.  Well when an EXE is made the path to the VI will not be the same.  You should use a Static VI reference to get a reference to the VI, and then the location on disk doesn't matter.
    Here is a quick example I did a while ago using replacing VITs in a similar way.
    http://forums.ni.com/t5/LabVIEW/building-an-executable-with-vits-with-Labview-2011/m-p/2384984#M7404...
    Unofficial Forum Rules and Guidelines - Hooovahh - LabVIEW Overlord
    If 10 out of 10 experts in any field say something is bad, you should probably take their opinion seriously.

  • Exporting front panel of subVI to calling VI

    Is there a way to "export" the front panel of a subVI so that it becomes part of the (or a pane of) the calling VI? If so, what is it called? I don't know the right language to search for examples of this concept.
    My problem is as follows:--
    I built a nice, classy interface to a test program that allows the user a great deal of flexibility in controlling the parameters of the device under test and in seeing the impact of those parameters on other parameters. This has about 8-12 control objects, some of which are also wired to act as indicators so that changing one can display on another and vice versa. This interface and its supporting program is big enough that it belongs in its own subVI rather than in the main program. In addition, I built another interface that charts signals from the device under test; this is also big enough that it belongs in its own subVI.
    I would like to have the front panels of both of these VIs be part of the front panel of the main program. That is, the front panel of the main program should "inherit" the front panel of each subVI wholesale. If I need to tweak the interface of one of the subVIs -- for example, to add, delete, or replace controls, indicators, displays, charts, etc. -- I would like to be able to do this without having to wrestle with the main VI and the connector pane between it and the subVI.
    It seems that LabView should be capable of this, but I cannot find any help, guidance, pointers, etc., in the documentation, textbooks, or examples.
    Could someone give me a clue?
    Thanks,
    Hugh Lauer

    So I tried to configure a subpanel, and found it very confusing. It seems that when you put a subpanel control on the front panel, you have to then set up a way to invoke the subVI. Since my subVI has some inputs and outputs on its connector pane, I created a VI reference for it and wired that to the type specifier node of the Open VI Reference node. I then inserted a Call VI by Reference node, so that I could wire up the inputs and outputs of my subVI. Finally, I wired this to the subpanel Invoke Method (Insert VI).
    This is different from the examples I found. In those cases, the subVIs had no inputs or outputs on their connector panes, but rather took all of their information from their front panels.
    I got different behavior on different attempts to run it. The most common (and most recent) behavior is that the subVI front panel opens up a few seconds after the main VI starts, but it is not quite "in" the subpanel. Instead, it is offset about an inch from both the top and left, as if it were a floating window that I cannot move. Also, it has annoying scroll bars on the bottom and right, which I don't want.
    Incidentally, I have two of these subVIs, and I have not yet tried to put the second one into a subpanel.
    What I would really like to do is
    have both subVIs populate their respective subpanels as soon as the main VI starts, but before any work gets done.
    after both subpanels are loaded, run the two subVIs in parallel, one to control the device under test and the other to capture its signals.
    have no scrollbars in the subpanel windows.
    In fact, what would be the best from a GUI point of view is for the two subpanels to be permanently part of the front panel of the main VI.
    Any guidance or insight would be most helpful.
    REgards,
    Hugh

  • How can I display a changing variable in a subvi on the front panel of the main vi as the subvi is excuting

    In the document attached the vi on the right is sub to the vi on the left. On the subvi on the right the variable "Field Reading" is continuously updated on the front panel of the subvi as the "for" loop is executed, but only the last value of the variable is updated on the main vi front panel which is what is expected. My question is how can I display the changing value of "Field Reading" on the main vi front panel as the "for" loop in the subvi is running?
    Thank you.
    Solved!
    Go to Solution.
    Attachments:
    Doc2.docx ‏554 KB

    Hopefully I can explain it well enough. It really is simple.
    1) Create an empty global variable and call it something like User Interface References.vi
    2) For each and every control and indicator on your front panel, right-click and select Create/Reference
    3) Place these references wherever you like (I use a series of Event cases to perform my initialisation and these all live in one of these event cases). They can be placed anywhere in the main vi.
    4) For each of the references, right-click and select Create/Indicator
    5) Moving to the front panel, Cut all the indicators and Paste them in the global variable (eg. User Interface References.vi)
    6) Moving back to the block diagram, wire the global variable to each of the references and select the same named global variable.
    All the hard work is now done (until you add another user interface terminal). You should now have something that look as shown below, [except the reference labels would be to the left (not sure why the snippet put them above)]. In my latest program I have 82 references!
    Done. You can now access all your front panel controls and indicators anywhere in your program as shown below.
    You can just select Value in most cases, but in this particular case I wanted to fire off an Event to do some things (log the alarm) as well as just update the value. So, this is another bonus with the method.
    Hopefully this all makes sense. If not, let me know.

  • How to run a subVI without poping up normally, but when clicking a button, popup the front panel?

    I know pop-up the front panel of a subVi when called by selecting VI Properties>>Windows apperence.
    But what I need to do is: always run the SubVI inside the parent VI as the nornal subVI do without poping up. But when I click a button"show front panel", the SubVI popup the front panel.
    Is there anyway to do this?
    Thanks,

    ossoo,
             You can use a static VI reference to the subVI and then use the Front Panel Open invoke method to show the front panel when you want. I have attached two VIs that show this. I saved these VIs for LabVIEW 2009 so you should be able to open them up and run them in 2009 or later. Add.VI is the subVI that you are calling. The Caller.VI is just a While Loop that contiually calls the Add subVI. Inside of the While Loop is also a Case Structure with a Static VI Reference (you might need to change the path this is pointing to after downloading the VIs to your computer for this to work) and the Front Panel Open invoke method. You can run the Caller.VI and interact with the main Front Panel as normal and see the subVI but then you can click the Open subVI? boolean button and it will open the subVI's front panel. You can continue to interact with the main front panel and see the values update on the subVI's front panel as well. You can just close the subVI's front panel when you are done viewing it. Does this help?
    Grant H.
    National Instruments
    LabVIEW Product Marketing Manager
    Attachments:
    Caller.vi ‏19 KB
    Add.vi ‏23 KB

  • Accessing front panel LEDs in several subVIs

    Hi, I'm new to LabVIEW! Ok, what I'm trying to do is create a front panel with 9 LEDs. Then I have a Menu Ring, with three different options. These options determine the order in which the LEDs are lit. So what I was planning on doing was creating three subVIs, one for each of the options...but how can I do that when I only have one boolean for each LED? So basically how can I relate the LEDs on the front panel into the subVIs? I tried using globals - but it seemed like that just passed on the state of the boolean instead of allowing me to actually change the boolean in the subVI. I hope this makes sense...I'm really confused! Thanks for any help!

    > Hi, I'm new to LabVIEW! Ok, what I'm trying to do is create a front
    > panel with 9 LEDs. Then I have a Menu Ring, with three different
    > options. These options determine the order in which the LEDs are lit.
    > So what I was planning on doing was creating three subVIs, one for
    > each of the options...but how can I do that when I only have one
    > boolean for each LED? So basically how can I relate the LEDs on the
    > front panel into the subVIs? I tried using globals - but it seemed
    > like that just passed on the state of the boolean instead of allowing
    > me to actually change the boolean in the subVI. I hope this makes
    > sense...I'm really confused! Thanks for any help!
    Initially, you might just hook your ring to a case structure to
    determine which frame exe
    cutes. You can put the terminals for the
    Booleans in the different diagrams and about the only other thing to
    keep in mind is that you probably want a delay in the loop.
    Greg McKaskle

  • Publising front panels of not visible subvis on the web

    High
    my main program has tab object with 10 pages. Within the main program there are several subvis whose front panels i want to publish on the web.
    The front panels of these subvis are not visible in the main program.  Front panels of some subvis are displayed correctly in browser (IE, Firefox) but some not.
    Fields of the object are empty or their fields are not refresh with new data (att. pict " array indicators").
    The problem is worse if not visible subvi contains chart object. In the browser window data are moved out of the chart window (att. pict. "chart within...").
    For monitoring front panels of the subvis i use MONITOR mode of the LabVIEW web server.
    Any idea, hints or simple example is welcome.
    Thanks and regards
    Trajan
    Attachments:
    chart within the browser2.jpg ‏16 KB
    three array indicators2.jpg ‏5 KB

    Duplicate post!
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • How to display remote front panels of subvis that are already open

    I inherited an RT project that uses remote front panels for nearly all the user interfaces. The host application opens a remote front panel the the top level RT vi, and there are several subvis on the RT system that are opened from that top level vi and thus displayed on the host (i.e. their "Show Front Panel When Called" properties are set TRUE).
    If the Host loses its connection to the RT system when any subvi front panels are opened, and the host application is restarted, it can re-open the top level vi remote front panel, but all the RT subvis that are already open will not display their front panels. I am looking for a way to open the front panels to these subvis from the host application.
    The kicker is, I need to know which subvis are actually running before I attempt to open remote front panels. Is there any way to determine what subvis are actively running (and not just in memory, such as subvis that won't get executed until the top level vi reaches a certain state)? I am thinking that I could create a list of the subvis that I need access to, check to see if any are actively running on the RT system, and then invoke a remote front panel connection with those that are running.
    Does anyone have any ideas as to how I might be able to do so? Or any other suggestions? [and yes, I know that RFP communication is probably not the best way to go, but we're too entrenched in this software to start over with a new system!]

    TurboPhil wrote:
    If the Host loses its connection to the RT system when any subvi front panels are opened, and the host application is restarted, it can re-open the top level vi remote front panel, but all the RT subvis that are already open will not display their front panels. I am looking for a way to open the front panels to these subvis from the host application.
    It might be possible to work around this behavior by placing VI invoke nodes in your top level VI that reference each of your subvis and setting the Wait Until Done invoke method to false.  This should cause the subvi to close when the top level VI closes even in the case of an unexpected restart.
    You can access this invode node in the functions pallet by selecting Application Control » Invoke Node and also selecting Application Control » Static VI reference.    Wire the Static VI Reference to the vi reference input node and double click the Static VI Reference and select the appropriate subvi in the dialog window.  Left click on the Method section of the invoke node and select Run VI. Finally right click on the Wait Until Done invoke method and select Create Constant and ensure this constant is set to false. 
    TurboPhil wrote:
    The kicker is, I need to know which subvis are actually running before I attempt to open remote front panels. Is there any way to determine what subvis are actively running (and not just in memory, such as subvis that won't get executed until the top level vi reaches a certain state)? I am thinking that I could create a list of the subvis that I need access to, check to see if any are actively running on the RT system, and then invoke a remote front panel connection with those that are running.
    You can access this information by using the Real-Time System Manager (Tools » Real-Time Module » System Manager).  This can be used to show what VIs and subvis are loaded into memory and which are running.
    For more information on using this tool please referere to this Knowledge Base article. 
    Message Edited by BLAQmx on 02-18-2008 11:40 AM
    Mark
    LabVIEW R&D

  • Unerwartetes Erscheinen des Front Panel eines SubVI beim Start der Top-Level-Application

    Beim Starten meiner Top-Level-Application erscheint sofort das Front Panel eines Dialog-SubVI, welches eigentlich über die entsprechende Menüauswahl angewählt werden soll. Das passiert nur, wenn sich das SubVI im Speicher befindet. Das unerwünscht erschienene Front Panel zeigt dabei nicht die normale Fuktionalität, lediglich das Schliessen des Fensters ist möglich. Dabei verschwindet das VI jedoch komplett aus dem Speicher (sowohl Front Panel als auch Block Diagram). Danach lässt sich der Menüpunkt anwählen und der Dialog läuft normal.
    Befindet sich das SubVI beim Start der Top-Level-Application nicht im Speicher, läuft alles normal.

    Es könte sein, dass die Eigenschaften für das Sub-VI auf "Öffnen wenn geladen" oder was ähnliches gesetzt ist.
    Schau nach, ob die ganze "Fenstererscheinungsbild" Eigenschaften wie gewöhnt eingestellt sind. Zu beachten ist auch, dass die Sub-VIs individuell im Block Diagram andere Eigenschaften zugeweisen werden können (Rechtsklick auf der Icon im Block diagram)...
    Ich hoffe, dass ich damit ein wenig helfen könnte
    Shane
    Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2)

  • Can't remove Front Panels in Application Builder

    I have had a few issues using Application Builder (v7.1) in regards to it removing or not removing front panels for my subvi's when I was trying to compile. Here are the conclusions I came to if anyone else runs into the problems I had.
    Problem 1) Some of the front panels were being removed for dynamically loaded VI's, which were not set as dynamic VI's in the Application Builder, but which were static-linked VI's in the program (so they were loaded in memory as linked subvi's but called dynamically). When the Application Builder decided to remove the front panel for those VI's, there was an error when loading them dynamically.
    Problem 2) Some of the front panels were NOT being removed for subvi's that I didn't want to have their front panel built into the compiled program. Loading front panels that are not needed uses extra memory, but there was no way to change the option to not load the front panel for certain particular subvi's in Application Builder--the option was grayed out.
    For problem 1, I decided not to worry about linking the files dynamically in the Application Builder, but to just make sure the Application Builder would include their front panels. For problem 2, I had to figure out what was making Application Builder force the front panels to be included when I deemed it unnecessary, so that I could fix them not to be included. Basically then, going through my VI's that were forcibly included, I came up with a list of stuff I began checking for each time I would run into one where I didn't want to include the front panel. I have attached my list to this post.
    My solution for problem 1 was then to use a customized appearance for my static-linked / dynamically loaded VI's, and disable the menu bar (forces the front panel to be included by Application Builder without changing appearance, since I never actually see the FP). My solution for problem 2 was often to remove property nodes referencing text on the front panel controls. Sometimes I was able to perform a numeric->text or enum->text conversion instead of referencing the text of the control itself, and sometimes I realized I didn't want anything to change and that it was ok to include the front panel so I could (for example) get a list of strings for my enum control.
    I have attached the reference list I came up with of things to check for to make sure your VI properties are set correctly if you are trying to get Application Builder NOT to include the front panel of your subvi. The list might not be complete, but it's helped me to narrow down things very quickly and find the problems I was having.
    Attachments:
    ThingsToCheck.doc ‏61 KB

    m3nth wrote:
    Problem 1) Some of the front panels were being removed for dynamically loaded VI's, which were not set as dynamic VI's in the Application Builder, but which were static-linked VI's in the program (so they were loaded in memory as linked subvi's but called dynamically). When the Application Builder decided to remove the front panel for those VI's, there was an error when loading them dynamically.
    This is expected behaviour. The application has no way of knowing that these VIs will at some time be called dynamically. That would require analysing and understanding the entire program and in cases where you calculate the dynamic VI to be called at runtime it still wouldn't be feasable to do so.
    m3nth wrote:
    Problem 2) Some of the front panels were NOT being removed for subvi's that I didn't want to have their front panel built into the compiled program. Loading front panels that are not needed uses extra memory, but there was no way to change the option to not load the front panel for certain particular subvi's in Application Builder--the option was grayed out.
    There are several reasons why a front panel is needed. One of them is when the VI is called dynamically, even if the FP is never displayed and AppBuilder will account for that for VIs which have been added as dynamic VI to the project.
    The other is when a VI uses some Property Nodes or Attribute Nodes as they are called now.
    So to solve your problem 1) you could also just drop some property node in the diagram of such VIs and be done with it.
    Rolf Kalbermatter
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Print front panel

    I have been going through messages for a while but just can't seem to find exactly what I'm looking for. I need to print a waveform chart that has two plots that update at about 10Hz. Simple enough, right? Problem is that the report vi's have no way I can see to easily enlarge the image. I tried putting a larger chart in a sub vi that prints after executing but the chart only get part of the data when I run it. Then I tried the invoke get image method but can't find an indicator for the image data. Is there a way to print an enlarged waveform chart image? It would be even better if I can just print a front panel of a subvi with the same data on the waveform chart that appears on my top-level VI.
    PaulG.
    "I enjoy talking to you. Your mind appeals to me. It resembles my own mind except that you happen to be insane." -- George Orwell

    What I have done in these situations is to have a graphs that is sized to printout the size that I want. I then update the graph from the program data, grab an image of the graph using the Get Image method, and save the image as a jpeg file. I can then either printhout this file or include it in a standard report.
    OR you can use Draw Flattened Pixmap.vi to turn it into a form that will go into a picture indicator
    OR you can create a VI with the graph on its front panel that is set to print itself when it finishes executing - or which you print programatically
    Mike...
    Certified Professional Instructor
    Certified LabVIEW Architect
    LabVIEW Champion
    "... after all, He's not a tame lion..."
    Be thinking ahead and mark your dance card for NI Week 2015 now: TS 6139 - Object Oriented First Steps

Maybe you are looking for

  • I have two apple ids. How do I get all my itunes to one account?

    I have two apple ID's. Most of my iTunes music was purchased using ID #1 and resides on my MAC. The MAC runs an OS so old that I cannot upgrade to the current version of iTunes. about 1/4 of my music was purchased using ID#2 (the current one) and res

  • CS6 Photoshop Wacom Tablet Help!

    Obviously heading an IT department, I know I am not a graphics designer nor would I ever claim to know enough to be even dangerous. We are finalizing a monster PC build with all the bessl and whistles for our Marketing Director who lives by Adobe Cre

  • Trouble with saveAS

    I am having a problem with a javascript function. <br /><br />I can save as a Tiff with no problem - <br />but now I would like to have another option that allows my users to save data as a PDF file. <br /><br />I can't seem to get it to work for a P

  • Why Does Apple TV In Taiwan Only Have 100 Movies?

    I bought the Apple TV box last weekend and here in Taiwan there are only about 100-125 movies. Willl Taiwan get more movies and if so then when might this be please? Thanks Scott/Taiwan

  • Exporting file in full quality

    I heard a few years ago that when importing video to iMovie, it automatically compresses it in some way. Is this the case? I want to make sure that whatever footage I import into iMovie via firewire remains the same quality as the source video. Then,