Leave a while loop

Hello

I have a while loop that I want to go out with a stop on the front panel.

Here is a bit of code:

As you can see the code in the while loop is processed by filling four sub .vi.

I found that if I press the button to stop at one point, the computation of the 4 sub fired then the other while loop will pass and not out at the end of the calculation of the sub 4. screw.

What is the way to get around this please? I realize that the help of the fixed stops on the front panel is not recommended!

Thank you

Daniel

Fact

Tags: NI Software

Similar Questions

  • Leave a consumer while loop

    Hello

    I've included a little VI which is purley two while loops is a producer and the other a loop of consumer. This example is to show someone this method. What I want to do is produce it at a faster pace than the rate of consumption, and when the loop of consumer sees no more items in the queue to stop the VI.

    My problem is that the parolee receives terminal real output does not appear to do. Can someone have a look I'm sure I did something stupid

    In your background loop, the Dequeue item will wait and wait for an item that does not come. There are several ways to deal with this, but the easiest for this VI is to simply plug a non-negative number on the Dequeue item time-out. Given that your data is sequentially with no break and must never be empty, a timeout of 1 should work. Give it a try.

  • I can constant maniuplate outdoors to separate while loops?

    What I want to do is subtract the constants incrementing in while loops 1 & 2. I removed the meat of the code, as it would get in the way of the question. Basically, a value is read (outside the structure of the case) each time, iI want to increment the "number of times read. The same thing happens in the second loop (they are basically independent of each other). I can't escape outside the while loop because the code never leaves the loop. I use a global variable? Thanks for any response.

    You will need to put in globals or functional globals to make your available outside your earrings acquisition counter values.

    You'll need a third loop at the same time to do the subtraction of values you have in your globals.

    You can also examine the help of queues and the authors of notifications.

    Another way to do would be to unstack a notifier received notifications whenever you receive a tag and then have a processing loop that manages the authors.

  • Why Ctrl-P restarts a while loop?

    I explore (= teaching myself) how key codes are captured by the structure of the event.  I built a simple test routine (see below) which has a period of 1 second which increments each tick (allowing the program to exit after 30 seconds) and a key down? filter that shows me what happens when I type in various keys.

    When I ran first, I didn't throw it away? Terminal wired and noticed that ^ Q pops up a dialog box 'Leave?', while ^ P emerged from a dialogue box 'Print Screen '.  I wanted to "capture" these strikes to "Quit" and "Pause".  I then wired 'True' to the Terminal, and no additional dialog not popped up (as expected).

    However, I noticed that typing ^ P effect was to raise my time loop (there is an indicator, not visible here, inside the the timer event that shows the current count, 1, 2, 3,..., and when I type ^ P, it restores 1 and start counting again).  I guess that overall the program is restarted, but that he was not aware of this problem!

    Two questions.  First of all, it is documented, and if so, where can I read on ' actions ' of this key combination?  Second, is there a way to 'disable' this behavior and have ^ P considered just a combination of keys, the effect of which is "waived" by the event loop?

    Bob Schor

    Your meter is reset because we did not connect the shift through the key down event register. There is no way to program restarts.

  • How to set up the execution in a way independent while loops?

    Hello

    I hope someone here can help point me in the right direction for that.  My system at this stage is still quite simple, I just data collection of 2 resistance probe and a pressure sensor, their output in the Panel before and sometimes to write.  I have put architecture in place to call parallel loops running at the frequency I would ideally like to do.  that is, I want the RTD to update every seconds and the pressure transducer for updating chaque.5s, I want to write to the file at a rate defined by the user and I want the Panel before updating a half second (correspondence with the pressure transducer).

    Now, in the structure, I wrote, it should run all the while loop once before it can restart the sequence.  Technically, the code works, but it takes ~1.5s to the RTD to collect and update and so the whole VI takes ~1.5s to complete.

    I don't care if the RTD is slow to update, but as I use the sensor as a gauge of the cell pressure I need to know at a high frequency that the pressure is in the cell, and I don't want to wait 2 seconds for the information.

    I know I'm starting to get into a much more advanced architecture for this and ive spent the last googler 6 hours trying to find a procedure for how it works but I can't figure out a way to have the whiles stop waiting for RTD loop finish.  I guess that this is to divide the VI in several screws and construction of a library, but the resources I could find about it were not very useful for a beginner like me.  If someone could point me in the right direction on where I should look then that would be great!

    Thank you

    Zach

    Zach,

    Because you created the tasks of data acquisition elsewhere, we do not understand how you have set up. Continuously, starting and stopping tasks may be slower than setting up of a permanent task and let it run.

    You have not indicated that you use the DAQ hardware.  It is often better to leave in the DAQ hardware clock set ignition rather than rely on software distribution. The pressure loop reads 1000 samples at a time and calculates their.  If you're not sampling at 2000 s/s or faster, the loop ends late due to waiting for data.  In two loops DAQ, you do not use the calendar information.  Acquire the data in tables rather than waveforms.

    The Dequeue functions in the loop at the bottom have no wait times for this loop will not iterate until all three queues have data. As the pressure loop runs faster than the loop of RTD, the queue of pressure slowly fills.

    The upper and lower loops are vying for the data.  The preview queue item does not delete data from the queue, but the functions of the Dequeue elements in the loop of the low fact.  If data is deleted form the queue before the upper loop resembles it, it will never be saved. With your installation there is no way to ensure that you get all the data or that you do not read and record the same data more than once.

    You don't have anything set up to stop one of the loops.  You use the Cancel button to stop your VI?  If Yes, STOP! Other aprticpant on the Forums said: "using the button abandon to stop a VI is similar to the use of a tree to stop a car.»  It works, but can have unintended consequences. "Things like closing of files, freeing up the queues, by closing the task of acquiring data, and other things can occur when the program is interrupted.  You do not shut down your computer by pulling the plug.  Stop your program also neatly.

    Ok.  I have highlighted some of the things that can keep your program to run as desired.  What can you do about them?

    1. you probably don't need call loops.  Normal so the loop should be good enough.

    2 put a stop button on the front panel. Put the terminal in loops (bottom) and connect it to a function to send a Notification and the status of the Terminal loop (stop sign).  Put wait Notification functions in each of the other loops.  Put a period shorter than the time loop minimum on all of them if the lops can work.

    3. see the comments above regarding the DAQ bed material.

    4 use the Dequeue timeouts to adjust the pitch of the loop the loop where the data is used.  Also make sure that all data is removed.  You need to think about your time together and what are the bottlenecks.  Except if you expect this system to grow to much larger dat sets, I probably acquire ALL data (pressure and RTD) at the same rate and reduce the displayed amount by the average like you do for pressure data now.  If you want different final data rates, just average different amounts of data.

    5. it might be useful to learn how to work the State machines.  Display, averaged and recorded files could be managed in a loop by a simple state machine while allowing for more flexibility in the calendar.

    6. Another good reason to consider a state machine is that initialization and shutdown processes can easily be handled in the corresponding States. At this point you do nothing with errors. A state machine would enable you to handle errors (for example, the cancellation of the selection of the user files) without stopping the program.

    Lynn

  • Nested while loops

    Attached is a very simple with two nested all VI in loops and two buttons on the front panel.

    1 button, when you press left the inner loop.  2 button pressed leaves the outer loop and the program must end.  I put in a probe at the end of the outer loop and of course a REAL will to the terminator when I press the 2 key, but the program does not stop.  Apparently, all inner loops must be completed prior to the outer loop can terminate.

    Obviously, someone at NEITHER took the decision to design a long time ago, but the rationale is intriguing.  If one end of the loop becomes a REAL it must end, no?

    Although the example is trivial, the problem that it illustrates is a real for me.  I want to offer a panic button stop is a vast and complex and I don't see how I can do with things as they are.

    What you see is the result of the dataflow paradigm used by LV as you said, all the code inside the loop must complete / finish before the outer loop stops.

    Providing one Stop button to stop all in one comprehensive program can be a complex task. The key issue is that EACH loop, function, sub - VI, case structure, structure of the event, the structure of sequence and so on... must stop to stop the loop.  If you have something like a file entry or a reading of GPIB instruments which take 100s of milliseconds or seconds to complete, the shutdown will take at least that long process, assuming that the tedious node was running when the judgment was issued.

    One other point: you put inside terminal 2 touch it the case of the event that responds to the key. Which ensures that the button will be read so the mechanical action works as expected.  With her out of the loop it will only play once.

    A registrant can be used to 'spread the word' when it's time to stop.  The time-out he will keep waiting forever and will also allow the other parallel inside code while loop to run during waiting for him.

    Lynn

  • Structure of the event inside while loop

    I'm still fairly new to Labview and this may seem a simple question.  I'm doing a Subvi to display, edit, and create configuration files.  I use a ListBox to list all sections of a config file and structure of the event to update the values in each section, when they are clicked.  The problem is that the structure of the event seems to be a break the while loop so that the buttons do not work until the event has executed.  What I would like is the while loop to run continuously and the event to run only when I click in the listbox control.  I hope this makes sense.  There is a peak in the diagram below. Thank you

    There are a number of issues with your code that could cause problems:

    1. You must use the FP. Open method to open the front panel of a VI and of the public Service. Close method to close. I don't remember exactly the problem, but starting with the 7 worm nor indicated that these methods were the preferred way to perform these tasks.
    2. Based on what seems to be the code, the event for the control of Presets of wood should be a change the value - not a mouse down event. After changing the type of event, use the event data NewVal to drive the indexer table index entry.
    3. The buttons Ok and cancel them should be handled in their own events to change the value. The value change event Cancel would exit the loop, while passing the output error (which indicates that cancel was pressed) and default values for the other 4 outputs. The change of the value Ok event would leave the loop by passing the values that the operator had concluded the 4 controls on the front panel.
    4. An event of timeout with a very short time (1 msec) would stop loop if an error has occurred, or the output of the gate AND is set to true.
    5. The wait function is not necessary, as is the case outside the loop structure.

    Mike...

  • 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 use a structure of the event to do so, but it seems not elegant or the right way to do it.  The only way I could get to the kind of work is by unchecking the lock front panel in case of structure.  I have attached a sample vi of what I have so far.

    The problem is that you can't even stop the program by pressing the stop button until you exit the tab, which is not a user friendly interface.

    The event should just manage basic user events.  Any given event does not take a lot of time to run.  While you are in the diagnostics tab, your code is stuck in this while loop.  Although the setting of the front panel of the lock allows you to do other things, the LabVIEW is just put on hold all these other events of the UI (like Stop button value change) and cannot handle them inside while the loop stops and allows outside while loop to go through again.

    You should have a parallel while loop to manage waveform graph.  You can use notifiers or queues or a motor of action FGV (see Ben Action Engine Nugget) to switch the starting or stopping of the update of the chart of waveform until the parallel of while loop.

  • What is the best way to run multiple instances of the class containing infinite while loop?

    Hello

    I have a several instances of the class (say a, b, c,...) that have the same parent and I want to run the same methods overridden to all instances in parallel.

    For example:

    a.init ()-> a.run ()-> a.stop ()-> a.run ()-> a.stop ()->

    b.init ()-> b.run ()-> b.stop ()->->->

    c.init() ->           ->             -> c.run() ->               -> c.stop()

    ...

    See the attachment for more details.

    The problems are now:

    1. the 'run' - method does not return until it receives the external trigger

    2. everything to run methods return in a different time

    1 chip means I can't use autoindexed for loop because in this case b.run () will have to wait before the end of a.run (), right? Is it possible to run to the loop in parallel?

    2 chip means that an object must be able to run and stop independently from others.

    What is the most elegant solution? The solution copy - paste in the attachment works for 3 instances, but there are currently 10 and more is coming.

    Juha

    In fact, what I wanted to know was "how to add the 'P' loop '... Easy, after you ask the right question.

    In the attachment, there is a test.vi that has two numerical indicators in a certain time-infinite loops. If I leave the parallelism, the two digital are incremented infinitely. If I don't allow parallelism, only the first is incremented (he never leaves the infinite while loop).

    To solve my original problem, I can make an init-start-stop branch within a loop-parallel-indexing for and make sure that there are the same number of instances of loop as there are objects in my array of objects (object array is an autoindexed in the loop for).

    Also good point about the vis environment. I should also add that.

  • How to increase code efficiency in a while loop (using PXI5105 for sampling outside signal digitalizer)

    Theoretically, we want the PXI-5105 (digitizer) have 302 record with each record has a 1260 sample (the save operation is inside a while loop) in approximately 30ms, however we have found that for each period (30ms), the PXI5105 only perform about 10 records. It is so wired. I wonder if the operations inside the while loop consume more time (for example 3MS), so that he cannot have 302 records even the PXI-5105 have 60 M/s speed of sampling. Is it true, you can find my labview code and if possible can you give me some suggestion in the most short time of operation of the loop.

    Please find attached labview code.

    Hi g_l_g_s,

    The digitizer PXI-5105 acquires data at the speed that you specify and stores the data in its memory embedded (up to 512 MB). The data is then sent to your computer when the Multi Fetch Cluster.vi is called. In VI that you posted, you are only fetch record during each while the loop iteration. If you want to retrieve 302 records you will need to specify 302 files in the horizontal Timing.vi to configure. For more information about scanners, you might find the DevZone, hereuseful.

    To determine the amount of time it takes for each while the loop iteration, you can consider using the structure of code in the example comparison community calendar, which is located here.

  • structure of the event + while loop

    Hello, I am trying to understand how to unite two while loops in attached VI for half a day

    The first loop creates a state machine solid which reacts on each key and runs one of the structure cases. (that part works very well)

    The second loop, always generates the random number, but it stops the generation during the time where one of the structure cases events are executed. (this is the part ticky)

    Any suggestions?

    If you want your random number to stop so that the user triggered events are running, you should be able to simplify your design a lot.

    It can be done with a loop using the case of timeout.

  • Retaining the last value without a while loop

    Hello

    I'm using LabVIEW 2013. My VI is attached. I'll send in a 'Curr. Random random numbers TestPlan Row"time. I'm eager to keep his last number, whenever this VI is not called and then reset the value to its new value whenever the VI is called again and a new number has been sent. Also attached is a screenshot at the VI.

    Please note that I can't use a WHILE loop, so it must keep its value in a different way...

    Thanks in advance for any help!

    SM

    Maybe a feedback node?

  • convert loop timed to normal while loop

    How convert a while loop time normal while loop with exact same properties and performance?

    I have donot need to worry about the exact date. But it takes the timed loop time will be run similar to loop.

    And also, is there any issue encountered when we use Timed loop? problems such as that crashing exe?

    Hello

    1 kHz is the used base clock. Then, you decide to use 10 as period (dt) which is 10 ms.

    The clock is selectable in real-time systems, you can use the 1 MHz clock, giving resolution µs

    But for your needs, using 1 kHz clock with dt = 10 and using a ms of waiting with 10 connected to it is exactly the same.

  • Functions don't run when a loop running in a while loop

    Hi all

    I have a loop within a while loop. All main functions are running in this while loop. However, once the for loop executes other functions in the while loop don't work anymore until the loop for stop execution. Could someone help me with this problem? Thank you.

    Kind regards

    Nicky

    Hi Nicky,

    Ah, well I don't have much suggestions but maybe you can try with a conditional for the loop. I've attached an example. You can go through it. I don't know if it's a good idea to use this way, but again, if this can help, so I'm glad that.

    To create a condtional for loop, place a normal for loop on the block diagram, right-click and select terminal condtional.

    Kind regards

    Amine31

    (Give congratulations to good answers and Mark as a Solution If your problem is resolved)

  • CPU utilization while loop

    Manual LabVIEW declare a while loop must always contain a "wait for ms" vi to unlock the task for this period.

    However, I thought that it the same fate if I use the same timeout ms for the timeout of a structure event inside the while loop

    and omit the "wait for ms" vi.

    Unfortunately the time-out of the structure of the event does not seem to unlock the task so that the façade reacts very inert in this case, even if it reacts
    prompt in either case.

    Does anyone have an explanation more in depth of this behavior?


Maybe you are looking for