Updating Listbox in a while loop

Hi,
I'm a newbie.
I would like to have a directory listing in a listbox updated
continuously.
I have an array of file names going into the Item Names property node,
then the value and string array are put into an "index array" which
goes to an indicator.
Now it works fine when I run it once but, if I run it in a while loop
I can't select any items in the Listbox.
Can someone tell me what I'm doing wrong?
thanx

Hi,
I'm not sure that I've got the problem corrcetly. It is always better to send your VI with message. But I tried to make an example and it works fine in my case.
Is it what you want?
Oleg Chtuko.
Attachments:
List.vi ‏27 KB

Similar Messages

  • Updating widgets on panel while looping

    Hi list,
    my plugin exists of a panel with different widgets.
    From there, when a users clicks a certain button, a lot of code gets executed. (Export xml, create package, upload to server, etc...)
    I would like to be able to change the icon of different IconSuiteWidgets when one of the processes is complete. For example: "XML Exported -> YES" - "Uploaded -> "YES" and so on...
    The problem is that myWidget->Invalidate() only gets updated after all the code is executed, so the user does not see any progression, except for the spinning beachbal (Mac)
    Wich steps should i take to solve this or is it not possible on a panel?
    Thanks in advance for your answers!
    Florian Soenens.

    Hi Florian,<br /><br />We had the same problem and we use the following code to update our static text widgets immediately, instead of waiting for the next update event to trigger the redraw.This can probably be applied to any type of widget, as long as you have the widget IControlView. The code was only necessary for MacOS - on Windows, the static text was updated immediately.<br /><br />     IControlView*     aWidgetView = [your control view];<br />     if(aWidgetView != NULL)<br />     {<br />          ViewPortAccess<IWindowPort> aWindowPort(lWidgetView, IID_IWINDOWPORT);<br />          if(aWindowPort)<br />          {<br />               InterfacePtr<IViewPort> aViewPort(lWindowPort, IID_IVIEWPORT);<br />               if(aViewPort)<br />               {<br />                    AGMGraphicsContext gc(aViewPort, aWidgetView);<br />                    aWidgetView->Draw(aViewPort);<br />#if MAC_OS<br />                    if (gc.GetSysPort() != nil )<br />                    {<br />                         if ( ::QDIsPortBuffered(gc.GetSysPort()) && ::QDIsPortBufferDirty(gc.GetSysPort()) )<br />                         {<br />                              ::QDFlushPortBuffer(gc.GetSysPort(), nil);<br />                         }<br />                    }<br />#endif<br />               }<br />          }<br />     }<br /><br />- Chris

  • Start stop while loop with tab control

    I want to be able to start and stop a while loop by entering and leaving a tab.  I am using an event structure to do so but it doesn't seem elegant or the right way to do this.  The only way I was able to get it to kind of work is by unchecking the lock front panel box in the event structure.  I have attached a sample vi of what I have so far.
    Solved!
    Go to Solution.
    Attachments:
    Loop test.vi ‏16 KB

    The problem is that you can't even stop the program by hitting the stop button until you leave the tab, which is not a friendly user interface.
    Event structures should just handle basic user events.  Any given event case should not take a long time to run.  While you are in the diagnostics tab, your code is stuck in that while loop.  Although fixing the lock front panel allows you to do other things, the LabVIEW is just queuing up all of those other UI events (like Stop button value change) and can't handle them until the inner while loop stops and allows the outer while loop to iterate again.
    You should have a parallel while loop to handle the waveform graph.  You can use notifiers or queues or an action engine FGV (see Ben's Action Engine Nugget) to pass the starting or stopping of the waveform graph update to the parallel while loop.

  • How can I update cluster items from inside a while loop that does not contain the cluster?

    I have a VI that contains front panel clusters and two while loops. The main cluster contains items such as a doubles "distance" and "stepsize" and boolean "step" (a whole buch of this type stuff). The first loop contains an event structure to detect front panel changes and the second contains code and sub VIs to perform operations based on detected events.
    The operator can enter data into either double or click the boolean. If distance is changed the second loop does what is required to process the change. The same happens with stepsize. If step is clicked the ±stepsize value is added to distance and the result is processed. In each case the front panel should track the result of the input and subsequent processing.
    Because the clusters are outside the while loop, they are not updated unless I click 'highlight execution' which seems to allow updating each time the execution highlight is updated. There are other issues if I move the clusters into one of the loops.
    I've tried referencing the clusters and using local variables and nothing works. It looks like overkill to use shared variables for this.
    Any ideas would be greatly appreciated.
    Thanks,
    Frank    

    Hi Ben,
    Thank you for the response. I followed the link and tried reading everything you posted on AEs but I'm afraid that I didn't understand it all. It seems that each AE example had a single input and a single output (e.g. a double). Is this the case? 
    What I have is a couple of front panel clusters containing (approximately) 18 control doubles, 8 indicator doubles, 5 boolean radio button constructs and 26 boolean control discretes. I clusterized it to make it readable. In addition I'll eventually have a cluster of task references for hardware handles.
    All I want to do is update the front panel values like I would do in a C, VB or any other language. I've tried referencing the cluster and using the reference from inside the loops. I've tied using local variables. Neither works. I'm experimenting with globals but it seems that I have to construct the front panel in the gloabal and then I wouldn't know how to repoduce that on the front panel of the main VI.  Sometimes it seems that more time is spent getting around Labview constructs than benefitting from them.
    I hope the 'Add Attachment' function actuals puts a copy of the VI here and not a link to it.
    Thanks again for the suggestion,
    Frank 
    Attachments:
    Front Panel Reference.vi ‏33 KB

  • How come my local variable is not updating it's value with respect to what's happening in the while loop?

    Hello,
    I am trying to extract data out of a while loop as my declarations update with respect to the iteration number. I have attempted to use both local variables and shift registers, but with no luck.
    I have also done the following example: http://www.ni.com/white-paper/7585/en and it works like a charm.
    I attached the PNG file with local variable declaration circled in red. Will attach a VI in the next respnose.
    Thanks
    Solved!
    Go to Solution.
    Attachments:
    Local Variable.png ‏366 KB

    OK, looking at the code...
    Can you explain what it is supposed to do? What's the purpose of the value property node read which only seems to update an indicator.
    The inner while loop should proably be a FOR loop, because the number of iterations is known before the loop starts.
    Your use of formula nodes seems overly complicated.
    LabVIEW Champion . Do more with less code and in less time .

  • Getting data from a while loop while running.

    Hello,
    I did a program that call a sub-VI which is doing experiment and have its own timer.
    The sub-VI is a while loop and the stop condition of this loop is the elapsed time of my timer.
    What I want to do is to be able to get the elapsed time in my main program during the execution of the sub-VI (every second of its execution).
    First I assign the elapsed time in the sub-VI as an output of it. But of course the elapsed time is only updated in the main VI only when the while loop has finished. So I tried several solution: property nodes, local variable, global variable.
    When I am using global variable, I can see the elapsed time being updated during the while loop when I open the global variable VI. But the result is always the same: in the main VI the elapsed time is only updated at the end of the while loop.
    I think that is the global variable is updated every time, I could be able to get its data to my main VI?
    Does anyone have an idea?
    Thank you,
    Meach

    I tried using shared variable and reference without succes.
    I will keep searching.
    I enclose my VI that I simplify the most but with still keeping the shape of my real program. If you can take a look I will really appreciate.
    The goal is on the top-level VI to be able to see the updating data time in real time.
    Thanks,
    Meach
    Message Edited by Meach on 07-23-2008 04:13 PM
    Message Edited by Meach on 07-23-2008 04:14 PM
    Attachments:
    Elapsed Time.zip ‏25 KB

  • How to stop while loop

    I can't figure out how to stop a while loop in my labview program. 
    When the user presses the Run arrow in the toolbar I want my program to begin reading the serial port for GPS messages.  These messages should be displayed on the front panel.  Currently I have this read/display in a while loop.  The program is also waiting for an extrenal trigger.  When that trigger arrives, I want to grab the current string from the serial port and save it and continue reading and displaying the serial/gps string.  This trigger starts the other parts of the program- signal generation, recording, and saving data which need to run concurrently with the serial/gps reading/displaying.  Once the AO and AI have finished and the data have been written to disk, I want the program to stop.  The serial/gps messages should be updating this whole time.  Only when the data are written to disk should the whole program end.  This whole sequence of events should only be done once when the user preses the Run arrow. 
    So far I'm unable to pluck the serial string when the trigger comes in if I'm watching the serial port all the time.  The program also doesn't stop when it finishes writing to disk because the read serial while loop is still running.  I don't want to use a front panel stop button.  The program should stop itself when the data havebeen written. 
    I'm really stumped on this one but I'm new to LabVIEW so I'm sure there's an easy solution to this. 
    Thanks for any and all help. 
    Attachments:
    SPoleLakeChirp.vi ‏199 KB

    Dennis and altenbach-  Thank you both for your patience. 
    I was trying to do just what Dennis suggested-"As I said, setting a local variable is one way." even before posting to this forum, but I couldn't get my local variables to reflect changes made elsewhere in the program and I wasn't able to wire from them because they were writes.  The critical part I was missing was how to change a local variable from a write to a read.  It was staring me in the face the whole time- just right click.  When I finally found it, my problems were solved. 
    altenbach- thank's for putting the figures together.  I do understand the logic and wiring there, but I was really trying to avoid stop buttons.  The program should be smart enough to figure out when to stop.  And using local variables turns out to be one way of solving this.  I still have some clean up to do, but I've included my current working version just so you can see how I implimented your suggestions.  There's still a lot of clean up to be done, but I'm delighted to be able to watch the serial/gps messages until I'm done reading in data.  At first I had this stop variable set in the final sequence frame.  That didn't work because I wasn't getting to the final frame because the loop wasn't finishing.  Once I placed the stop variable in the same frame as the while loop it began stopping when it should. 
    If you have other comments/critiques about the wiring diagram I'm earger to hear them.  I'm considering the structure finished, however.  It still needs cleaning up and commenting, but I'm satisfied with the functionality. 
    Thanks,
    Peter
    Attachments:
    SPoleLakeChirp.vi ‏210 KB

  • How to stop While Loop in Event Structure with same button?

    Hello,
    I have a problem. I want to use one control to activate an event in a event structure, and the same control to terminate a while loop in that event.
    It is possible to use 2 controls to do this, but I need it to be only one.
    Thank you  
    Message Edited by Heinen on 02-19-2009 06:16 AM
    Message Edited by Heinen on 02-19-2009 06:20 AM
    The Enrichment Center is required to remind you that you will be baked, and then there will be cake.
    Solved!
    Go to Solution.

    Hello,
    I have a bit different problem.
    I have a tab control, with several buttons on different pages.
    In the current situation, we can talk about two pages, where one page ("Settings") in the Image, has a START and EXIT button, while second page ("Wait") has an EXIT button.
    In a while loop, I have event structure, which handles events of the START and EXIT buttons of the Settings page. This is fine. But I also want to control the Exit button of the Wait page.
    The control works like this:
    When I click on Start in the Settings page, the front panel shows Wait page and attempts to connect to a datasocket server on the remote computer. If the user wants to stop this process, he can click on Exit on Wait page too. But, this doesn't give any immediate effect. On the even of Start button, the front panel is not locked, so the user can actually click the Exit button on the next page when it's visible. But it's of no immediate effect. Means, what the LabVIEW does is, finishes the execution of event in Start button's click, and while this executes, it doesn't consider the Exit button's refreshed value (shown in Red circle in the block diagram).
    Simple question: Is there any way to check the updated (latest/live) value of a control during some event's execution? Or if I write an Event "Value Changed" for the Exit button and pass it to some variable. Is it the only solution?
    Thanks ahead.
    Vaibhav
    Attachments:
    terminate event_diagram.jpg ‏200 KB
    terminate event_front_1.jpg ‏63 KB
    terminate event_front_2.jpg ‏63 KB

  • Plot XY graph from while loop

    I am trying to make a curve tracer with a DC power supply, DAQ, and Labview 7.1. Everything is ok, until I want to plot an x-y plot from a while loop. I can do this function fine using a for loop and cluster cells, but I need the while loop for the interruption function. When I change to the while loop, it had data formating issues, but I believe I have it to something that should work. It seems like my xy plots want to graph (the auto scale moves the axis respectively) but I do not get a line. I'm not sure if Labview is seing this as just one point and not an array, or if there is a labview bug. Attached is my code with a few different trials to make an xy plot. If anyone can be of help I would be very thankful.
    -Jon
    Attachments:
    Curve_trace_w_relays_while.vi ‏122 KB

    If it works in a FOR loop, but nor in a while loop, most likely your output tunnels are not autoindexing (FOR: on by default, WHILE: off by default). Right-click on the output tunnels and select "enable indexing".
    If you want to watch your graph update during the while loop, you could accumulate your x and y data in a shift register and graph it. (See attached modification).
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    Curve_trace_w_relays_whileMOD.vi ‏74 KB

  • Updating data outside a foor loop

    I hope someone can help me with the following problem. I collect data into an array with a for loop. The data is visualized in an intensity graph. All this works fine. I would like to update the graph line by line as the for loop runs. I managed this too but only if the graphing is done in the same VI as the for loop. This I would like to avoid as the program is already rather complex and it is difficult to keep track of all the things. I therefore made the for loop data acquisition into a subVI but now the updating doesn't seem to work. My question is, is it possible to update data outside a for loop when the loop and the data are in different VIs.
    Klas

    Hi
    It is a good way, doing it like that.
    There are also other ways. And the easiest one, that people tend to use imediately are the global variables.
    If you can, avoid using them - when you use them a lot, sooner or later you end up in having problems (it is very difficult to control the data flow of your program like that). A good way of doing it is using the so called LV2 globals.
    It is called like that beacause it was introduced in version 2 of LabVIEW- it consists of a subvi with a while loop with a non-initialised shift register. Because it is in this situation, it keeps the value of the last time it ran and even has the advantage that you can even place some code in the variable like this (like a case structure to read and write the value). The biggest advantage is that you can control the flow of the program - beacause the vi cannot run concurrentely.
    Take a look at the following example:
    Hope it helps,
    Paulo
    Attachments:
    Global.vi ‏16 KB

  • Making a connector in while loop

    I want to make a subvi with a while loop.
    For example, there is a indicator inside while or for loop as my attachment.
    Actually, the indicator will be used as a progress bar which need to be updated in realtime in main vi.
    In my first thinking, the subvi is used in a simple event-driven structure(main vi) to start by a button (for user interface).
    But I realized this method is not suitable for updating the indicator in realtime after pushing the start button.
    How to make a subvi for the indicator and use it?
    That is, how to extract the value inside while loop to outside the loop in realtime?.
    Lee
    메시지가 08-12-2007 07:30 PM에 labmaster에 의해 편집되었음
    Attachments:
    aaa.jpg ‏13 KB

    trivial example attached, two vis in labview 8.2.1
    Paul <--Always Learning!!!
    sense and simplicity.
    Browse my sample VIs?
    Attachments:
    mainVi.vi ‏7 KB
    subviThatUpdatesMainProgess.vi ‏10 KB

  • Is there a way to cycle a while loop on its own and only controlled by the number of cycles?

    Hello everyone, 
    Newcomer here, recenlty just took core 1 and 2 the past couple of months
    is there a way to cycle my while loop so that the daq assist receives the same outputs from the list box table? So pretty much I need the VI to be able to read the voltages and time values from the list box and then execute them, I've manage to do this, but then I need it to stop for a given time and then execute again the same voltages. This would be controlled by a control for "number of cycles" input. 
    Can someone tell me why my "Emergency Stop" button doesn't stop the VI?
    Why is my data logging only outputing one result if I have it to read ever min?
    My wave form graph isnt plotting the temperature results, does it have somthing to do with the while loop?
    I know this is a lot of questions, I'm just trying to solve this and learn from it.
    Attachments:
    TEST RIG 11 10-28-13.vi ‏298 KB

    You took core 1 and 2!!!  Please tell me NI didn't teach it.  I'm not trying to harp on you too bad because I think the instructor is more to blame.  You have many wires going the wrong direction, multple loops doing nothing, and one loop that will never stop so even if all the others did there would be no way to stop your program, a Stop button that is read only once at the start of the application and then is never read again (so stop will never work).  You have the inner loop running forever, but even if it did stop it would run the outer loop forever, your enums should be typedefed, uninitialized shift registers when not needed, dynamic data types, far too many express VIs...ouch.
    To answer your question.  If you have a while loop that needs to run 5 times, why not use a for loop? Then wire a 5 to the N terminal.  If you do have to use a while loop for what ever reason, use the i terminal as a condition to stop.  It will start at 0 and count up so a value of 4 means it will be executing the 5 time.  If the value equals 5 then stop.  Get the Array size of the Listbox and set your for loop to run for each item.
    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.

  • Writing a file for prescribed amount of time in a while loop after the triggering condition is met

    Hello Guys,
    I am trying to program an application in which if the trigger condition is met it should start to write the file.
    I was able to do that, but if I want it to be written for certain amount of time, and once the trigger condition is met, it should continue to write the files for prescribed amount of time. I was not able to do this. The file name should also be updated accordingly.
    I tried to with some options by keeping the creation of the file outside of the loop, if I do that then if the trigger condition is not met it will stop writing and I dont want that, as once the trigger condition is met it should be true thereafter.
    So I cant keep any thing outside the while loop, bcaz then it checks the condition of the shift register for the trigger and I have it as a false constant.
    I am attaching my application which is kind of mess and I have written in the application where I am having problems. For every iteration of while loop it makes a new file, and i dont want that, I want to write specific amount of time data to the each file.
    Please take a look at my code and help me in solving the problem. Any insights and examples on how to do this thing will be a relief to me.
    Thanks in advance.
    Regards,
    Nitin
    Attachments:
    PXI_4462_Sync_and_Stream_trigger.zip ‏192 KB

    what i am saying is to keep track of how much data you have written and whenever you need to make a new file you make 1.
    here is a vi that i just made that should show you. let me know if you need any help understanding it.
    Attachments:
    new file exemple.vi.zip ‏21 KB

  • Multiple instances of identical vi inside a while loop

    We have a while loop that is monitoring 6 sensors in a heated water bath.
    Each sensor has the same basic switching parameters.
    While the loop runs, it does not tie the shift register value to the same instance every time it runs.
    The 6 instances of the Switch Pass or Fail.vi in the attached project have a dummy 1, 2, 3, 4, 5, 6 value and we don't know how to tell the main program which instnace to run when a switch switches.....
    So far, everything else works, but we can't get the Switch Pass or Fail.vi to run the same way twice...
    Attachments:
    switch pass or fail vi question Oct 17 2011.zip ‏575 KB

    Stepping back to our "inception" problem.. we have a problem, within a problem, within a problem...
    Before we can answer our other problems, we need to be able to test our VI and can't figure out how to update a bank of shift registers, one at a time, without having the wires break when we don't update each output from the case structure on each case.  The VI won't let us run by populating one output from a wire to different shift registers in a "bundle" vi.
    The goal of the attached VI is to have "TMP Reg" input, initial, shift register, values into the "switch pass or fail.vi" and have the output on the "trip temp out" wire update only the shift register in the "bundle" associated with that switch.
    example: the first case structure entry "1" would output the "trip temp out" value to the first entry in the bundle to update the first shift register.  Then, when the second case ran, it would update the second entry in the bundle to update the second shift register, and so on, until all six cases (switches) had thier shift register values updated.
    Attachments:
    cycle through updating shift registers without re-writing the others.png ‏148 KB
    clusters now feed the RGTR_FX.png ‏195 KB

  • While loop and for loop condition terminal

    Hello friends,
    I am using labview 8.6. The condition terminal of the while loop and conditional for loop is behaving in just the opposite way.
    When i wire a true to the condition terminal of my loop, the while loop continues to run when I click on run. when I wire a FALSE, it stops.
    Is there any setting change that I have to make it to get it work properly.
    Please suggest on this.
    Thanks and regards,
    Herok

    Please do NOT attach .bmp images with the extension changed to .jpg to circumvent the forum filters!
    Herok wrote:
    I am sending you the VI. I am not sure if this would help you because only in 2 computers this behaviour is seen. In others, it works as it is supposed to work.
    Whatever you are seeing must be due to some corruption or folding error. It all works fine here.
    To make sure there are no hidden objects, simply press the cleanup button which would reveal any extra stuff (which is obviously not there). Does it fix itself if you click the termination terminal an even number of times? What if you remove the bad loop and create a new one?
    Could it be you have some problems with the graphics card and the icon of the conditional terminal does not update correctly?
    Whay happens if you connect a control instead of a diagram constant?
    What is different on the computers where it acts incorrectly (different CPU (brand, model), #of cores, etc.) 
    LabVIEW Champion . Do more with less code and in less time .

Maybe you are looking for