<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Community Nugget  Series: Application Development: Installment 2- The GUI and FP object encapsulation in LabVIEW</title>
    <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1527758#M568614</link>
    <description>&lt;P&gt;Felix,&lt;/P&gt;
&lt;P&gt;Thanks for sharing! Your code is quite similar to the Example I'm going to post here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Modular and re-usable code has tremendous advantages for both development and debugging!&amp;nbsp; Keeping on fwith Felix's train of thought&amp;nbsp; I'll present the following code excerpt from the ATS Project.&amp;nbsp; In the Zip File you should find "User Data.vi"&amp;nbsp; Looking at the VI Hierarchy&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40412iD81D4138D568CAA8/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="User Data.PNG" title="User Data.PNG" align="middle" /&gt;: &lt;/P&gt;
&lt;P&gt;We see that this short snip of the ATS project contains 3 example modules that operate on different front panel objects.&lt;/P&gt;
&lt;P&gt;Status.vi Drivers both the Test Status and Operator instructions.&amp;nbsp; One place it is called in the project is from "Show Hide Controls.vi"&amp;nbsp; Since we want to hide certain controls when a test is executing. Finally, User Data.vi maintains Log-in names, passwords and permits.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To remind us all the Main vi FP now looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40416i7DCEF9B6FED03701/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="FP REVb.PNG" title="FP REVb.PNG" align="middle" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Again I have some decorations for Layout assistance that will be removed later.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;User data.vi&amp;nbsp; Also needs a Config file to maintain user information.&amp;nbsp; For demonstration the file path is a block diagram constant you may need to change to evaluate the code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By using the VI server references to the GUI FP objects I have a scalable solution to expose the test status throughout the ATS project.&amp;nbsp; Decisions on "What to show the user" can be made at the appropriate level by the best "Business unit" to make the code very readable.&amp;nbsp; Maintainability is improved as well! Suppose requirements changed to require password encryption.&amp;nbsp; We have 1 piece of code to modify.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 18 Apr 2011 14:11:38 GMT</pubDate>
    <dc:creator>JÞB</dc:creator>
    <dc:date>2011-04-18T14:11:38Z</dc:date>
    <item>
      <title>Community Nugget  Series: Application Development: Installment 2- The GUI and FP object encapsulation</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1524638#M568044</link>
      <description>&lt;P&gt;Community Nugget&amp;nbsp; Series: Application Development: Installment 1 can be &lt;A rel="nofollow" href="Community Nugget  Series: Application Development: Installment 2" target="_blank"&gt;found Here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Welcome back!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In Installment 1 of this nugget series I laid out a Model and and Architecture that I will use to develop an Automated Test System application.&amp;nbsp; Today I will discuss some key considerations for the GUI or Corporate Communications Unit of the Test System Model:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All GUIs have some design targets.&amp;nbsp; As a rule they should:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Be Responsive to user actions&lt;/LI&gt;
