How to end consumer loop

I am using producer/ consumer pattern to separate data acquistion and processing. The consumer loop is much slower than the producer loop. If I put "release queue" outside of the producer loop to stop the consumer loop, the consumer loop can just run once. But I need consumer loop to run same times as producer loop. So I did not use the release queue to stop the consumer loop but used the error connecting with  "stop if true" in the consumer loop. The producer loop and consumer loop are in a sequence structure. It seems that the sequence contains producer/consumer loops can never finish to enter into the next sequence. I think that producer loop and consumer loop have all stopped because their iteration numbers stop increasing at certain time. But the vi can never go into the next sequence. So I am very confused about that. If I put "release queue" outside of the producer loop to stop the consumer loop, the vi can finish this sequence and go into the next sequence. Do anyone know how to solve the problem?

Sophia,
The idea of passing the stop command via the queue is that it will be at the end of the queue - after all the data.  The consumer loop will see the stop command after it processes all the earlier data. In this case it might be better called "End of Data" rather than "Stop." 
The sequence structure is totally unnecessary.  Use dataflow to handle the initialization and  completion code.  The sequence structure will definitely proceed to the next frame when all the code within the current frame completes execution.  If the iteration counts have stopped increasing it may mean that the loops have stopped running or that the producer is blocked, waiting for something within it to finish so it can go to the next iteration.  It is also possible that the consumer loop has started an iteration but no data is in the queue.  Since the timeout is default at -1 the Dequeue will wait forever for data.
Please look at the style guides.  Use left to right wiring and avoid hiding wires behind other objects.  Also try to keep the diagram to the size of one screen.
Parallel loops should always have some kind of wait or delay to allow CPU resource sharing.  In the producer loop the data acquisition VI may provide that function.  In the consumer loop the easiest way to get a delay would be to change the Dequeue wait time to something other than -1.  You also should check the Dequeue Timed out? line if you use timeout for the delay.  If it is true, then the data is not valid and should not be analyzed in the for loop.
You probably only see the last of the 10 spectra. Unless the datasets are rather large, the loop will probably run too fast to see the others.
Lynn 