&lt;LI&gt;Be Visually appealing&lt;/LI&gt;
&lt;LI&gt;Group objects to present data in logical arrangement&lt;/LI&gt;
&lt;LI&gt;Objects should have a clear and intuitive purpose&lt;/LI&gt;
&lt;LI&gt;Provide amplifying instruction to the user&lt;/LI&gt;
&lt;LI&gt;Provide users with system state information&lt;/LI&gt;
&lt;LI&gt;Prevent irresponsible / illogical usage &lt;/LI&gt;
&lt;LI&gt;Present a Familiar feel for similar application models (Leverage re-usable code components)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;It would take months to fully delve into best practices and ideas for GUI construction.&amp;nbsp; I recommend visiting the &lt;A rel="nofollow" href="https://decibel.ni.com/content/groups/ui" target="_blank"&gt;UI Interest Group Community&lt;/A&gt; pages for some excellent discussion on the HOWs of GUIs and many good ideas on the subject.&amp;nbsp; Today, I want to focus on the ATS challenges to provide a responsive front panel while remaining informed by the rest of the system.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The ATS application Corporate Communications Unit is going to receive requests to take actions from a user and from other business units at times that cannot be pre-determined.&amp;nbsp; From the Model Diagram we know it is not going to do much about theses requests other than to hand off most of the time consuming tasks to the Executive unit and wait for the next request.&amp;nbsp; In our "Business model" this make sense.&amp;nbsp; A customer walks in the door and asks the receptionist to "Test a Widget" for them.&amp;nbsp; Bad practice would be for the Receptionist to go to the production floor, Test the widget, File a report, update the database and wait for the customer to review the data (if they are still there- I'd walk out!)&amp;nbsp; A better practice would be for the Receptionist to let management know about the customer's request, show the customer test progress and see if there is anything else the customer needs while they are there.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A quick look through the LabVIEW VI templates shows a "Producer/Consumer Design Pattern (Events)" template that most closely matches our model of the data exchange betweenCorporate Communications and the Executive department &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Time to look at the ATS implementation:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40224iE3093F530BBA2B8C/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="GUI A FP.PNG" title="GUI A FP.PNG" align="middle" /&gt;&lt;/P&gt;
&lt;P&gt;For development purpose I have added some decorations to set off FP boundaries and help ogranize BD Layout.&amp;nbsp; The Top is a banner section that provides application information:&amp;nbsp; (A coprorate Logo is hidden in the Pict Ring showing my CLD logo) and, not all functionality is shown or even available yet (We'll add some in a bit!) But the VI RUNS!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The BD looks like this in Rev A.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40222i73271560BF1EA0F2/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="GUI A.PNG" title="GUI A.PNG" align="middle" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As you can see the BD does some initialization, Enters an event loop that enqueues notifications to the Executive and performs some clean-up after the user chooses to exit.&amp;nbsp; Additionally, a second loop is spawned to synchronize the display of the Breakpoint array and the Table so when the Table scrolls up or down the Breakpoint array moves as well.&amp;nbsp; (Note: This COULD be done in the event loop With an index value change test but scrollbars generate lots of index value changes, the user won't notice the 150mSec delay on the breakpoints following the data)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Most of the GUIs functions a encapsulated in sub-vi's&amp;nbsp; that perform generic actions.&amp;nbsp; Most developers have a library of "re-use" components that can be dropped as needed on a block diagram.&amp;nbsp; Some "Come in handy" and some are "indispensable."&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let's take a look a three of these I use &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To Be Continued.....&lt;/P&gt;</description>
      <pubDate>Thu, 14 Apr 2011 16:29:51 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1524638#M568044</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-14T16:29:51Z</dc:date>
    </item>
    <item>
      <title>Re: Community Nugget  Series: Application Development: Installment 2- The GUI and FP object encapsulation</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1524746#M568063</link>
      <description>&lt;P&gt;First Delay.vi:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://decibel.ni.com/content/docs/DOC-13048" target="_self" rel="nofollow"&gt;Available Here&lt;/A&gt; : Just a common Wait with error handeling utility.&amp;nbsp; But it points out that a LOT of example code exists on the NI website.&amp;nbsp; Don't overlook the wheels that have already been invented!&amp;nbsp; I use this vi FREQUENTLY.&amp;nbsp; I know how it operates and I don't have to worry about coding any bugs re-writing the functionallity of the vi.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next: The absolute first function I call on the BD of large projects.&amp;nbsp; Close Modals FPs.vi.&amp;nbsp; This has absolutely no function in the application! It fall into the catagory of utilities that aid development.&amp;nbsp; Most larger applications contain some modal dialog vis and and, as I develope I find that I might have upwards of 50 LabVIEW windows open at any one time.&amp;nbsp; If one of them is a dialog hitting RUN on any main.vi puts the modal FP on top of everything else in the app instance.&amp;nbsp; It's happened often enough that I wrote this to prevent me from needing to Crash LabVIEW and loose changes I have reciently made.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Third: a nice Action Engine that was developed from example code&lt;A href="http://digital.ni.com/public.nsf/allkb/D45E3A1E694815AD86257173005CFD36" target="_blank" rel="nofollow"&gt; found here &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A re-use library is a must have- even if you need to download it from multiple sources.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Going back to our Corporate Communications GUI.&amp;nbsp; From Our structure and model we can see that we need to move a lot of data around.&amp;nbsp; Some if the data has impecations throughout the application, some is needed only in the GUI, and some is needed only in specific sections of the BD.&amp;nbsp; Often getting this data from the GUI to where it is used or From where it is generated to the GUI shows up as Forum threads "How can I access my Control in a sub-vi?)&amp;nbsp; This vi had many different examples of moving data around&amp;nbsp; so it seems like a good place to talk about data scoping and how LabVIEW can transfer it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If anyone hasn't read Ben's nugget on Action Engines Come back after you go though it &lt;A href="http://forums.ni.com/t5/LabVIEW/Community-Nugget-4-08-2007-Action-Engines/m-p/503801#M240328" target="_blank"&gt;here&lt;/A&gt;&amp;nbsp; We will start with the FVG and AE and take a step beyond (But not all the waty to Nirvana.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As a quick Review: &lt;/P&gt;
&lt;P&gt;A FGV is a data storage unit: Breakpoint FGV.vi is an example of a FGV it sets or gets values on 1 USR taking no other action on the data.&lt;/P&gt;
&lt;P&gt;An AE is a data storage unit that can act on the data its a FGV with States.&amp;nbsp; App Kind AE.vi is an Action Engine&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There is a subset of AE's, A special kind of AE, that operates specifically a referance to a resource maintained on its shift register.&amp;nbsp; I call this type of AE a "Module"&amp;nbsp; In encapsulates all the functions of the resource and provides an abstaction layer to the next level of code (that is, the callers only need to say what to do the module handles the how to do it)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The simplest way to pass data is on a wire- Source to Sink.&amp;nbsp; This gives you access to a Value and values are useful- to computers!&amp;nbsp; To pass them to a user we interperate values for human consumption as a property of a control or indicator object.&amp;nbsp; We pass these values to controls and indicators through Termials, Local variables or Property nodes.&amp;nbsp; Terminals and local variables can only point to objects on the front panel of the vi they are found on.&amp;nbsp; They have the same "Scope" as the VI they belong to. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A VI Server referance to an object changes that!&amp;nbsp; Put a VI server referance on a USR inside a module and you've got a pretty powerful tool.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Data Table.vi is one such tool Table Meth.ctl Lists the actions that I can take on the GUI data table and because it carries the referance to the actual GUI object with it, I can take any of these actions from any point in my project and the Data table will show the result of the action.&amp;nbsp; In effect I have brought Data Table into the scope of every vi I drop Data Table.vi onto.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Using this VI I can report Operations Results directly to the user without duplicating the Data, The executive can populate "Steps"&amp;nbsp; from a configuration file ADN the Accountant can generate reports from the exact same data.&amp;nbsp;&amp;nbsp; I also avoid race conditions since only one action can be taken at a time and if I loose any data or things "Look wonkey" I have 1 vi to look for to debug my large app.&lt;/P&gt;</description>
      <pubDate>Thu, 14 Apr 2011 17:43:37 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1524746#M568063</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-14T17:43:37Z</dc:date>
    </item>
    <item>
      <title>Controls not otherwise encluded</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1524766#M568068</link>
      <description>&lt;P&gt;Ctls &lt;/P&gt;</description>
      <pubDate>Thu, 14 Apr 2011 17:51:35 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1524766#M568068</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-14T17:51:35Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise encluded</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526056#M568302</link>
      <description>&lt;P&gt;Thanks Jeff!&lt;/P&gt;
&lt;P&gt;I'm still (re)reading and digesting this.&lt;/P&gt;
&lt;P&gt;In the meantime, &lt;A href="http://forums.ni.com/t5/user/viewprofilepage/user-id/2483" target="_blank"&gt;Ray.R&lt;/A&gt; has kindly saved the files back down to V8.2 in the downconvert &lt;A href="http://forums.ni.com/t5/LabVIEW/Downconvert-VI-Requests/m-p/1525958#M568284" target="_self"&gt;thread&lt;/A&gt;&amp;nbsp; (or download the zip file directly &lt;A href="http://forums.ni.com/ni/attachments/ni/170/568284/1/JBNugget-8.2.zip" target="_self"&gt;here&lt;/A&gt;)&amp;nbsp; &lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2011 14:56:07 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526056#M568302</guid>
      <dc:creator>_Ian_</dc:creator>
      <dc:date>2011-04-15T14:56:07Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise encluded</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526194#M568324</link>
      <description>&lt;P&gt;Ah- hah!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the Nugget I have ben waiting for.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I will download and investigate closer this week-end but I think I see a GUI Controller.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2011 16:20:12 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526194#M568324</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2011-04-15T16:20:12Z</dc:date>
    </item>
    <item>
      <title>Re: Digesting</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526214#M568327</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;HR /&gt;&lt;a href="https://ni.lithium.com/t5/user/viewprofilepage/user-id/138674"&gt;@_Ian_&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;Thanks Jeff!&lt;/P&gt;
&lt;P&gt;I'm still (re)reading and digesting this.&lt;/P&gt;
&lt;P&gt;In the meantime, &lt;A href="http://forums.ni.com/t5/user/viewprofilepage/user-id/2483" target="_blank"&gt;Ray.R&lt;/A&gt; has kindly saved the files back down to V8.2 in the downconvert &lt;A href="http://forums.ni.com/t5/LabVIEW/Downconvert-VI-Requests/m-p/1525958#M568284" target="_self"&gt;thread&lt;/A&gt;&amp;nbsp; (or download the zip file directly &lt;A href="http://forums.ni.com/ni/attachments/ni/170/568284/1/JBNugget-8.2.zip" target="_self"&gt;here&lt;/A&gt;)&amp;nbsp; &lt;/P&gt;
&lt;HR /&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks Ray!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have to admit the nugget did not format quite as intended.&amp;nbsp; I had intended to launch on Monday 4-15 and was hoping to autosave as a first cut rough draft when I hit Post after collecting attachments (to zip from home this weekend).&amp;nbsp; I wound up with 2 minutes to clear "notes to self" and add the TBC on post 1.&amp;nbsp; A generic example project with a "Module" should hit this thread over the weekend to demonstrate the scope change you can obtain with the special case Action Engine I refer to as a Module.&lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2011 16:30:32 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526214#M568327</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-15T16:30:32Z</dc:date>
    </item>
    <item>
      <title>Re: Community Nugget  Series: Application Development: Installment 2- The GUI and FP object encapsulation</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526950#M568485</link>
      <description>&lt;P&gt;I like this, so here is my share:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40372iF60A363D8536F92D/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="Jeff_Nugget2_Demo.png" title="Jeff_Nugget2_Demo.png" align="center" /&gt;&lt;/P&gt;
&lt;P&gt;I've got a reuse package that deals with different access levels/user accounts. Depending on the user, Buttons are made visible/invisible.&lt;/P&gt;
&lt;P&gt;Sorry, I can't share the code. There are some hardcoded master passwords inside.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Good reuse practices are a key to fast and reliable software developement. In addition to plenty of code found in this forum and the NI community pages, some great stuff can be found here:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://wiki.openg.org/Main_Page" target="_self" rel="nofollow"&gt;OpenG&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://lavag.org/forum/40-code-repository-certified/" target="_self" rel="nofollow"&gt;LAVAG Code Repository&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As a side note: I always like an error case around the event structure. This way I go immediatly to the shut-down code and the error handler.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Felix&lt;/P&gt;</description>
      <pubDate>Sun, 17 Apr 2011 10:17:26 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1526950#M568485</guid>
      <dc:creator>F._Schubert</dc:creator>
      <dc:date>2011-04-17T10:17:26Z</dc:date>
    </item>
    <item>
      <title>Re: Community Nugget  Series: Application Development: Installment 2- The GUI and FP object encapsulation</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1527758#M568614</link>
      <description>&lt;P&gt;Felix,&lt;/P&gt;
&lt;P&gt;Thanks for sharing! Your code is quite similar to the Example I'm going to post here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Modular and re-usable code has tremendous advantages for both development and debugging!&amp;nbsp; Keeping on fwith Felix's train of thought&amp;nbsp; I'll present the following code excerpt from the ATS Project.&amp;nbsp; In the Zip File you should find "User Data.vi"&amp;nbsp; Looking at the VI Hierarchy&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40412iD81D4138D568CAA8/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="User Data.PNG" title="User Data.PNG" align="middle" /&gt;: &lt;/P&gt;
&lt;P&gt;We see that this short snip of the ATS project contains 3 example modules that operate on different front panel objects.&lt;/P&gt;
&lt;P&gt;Status.vi Drivers both the Test Status and Operator instructions.&amp;nbsp; One place it is called in the project is from "Show Hide Controls.vi"&amp;nbsp; Since we want to hide certain controls when a test is executing. Finally, User Data.vi maintains Log-in names, passwords and permits.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To remind us all the Main vi FP now looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/40416i7DCEF9B6FED03701/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="FP REVb.PNG" title="FP REVb.PNG" align="middle" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Again I have some decorations for Layout assistance that will be removed later.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;User data.vi&amp;nbsp; Also needs a Config file to maintain user information.&amp;nbsp; For demonstration the file path is a block diagram constant you may need to change to evaluate the code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By using the VI server references to the GUI FP objects I have a scalable solution to expose the test status throughout the ATS project.&amp;nbsp; Decisions on "What to show the user" can be made at the appropriate level by the best "Business unit" to make the code very readable.&amp;nbsp; Maintainability is improved as well! Suppose requirements changed to require password encryption.&amp;nbsp; We have 1 piece of code to modify.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Apr 2011 14:11:38 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1527758#M568614</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-18T14:11:38Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1529622#M568881</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;HR /&gt;&lt;a href="https://ni.lithium.com/t5/user/viewprofilepage/user-id/9539"&gt;@Ben&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;Ah- hah!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the Nugget I have Ben waiting for.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I will download and investigate closer this week-end but I think I see a GUI Controller.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;
&lt;HR /&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;
Ben is correct (in a fashion) the concept of a GUI controller is fairly popular and simple to implement.&amp;nbsp; Grab a cluster of references to every FP object wrap it in a sub-vi with a case for each action you want to take.&amp;nbsp; (create a wrapper VI for each case and go to nirvana.)&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If I remember correctly Ben explained HOW to implement this structure in &lt;A href="http://forums.ni.com/t5/LabVIEW/How-can-I-programmatically-create-and-use-a-global-variable/m-p/1007247?view=by_date_ascending#M449726" target="_self"&gt;this post .&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've used a slightly different approach by breaking out GUI elements by "Function."&amp;nbsp;&amp;nbsp; I took this approach for several reasons, KEY considerations were : &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Can I create a base GUI that is readily adaptable for similar projects and maintains a "Feel" across applications?&lt;/LI&gt;
&lt;LI&gt;How much of the functionality COULD be brought into a OO environment with minimal change?&lt;/LI&gt;
&lt;LI&gt;How easy too maintain is this code?&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The last Question really has more to do with who you work with than personal style.&amp;nbsp; Each of these Modules could be a class, an X-control, or a AE holding a resource.&amp;nbsp; Working with Software Engineers specializing in LabVIEW development you get a much different answer than when working with Test Engineers with a smattering of LabVIEW Skills.&amp;nbsp; Maintenance and adaptation for new product is fairly easy for most engineers / techs that are casual LabVIEW programmers. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That Said: Here is the GUI-fully functional&lt;/P&gt;
&lt;P&gt;Passwords are:&lt;/P&gt;
&lt;P&gt;Log-in = ""&lt;BR /&gt;Jeff Bohrer = "P"&lt;BR /&gt;Admin = "Admin"&lt;BR /&gt;Jr. Tech = "Jr"&lt;BR /&gt;Sr. Tech = "Sr"&lt;BR /&gt;Engineer = "Eng"&lt;BR /&gt;Super User = "Super"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For Demo purposes a test execution marks time until Abort is pressed, delays 3 seconds, and generates a "Passed" execution.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 19 Apr 2011 16:37:58 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1529622#M568881</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-19T16:37:58Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1531108#M569120</link>
      <description>&lt;P&gt;I was going to take a closer look but being at home with 2009, I can't open the most recent. Could someone post a 2009 version of the app zipped up?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Curious,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Wed, 20 Apr 2011 13:28:20 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1531108#M569120</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2011-04-20T13:28:20Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1531142#M569122</link>
      <description>&lt;P&gt;Hi Ben,&lt;/P&gt;
&lt;P&gt;here it is.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Mike&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit: Please copy the Demo\Files folder from the 2010 version.&lt;/P&gt;</description>
      <pubDate>Wed, 20 Apr 2011 13:42:09 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1531142#M569122</guid>
      <dc:creator>MikeS81</dc:creator>
      <dc:date>2011-04-20T13:42:09Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1535488#M569919</link>
      <description>&lt;P&gt;Sorry for the delay but I do want to squeeze this in before I head off again...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jeff,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That example of a GUI controller is a bit more robust than I expected for an example (at first glance) but then after examining it, realized that litle bit of extra conplication is an &lt;STRONG&gt;excellent motivation for a GUi controller&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Complication: &lt;STRONG&gt;Views change for various users&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Implementing all of the control settings for each level of access means that there&amp;nbsp;&lt;STRONG&gt;could be&amp;nbsp;as many version of "Show" as there are defined acces levels&lt;/STRONG&gt;. To implmenet and then maintain this functionality would be challenging to implement and a nightmare to mainatin.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note:&lt;/P&gt;
&lt;P&gt;Not using a GUI controller for applications of this type sooner or latter gets you into a situation where your phone rings and the customer is saying "blha blah blah changes blah blah great blah blah BUT if yo udo this then this then it is..."&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By using GUI controller GUI problems are either in the GUI controller (and its sub-VIs) or something that uses the GUI controller.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now for some generall comments and questions since I'd like to hear what others think...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1) When dealing with multiple refs and property nodes I often (when there are tree or more depending on how the diagram reads) will use a sperate "Unbundle by Name" fore each property nodes to accomplish two ends.&lt;/P&gt;
&lt;P&gt;a) Unbundle node "self-documents" which control is being actd on.&lt;/P&gt;
&lt;P&gt;b) Make it easier to find the property node that without chasing a wire across the srceen.&lt;/P&gt;
&lt;P&gt;Note: These are just my analy-retentative preferences and serve no purpose other than stated above.&lt;/P&gt;
&lt;P&gt;From all of my reading multiple unbundles don't result in poor performance by the time LV unravles what you want and optimizes the code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2) I avoid rebundling ref after using them. The ref is not changing (I like to learn about them if they do, type-cast as a U32 and see they say the same once teh code runs).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;3) &lt;STRONG&gt;Now to your "Class" comment&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You have used a code construct that is very similar to an&amp;nbsp;Action Engine (it keeps it private data in the shift register and access to that private data is only possible through calls to the sub-VI)&amp;nbsp;I have never read about, I believe I mentoned in passing in my Action Engine Nugget.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;code construct that I am refering to is the loop in the sub-VI may iterate more than once&lt;/STRONG&gt; depending on the method invoked. Setting the permision method will invoke the "show" method after completing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Q1) &lt;STRONG&gt;Should we still call this an Action Engine?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If not what scan we call it?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Q2) &lt;STRONG&gt;Have any of you implemented a similart critter?&lt;/STRONG&gt; Yes I have. I had to implement on tht could potential execute about 15 states depending on the siutation.&lt;/P&gt;
&lt;P&gt;If you did why did you choose that construct?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Comment:&lt;/P&gt;
&lt;P&gt;You know... it you create wrappers for the calls to the GUI controller, put them all in a library, you can have something that resembles LVOOP by only creating wrappers for the calls that are allowed so that for example "Show" can never be called directly since there is no wrapper for it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am curious what others know and can say about any of the above or any suggestions from others on how they manage large GUIs.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks again Jeff!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2) &lt;/P&gt;</description>
      <pubDate>Mon, 25 Apr 2011 12:31:04 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1535488#M569919</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2011-04-25T12:31:04Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1535768#M569983</link>
      <description>&lt;P&gt;[Ben]The Complication: Views change for various users.&lt;BR /&gt;&lt;BR /&gt;Implementing all of the control settings for each level of access means that there could be as many version of "Show" as there are defined acces levels. To implmenet and then maintain this functionality would be challenging to implement and a nightmare to mainatin.&lt;BR /&gt;&lt;BR /&gt;Note:&lt;BR /&gt;Not using a GUI controller for applications of this type sooner or latter gets you into a situation where your phone rings and the customer is saying "blha blah blah changes blah blah great blah blah BUT if yo udo this then this then it is..."&amp;nbsp; By using GUI controller GUI problems are either in the GUI controller (and its sub-VIs) or something that uses the GUI controller.&lt;BR /&gt;&lt;BR /&gt;[Jeff] Working with Software Engineers specializing in LabVIEW development you get a much different answer than when working with Test Engineers! &amp;nbsp;&lt;BR /&gt;OK that's the tounge in cheek answer.... but, it brings up some interesting points.&amp;nbsp;&amp;nbsp; Let me elaborate somewhat (this could require some duct tape.) "Components" of a system are defined by the system "Framework."&amp;nbsp; There is a school of thought for &lt;A href="http://en.wikipedia.org/wiki/Component_based_programming" target="_blank" rel="nofollow"&gt;Component based programming&lt;/A&gt;.&amp;nbsp; "Components" in this context, encapsulate a set of related functions (or data).&amp;nbsp; Taking Show Hide Controls.vi as an example.&amp;nbsp; With this construct I encapsulated the set of objects the operator can select to change the state or state flow of the system.&amp;nbsp; This is a highly selective list and we can say there is strong coupling between these objects. The Show method specifically denies USER access to these objects without permission by checking the state of the system and a list of user permissions.&amp;nbsp; The Show method usage is then "Call whenever Testing? changes or&amp;nbsp; Pemits changes.&amp;nbsp; Were these events exposed in this example - no COULD they have been? &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://ni.lithium.com/i/smilies/16x16_smiley-wink.gif" alt="Smiley Wink" title="Smiley Wink" /&gt; YUP! and I'ld agree that would be more robust!&amp;nbsp; I copped out and wrote a KISS component demoing the function with VI server Refs and no dynamic events.&amp;nbsp; Suppose "Testing?" changes type to something more complex than a BOOL?&amp;nbsp; Say "Status" &amp;lt;as string&amp;gt; and "In Test Dev Lab?" as bool,&amp;nbsp; I have exacly 1 state to change.&amp;nbsp;&amp;nbsp; I can also add other methods that depend on the new "system state" In Test Dev Lab?".&amp;nbsp; "Failing in Lab" might prompt a new method setting all remaining Breakpoints and displaying additional information for the dev team.&amp;nbsp; By encapusatling just these special "State Flow" controls I can easilly debug how I got into a improper state for the system. &amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;The Flip side-&amp;nbsp; these objects obviously belong to a larger group "FP objects"&amp;nbsp; If I have a requirement "allow user to move all objects" I need a parent component that reaches into this component with a method to disable all these objects, show them all and allow dragging. (and probably save the settings).&amp;nbsp; My "move objects" method becomes more complex (but allows special handeling for this sub-class like, dissable the controls)&amp;nbsp; and more difficult to debug as the method has "overrides."&lt;BR /&gt;&lt;BR /&gt;Ben's GUI controller is not without merit-&amp;nbsp; really only a change in scope of encapulation!&amp;nbsp; The reliance on unbundle by name to aid identifying which object or group of objects is being acted has a simillar effect of increasing the coupling of related objects as the approach presented here.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;[Ben] You have used a code construct that is very similar to an Action Engine (it keeps it private data in the shift register and access to that private data is only possible through calls to the sub-VI) I have never read about, I believe I mentoned in passing in my Action Engine Nugget.The code construct that I am refering to is the loop in the sub-VI may iterate more than once depending on the method invoked. Setting the permision method will invoke the "show" method after completing.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;Q1) Should we still call this an Action Engine? &amp;nbsp;&lt;BR /&gt;[Jeff] I believe this contstruct is an Action Engine-&amp;nbsp; of a special case.&amp;nbsp; Wrappers would present it as a "Pseudo Class" or it could be written very similar as a Class.&amp;nbsp; The key differentiator from a "Classic" Action Engine is not that it can loop more than once but that it abstracts the actions to perform on the object(s) in the referance (Resource)&amp;nbsp; within the system.&amp;nbsp; I use the same construct for Hardware resources too!&amp;nbsp; One benifit I find is the ease of finding them in either&amp;nbsp; "Tree.vi" or in the Heirarchy view "This resource is here and it has these abilities" just shows in your face with Help on.&amp;nbsp; The Icon style and VI documentation are a subset of the practice.&amp;nbsp; Within my internal lexicon I simple call them "Modules."&amp;nbsp; &lt;/P&gt;</description>
      <pubDate>Mon, 25 Apr 2011 16:06:44 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1535768#M569983</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-25T16:06:44Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1541204#M570971</link>
      <description>&lt;P&gt;Hmmm... the subject of "Modules" showed up in a &lt;A href="http://forums.ni.com/t5/LabVIEW/Issues-regarding-wires-through-event-structure/m-p/1541108/highlight/false#M570948" target="_blank"&gt;thread here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;the OP was having some dificulty maintaining a VISA session through an event loop where the resource was only used in a few of many cases.&amp;nbsp; This reminded me that I had mentioned here that I use the "Module" construct for hardware and whipped out a quickie example encapsulating base functions for the 34401A since that driver that ships with LabVIEW.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/t5/image/serverpage/image-id/41474i4639E2FAEC5E98FF/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="EX.png" title="EX.png" align="middle" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm wondering if anyone else uses similar methods to encapsulate hardware functions.&lt;/P&gt;</description>
      <pubDate>Thu, 28 Apr 2011 18:25:13 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1541204#M570971</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-28T18:25:13Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1541270#M570986</link>
      <description>&lt;P&gt;Yes.&amp;nbsp; I will do something like that using an action engine.&amp;nbsp; That way I don't have to worry about the VISA wire everywhere that I want to do some action with my serial port.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Though lately, I've been going a step farther and using it a way that I'm calling it a serial comms engine that I launch as a subVI in parallel to the rest of my code with nothing depending on it.&amp;nbsp; Basically a daemon configuration.&amp;nbsp; Then I will just use queues to pass data and commands into the subVI's while loop.&amp;nbsp; Init, read/write, close, and shutdown.&amp;nbsp; The shutdown or exit command being the one that ends the while loop so that the program can end.&lt;/P&gt;</description>
      <pubDate>Thu, 28 Apr 2011 19:23:04 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1541270#M570986</guid>
      <dc:creator>RavensFan</dc:creator>
      <dc:date>2011-04-28T19:23:04Z</dc:date>
    </item>
    <item>
      <title>Re: Controls not otherwise included</title>
      <link>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1541306#M570996</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;HR /&gt;@Ravens Fan wrote:&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Though lately, I've been going a step farther and using it a way that I'm calling it a serial comms engine that I launch as a subVI in parallel to the rest of my code with nothing depending on it.&amp;nbsp; Basically a daemon configuration.&amp;nbsp; Then I will just use queues to pass data and commands into the subVI's while loop.&amp;nbsp; Init, read/write, close, and shutdown.&amp;nbsp; The shutdown or exit command being the one that ends the while loop so that the program can end.&lt;/P&gt;
&lt;HR /&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Interesting!&amp;nbsp;&amp;nbsp; I've also used it to support independant operation as well add a named queue and the loop exit condition gets off the constant and a T from the close case&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 28 Apr 2011 19:47:00 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/Community-Nugget-Series-Application-Development-Installment-2/m-p/1541306#M570996</guid>
      <dc:creator>JÞB</dc:creator>
      <dc:date>2011-04-28T19:47:00Z</dc:date>
    </item>
  </channel>
</rss>