Similar Messages

  • Newcomer to Java.. how to end a loop?

    hi,
    what is the difference between:
    return;
    break; and
    continue;
    ?

    It should also be noted (if it hasnt) that you can LABEL loops
    and break out of specific loops by name.
    http://www.devx.com/tips/Tip/31853
    X:
    for (int i = 0; i < x; i++) {
       Y:
       for (int j = 0; j < y; j++) {
          Z:
          for (int k = 0; k < z; k++) {
             if (some_condition) {
                break Y;
    }

  • How to treat error handling in the consumer loop in the queue message handler structure?

    Hi,
    I'd like to know how to stop the producer loop(event loop) in the QMH structure when the error happened in the consumer loop.
    I've construct a demo code by myself as the attached image, but it's a pity that I have to create a recdundant indicator "End" to trigger the value change event to stop the program. This is not a good way to do it. Could someone give me some better idea how to deal with it? Very appreciated to you sharing ideas.

    Concerning your doubts about the "traditional" implementation of this pattern, I hear you. As I have written many times before, its main benefit is that it is easy to explain in a training class. It unfortunately has a lot of drawbacks.
    Tim's suggestion about User Events, is a good one. But to use it to the best advantage, you will need to get away from having everything on one block diagram. If you think about it there is no real need for the two loops to be on the same block diagram and a lot of really good reasons for them not to be. For example, if they are in separate VIs, they can both be event driven and any communication problems between loops evaporates.
    Its also more modular, easier to maintain, more reusable, etc...
    Check the link in my signature.
    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

  • How to start AND end a loop using a Boolean Button set to "Switch When Released" operation

    I have a Boolean button set to "Switch When Released" operation. When I press this button (now it's in the On state) I want to run a loop that does something continupously (for now, let's say it displays a simulated sine wave) until I press the button again (now the button is in the Off state) in which case, I want to end the loop. I am wiring my button to the loop condition that's set to "Continue if true" and have a "Wait Until Next ms Multiple" of 200 ms (I tried up to 500 ms). When I run the VI and press the button the first time, I see the sine wave displayed. But when I press the button again, nothing happens. It looks like it does not respond to the user interface. What's happening. What am I doing wrong? I'm using an Event Handler design pattern. I've also tried the Producer/Consumer (Events) design pattern. But I don't imagine the particular design pattern should make a difference. I've attached my code. Thanx.
    Fataneh
    Attachments:
    My_Event_Handler.vi ‏107 KB

    A simple solution would be to harness the timeout event, where you would put your data simulation. No need for parallel loops and local variables.
    The event timeout is starts out as  -1 (infinite) but pressing the start/stop button toggles between a 200ms and an infinite timout whenever it is pressed. Since the evet structure always runs, all other events (e.g. stop) are also serviced.
    Please ask if anything is not clear... Good luck!
    Message Edited by altenbach on 07-13-2005 04:20 PM
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    My_Event_HandlerMOD_CA.vi ‏116 KB

  • Consumer loop very slow, queue size grows. How to speed up my consumer loop? As the array grows the slower it gets.

    LabView version: 2012
    OS: Windows XP SP3
    Hardware: USB NI cDAQ-9174 NI-9221
    Application: Oscilloscope
    I'm relatively new to LabView and I'm currently experiencing some performance issues with my project. I guess it has something to do with the way it's programmed. I'm hoping to get some tips from you guys.
    This is my producer loop. It should be capable of acquiring 100 000 Samples/s. I guess I've done this the right way and can't really be improved. Or am I mistaking?
    This is (part of) my consumer loop. It's too slow, the number of elements in the queue keeps getting bigger. I'm doing two types of calculations on the queue data. One for changing the scalling (a multiplication), one for changing the y-position (a summation). Because each time there are 10 000 samples acquired I have added an extra loop (inner loop). This loop splits the array into x samples when the requested samples are smaller than 10 000 or adds them when the requested samples are bigger than 10 000. This depends on the user input (time/dev).
    For example: when the user request 100 seconds of data to be plotted on a graph we get an array of 10 000 000 x 8. Is this considered big? Enlarging the array to that size is very very slow, the queue builds up rapidly.
    I don't know what really slows it down or how to 'debug' this properly. Transposing the array twice seems avoidable?
    Maybe I'm doing this in an inefficient way? Any thoughts that might help me?
    The VI's are attached.
    Thanks for your input.
    Attachments:
    Scope.zip ‏199 KB

    Thank you for your replies so far!
    LV_Pro,
    I agree it is a bit silly to plot more than 2000 points. I will change this. But even without a graph, the consumer loop seems to be unable to handle the speed.
    tst,
    1. Ok, I will change this
    2. Thank you for pointing this out. I implemented your technique and have some increased performance.
    Still not the speed I would expect from LabView. The system is 'stable' with a sample rate up to 100 Hz, increasing this makes my queue overflow.
    I must be doing something else wrong... Anymore ideas?
    Latest version of program in attachment.
    Attachments:
    Scope 1.zip ‏211 KB

  • Consumer loop - unpredictable queue rate

    Hello everyone,
    I'm developing producer-consumer structure on RT and I have a strange problem. I'm receiving data from FPGA in producer loop and send it through queue to consumer loop. Next, they should go through network stream to Host. Because of the fact that consumer didn't keep up with producer (queue overflowed), I started to slow producer (the cost of this action is sending more data). It didn't help, so I added case structure in producer to send just half data to queue (the ones on TRUE in shift register).
    This is the moment when I realized that sometimes closing LabVIEW environment and opening it again effects in speeding up queue transmission. Then, I can even accelerate producer loop and my queue doesn't overflow! And I can stop and run my program and it still works well.
    I end up closing and opening LabVIEW and running my program all over again waiting for it to "click", because when it finally happens, I have no problem until next LabVIEW session.
    Anyone have any idea what I could do wrong? Or how could I fix it?
    Solved!
    Go to Solution.
    Attachments:
    ProducerConsumerProblem.png ‏56 KB

    Hello everyone,
    at the beginning I'd like to apalogise for such late response. Something important came out and took a while, but I'm back now.
    Firstly, aputman
    - if I give "-1" to timeout I wouldn't be able to stop the loop if error occures after executing the loop. Maybe I care too much, but it shouldn't cause trouble here.
    - I use 2 loop because I had some problems with network streaming data with just one timed loop and I found on LAVA forum someone's problem with TCP/IP. There was an advice to insert queue between receiving data from FPGA and streaming it to Host. The problem was connected to overflowing so tried implementing the advice.
    ValkoA,
    Reading your post I decided to change my code a bit. It occured that in spite of the fact that I want my timed loop to execute every 200ms (=collect 20'000 samples during each iteration) it collects between 10'000 and 30'000 samples FXP <14,5> (because of the feedback from Elements Remaining in FIFO, I think). So I changed "Number of Elements" in FIFO to 20'000. I made fixed size of queue buffer, too. Queue worked well then and my program was able to send data from RT to Host 20'000samples/200ms FXP <14,5>. However, it's too slow for me, and I need better quality than <14,5>.
    Now I'm wondering if network stream is able to somehow slower all the process? When I tried making structure with just one Timed Loop with FIFO_Out and Write_to_stream inside it (so without any queues or producer/consumer), it couldn't send my arrays with FXP <20,5> fast enough - I received them on Host (network streaming) with latency, regardless how fast was my Timed Loop. For ex. my RT loop was during its 1000 iteration while my host was taking only 700th array of data. And then, suddendly reader on host stops throwing anything, and after a while it starts throw data very fast. There's a moment that the reader endpoint on host give ma arrays of zeros, and finally sometimes program stops. Maybe networks stream overflows.
    Sorry for such long description...
    And now here is my question: can I do something to speed up network stream a little? Single Timed Loop with FIFO_Out and Write_to_stream inside doesn't work at all for FXP <20,5>, regardless how fast I execute Timed Loop (program crashes). And the idea with producer/consumer doesn't work here too (queue overflows). FPGA sends data with 100kHz frequency. I fixed size of Network Stream.
    Thank you

  • Synchronizing 2 graphs / producer-consumer loop stuck

    I have a pretty huge VI here, so I created a smaller one, which shows my problem.
    First thing is, the user has to set some parameters, before the VI is running. So, I created a sequence with a while loop. If the user hits the button, the loop ends. That works pretty well.
    In my huge VI I am doing data acquisition. The user hits the button in order to acquire data, checks the data and the data is saved when he hits the acquire button the next time.
    Next thing is, I have two graphs. When the user zooms one graph the scale of the other should be updated automaticaly. Therefor I created a loop with a event structure in it. If the user hits the button in order to acquire the next set of date, the loop ends. So far so good, this works pretty good as well.
    But now - if I zoom the graph before I hit the button in order to end the while loop, everything gets stuck. I don't know how to get rid of that behaviour.
    Please do not suggest anything like getting rid of the producer/consumer loop, since I specifficaly need everything that is in the VI for a certain purpose.
    If you need any additional information, please just ask. I hope my problem is described well enough so far.
    Attachments:
    zoomprob.vi ‏41 KB

    thanks for the response,
    the upper event structure will trigger the data acquisition process, so I don't want to have any time out value unless the user wants to start the acquisition process.
    the lower event structure will take care of the state when the acquisition is done, but the user wants to examine the aquired data. Using a longer time out will not be a disadvantage, but I think it will not solve the problem alone.
    At the moment everything works fine, if you use it how it is ment to be used. If you aquire data and then mess up with the graphs scale, everything is good. But if you try to manipulate the graph and then acquire data, it gets stuck. Apperently, that is not how it's ment to be used - but you know what users often do...
    Unfortunately the highlight execution is of no particular use. If I turn it on and manipulate the graphs scale, the vi gets stuck, but no specific process is shown in the code. Apperently it is waiting for a event, but it isn't triggered. So, beeing able to disable an event structure and enabling it later would solve the problem, for example.... I haven't found any solution for dealing with that, unfortunately...

  • How to notify Consumer who is blocked at ArrayBlockingQueue.take()

    Suppose we have the following codes:
    Producer
    while (!stop) {
    queue.put(sth);
    Consumer
    while(!stop) {
    queue.take();
    And suddenly, Producer is stopped while Consumer is hanging on queue.take()&#12290;The queue is empty and it will be empty forever. Then Consumer will be blocked forever. How to solve this problem?
    Is Thread.interrupt() necessary?
    I wonder if there is a better way.
    Thank you.

    I see.
    But I am afraid it's not a good way because this can
    only be used to notify Consumer. Who is going to
    notify the Producer?
    Therefore, I decided to use Thread.interrupt and set
    a variable to end the loop.Using Thread.interrupt is, of course, always an option. But in this case I think you could also make use of BlockingQueue.poll:
    //Consumer
    while(!stop) {
    ElementType e = queue.poll(100, TimeUnit.MILLISECONDS);
    if(e == null)
      break;
    // process element
    }

  • Producer consumer loop for serial comms

    I have an application where I am trying to read and write to a serial port using a producer consumer loop.  My producer consumer loop seems to work fine until I put the serial comm VIs in the consumer loop.  Prior to that my event structure in the producer loop seems to work fine and all the controls on the front panel send commands into the queue and the expected reaction happens in the consumer loop.  When I put serial comm VIs into the consumer loop the application will read the serial port but none of the other controls on the front panel ever get any reaction from the consumer loop.  I am not sure if I am using the producer consumer loops correctly when using comms at the same time.  Any help would be appreciated!!
    I have attached the VI for your inspection.
    Attachments:
    pinger comms.vi ‏65 KB

    You could probably continue with your original architecture as well.  Just put the check for bytes at port in the Read case of the consumer loop.  As you said, it takes 1-2 seconds for the device to send data.  So the original architecture didn't work because you were queueing up 20 reads per second in the timeout case, but the consumer loop was taking up to a second for a single byte to come in.
    If you check for bytes in the consumer loop, if none are there, the Read case will end quickly and won't wait for that byte to come in.
    You should also probably increase the timeout of the event structure to 100-200 mseconds or even more.  The event structure would still respond instantaneously to user interface events.  And you would only be generating the timeout case a few times per second.  Which means when a byte comes in, it would probably be sitting there only 100 mseconds or so before you read it.  Unless you go click happy and generate lots of other  events not allowing the timeout case to run.

  • Timed Loop in Producer/Consumer Loop

    Hello!
    I have a producer/consumer loop LabVIEW program setup to allow me to properly capture images that are quite large (8MP) at approximately 14 frames per second (FPS). The program works great when the consumer loop is a 'while loop' (records at 14fps no problem), but I wanted to make it into a timed loop, so that I may vary the FPS as required. An oddity arises when I do this. Anywhere below 12fps, the loop works fine and the data is recorded properly. However, when I bump it up to 13fps, the consumer calculated FPS goes haywire and starts jumping between ~9 and ~13fps (data processing gets bogged?). When I set the required FPS to 14, the loop executes at a steady 7FPS maximum. Is there something I can do to rectify this situation?
    I have attached my .VI
    Thanks in advance!
    Solved!
    Go to Solution.
    Attachments:
    ProcessSplitJPG-FPS.vi ‏100 KB

    Palanski,
    Are you using LabVIEW Real-Time? Timed loops in a windows OS don't really increase determinism more than a while loop with a wait until next multiple timer. Before you changed the producer consumer loop to include a while loop was the programming running correctly? You may also want to vuse the VI analyizer to see how long things are taking to run. I would leave the producer consumer loop in the traditional set up and change the FPS by controlling the wait timer, after benchmarking your code this should be done the same way as you have it for the timed loop
    Sam S
    Applications Engineer
    National Instruments

  • How to resolve the loop in universe level

    how to resolve the loop in universe level

    Hi, Kashim
              In univese level loops resolved by Chasm Trap and Fan Trap methods.
    Chasm Trap:  A chasm trap is a type of join path between three tables when two many-to-one joins converge on single table, and there is no context in place that separate the converging join paths.
    There is "many-to-one-to-many"relationship beween the three tables in the universe structure.you can define a context for each table at the many end of the joins.
    A chasm trap is not dependent on the object types, the query could be made up of only dimensions,only details,or only measures,or any combination of the three types with the "many " tables for chasm to occure.
    you can also detect the chasm trap Automatically, tool---->Detect context
    To resolve the chasm trap, you need to make two separate Queries and than combine the results Depending on type of objects defined for the fact tables and the type of end user environment,
    Fan trap: it is occured when there is a "one-to-many" join to the table that "fans out " into another "one-to-many" join to another table.
    Avoid fan trap: The first place by relating all measure objects in the universe to the same table in the universe structure,Avoid placing a measure on anything other than the last table in a in a table path, which is the table with the "many" cardinality attached to it.
    This methods is not recomended as it only works for measure objects and may result in inefficienies in processing the query. This resolution works the same for chasm and fan traps.
    you can create more alias tables based on your requirement in single universe. and it is true conext, when two or more paths.
    Theese methods also apply for resolving loops:
    Short cut join also one method for resolving loops
    Aggregate aware function used another waty for resolving loops
    if you are not resolving the loop result is  redusing the number of records.

  • Basic Producer/Consumer loops for a newbie

    Labview neewbie here.
    I was looking at Producer Consumer loops.
    Can anybody give me a very basic explanation of how to set one up.
    I want to take readings from a HP 53131A counter and store them in an excel spreadsheet.
    I understand the part about labview slowing down as it opens the Excel file, and a seperate loop will help solve this.
    But I dont understad how to set up the Que function.
    Thanks.

    Multithreading will not make excell open faster but using concurrency you can have more than one operation operate ate different speeds.  The nice thing about the produce consumer model is that the if the consumer is slow or unreliable (freeses up) the producer doesnt care and will continue.  To use a queue is very simple, 1. create the queue, name it(optional) and give it a data type (ie int, array of floats ...)  in the produce loop use the enqueue vi to add items as needed to the queue, in the consumer dequeue these items (using a timeout = -1 the loop will wait for a new item and not consume resources)  the consumer can process the data acquired in the producer loop.
    Paul Falkenstein
    Coleman Technologies Inc.
    CLA, CPI, AIA-Vision
    Labview 4.0- 2013, RT, Vision, FPGA

  • How to end a procedure immediately

    How to end a procedure immediately before it is ended normally when some exceptions that I can't anticipate occur.

    If you want to stop the process, you have to propagate the exception through your PL/SQL blocks.
    Let's see this 2 examples :
    SQL> Declare
      2    ln$result number ;
      3    procedure p1 ( pn$input IN NUMBER )
      4    is
      5      ln$i pls_integer := 10 ;
      6    Begin
      7      ln$result := ln$i / pn$input ;
      8    Exception
      9      when zero_divide then
    10      dbms_output.put_line('** value error with : ' || pn$input ) ;
    11    End ;
    12  Begin
    13    For i In -5 .. 5 loop   
    14      p1(i) ;
    15   dbms_output.put_line( 'calulation for ' || i || ' = ' || ln$result ) ;
    16    end loop;
    17  Exception
    18    when others then
    19      dbms_output.put_line( 'stop with error : ' || sqlcode ) ;
    20  End;
    21  /
    calulation for -5 = -2
    calulation for -4 = -2,5
    calulation for -3 = -3,33333333333333333333333333333333333333
    calulation for -2 = -5
    calulation for -1 = -10
    ** value error with : 0
    calulation for 0 = -10
    calulation for 1 = 10
    calulation for 2 = 5
    calulation for 3 = 3,33333333333333333333333333333333333333
    calulation for 4 = 2,5
    calulation for 5 = 2
    PL/SQL procedure successfully completed.the main procedure is not stopped by the exception
    let's propagate the excexption from the p1 procedure (line 11) :
    SQL> Declare
      2    ln$result number ;
      3    procedure p1 ( pn$input IN NUMBER )
      4    is
      5      ln$i pls_integer := 10 ;
      6    Begin
      7      ln$result := ln$i / pn$input ;
      8    Exception
      9      when zero_divide then
    10      dbms_output.put_line('** value error with : ' || pn$input ) ;
    11      raise ; -- propagate the exception
    12    End ;
    13  Begin
    14    For i In -5 .. 5 loop   
    15      p1(i) ;
    16   dbms_output.put_line( 'calulation for ' || i || ' = ' || ln$result ) ;
    17    end loop;
    18  Exception
    19    when others then
    20      dbms_output.put_line( 'stop with error : ' || sqlcode ) ;
    21  End;
    22  /
    calulation for -5 = -2
    calulation for -4 = -2,5
    calulation for -3 = -3,33333333333333333333333333333333333333
    calulation for -2 = -5
    calulation for -1 = -10
    ** value error with : 0
    stop with error : -1476
    PL/SQL procedure successfully completed.Francois

  • Why do i get error 1122 at dequeue element in consumer loop when i hit stop button

    when i hit stop button from vi, the producer loop stops, the consumer loop gets an error and stops without reading all the elements and then my check queue status loop continues to run becuase it never goes to 0.
    Any help?
    Solved!
    Go to Solution.
    Attachments:
    READ SIC AND LOG.vi ‏48 KB

    matt198717 wrote:
    i believe this is what you were talking about.  If youve got any advice or pointers for this VI please let me know.
    1. Your consumer loop should be using the Dequeue Elements.
    2. Your consumer loop should actually be releasing the queue in the STOP case.
    3. There is also no need for the polling to see how many elements are left in the queue.
    4. Your wait in the producer loop shold only be when there is no data in the buffer (you have it in the wrong case).
    5. Do not use the value from the Bytes At Port to tell the VISA Read how many bytes to read.  You tell the VISA Read to read more bytes than you would ever expect the message to be.  Let the termination character stop the read.
    6. Use a VISA read right after intializing your port to sync up your messages.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines
    Attachments:
    Serial Port Producer Consumer.png ‏32 KB

  • End of loop in FindFirst

    Hello everybody,
    I should be very interested to know if anybody has already seen such messages.
    When I launch a FindFirst on an OraDynaset, I see a message with "End of Loop" as a title, and in the text :
    Ins: 1, BS: 0, BV:0 VS:1
    and an OK button.
    When validating, following messages run :
    Ins: 2, BS: 0, BV:0 VS: 2
    Ins: 3, BS: 1, BV:0 VS: 0
    Ins: 4, BS: 1, BV:0 VS: 1
    Ins: 5, BS: 1, BV:0 VS: 2
    Ins: 6, BS: 2, BV:0 VS: 0
    until 8, then an error -2147417848 (=hexa 80010108)
    the invoked object has disconnected from its clients.
    I do not remember I placed such messages in my code, anyway I did not find "Ins" in my modules, except for the Instr function. So, maybe this is something Oracle coded ?
    Does that recall anything to anybody ?
    I could obtain that after repairing Ms-Office, before that I only obtained the message telling that "Excel has met a problem and must close, we are sorry about ..."
    Then I saw that objects had a tendancy to disconnect, and I could resume the code after reconnecting them in the execution window.
    I am going to report presumed net micro-cuts to the support, but this does not give me the meaning of the messages I read, nor tell me what I must do.
    Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    Microsoft Office Excel 2003 (11.8033.8107) SP2
    ODBC 3.525.1117.0

    Hi
    MOVE 'TOP_OF_PAGE' TO ls1_events-form.
    what is thie c_form_top_of_page instead write as above ,i hope it will work
    Regards
    Pavan

Maybe you are looking for

  • I get error -43 when I try to upgrade to ios 5 for iP

    like this, ive been busy lately and ive not had the time to upgrade my 4.3.3 to 4.3.5 but now I see that ios 5 is out I tried upgrading to it. downloading was ok, but when the backing up process was happening, when the green bar reaches the 'k' for b

  • Widget on same screen

    Upgraded from Snow Leopard to Mountain Lion and now when I click on my dashboard icon the screen "wipes" and the widgets are available...I really preferred the widgets popping up on the screen you're viewing - for instance, the calcuulator is often u

  • Again submitting item position setting problem....

    Dear Apex communities; I have submitted this problem many time but I have not gotten any reply. Please resolve my little problem; I want to set apex item which created in form condition not in tabular form; but I want to set these item's position as

  • Airport Express Not Working with iMac G4 and HP laptop

    Ok I am really frustrated with this. I had my Airport Express configured to my mac and my old roommate's mac fine. I moved and just tried setting it up with my mac and my new roommate's PC laptop. It did not work. I tried connecting a router to see i

  • Restoring data from previous device not working

    QUESTION: My question is, am I able to transfer data from my previous Blackberry 10 device and onto my new Blackberry 10 device if I do not have my old device anymore? (Keeping in mind that I have the previous device data backed up). Problem: Ok so: