Sequence structure flat inside the timed loop and execution order

I have some problems trying to implement a flat sequence structure when you use a loop timed on a target of cRio VI

I tried with or without the while loop around the structure of sequence flat, and I also tried to replace the 'Non-deterministic loop' with a timed loop

The problem is that the program seems to run only once, then get stuck somewhere

I am writing a program that performs the following operations as soon as possible:
1. read the Pos_MC of entry on the FPGA
2 send the value of Pos_MC to the VI target (on cRio CPU)
3. calculate a value of output based on Pos_MC with a PID block ("exit PID')
4. send 'PID output' to the FPGA
5 write "PID output" analog output "MOOG".

In addition, I want the program to return the measured value "Pos_MC" to a host VI for the recording of data

So that the output of PID is calculated and sent to the FPGA as quickly as possible, I placed a flat sequence structure to ensure that it happens before you send the output to the nondeterministic loop for recording data

Also, I want the digital input 'Stop' to be able to stop the loop deterministic (the timed loop)

I read much more entries than that and the help of several PID and exit, but I rewrote the code for a single entry and exit to make it easier to illustrate

Screenshot of the code is shown in 'target code.png' and 'fpga code.png.

The VI themselves are attached in the next post (cannot attach files of more than 3)

Question 1:
Any advice on how to get this race? Thank you!

Question 2:
Is also my correct understanding in that, using this structure, each 0.9ms (fpga loop time) comes the following:
1. the input ("Pos_MOOG") is read on the fpga
2. the production of PID is calculated on the cRio with some delay to computation (for example 0.1ms)
3. the output of PID is then written for analog output "MOOG" in all about 0, 1 - 0.2ms
4. the FPGA program then waits until 0.9ms spent and repeat the process

As opposed to the next pass whenever performing a loop is started on the FPGA:

1. the FPGA reads the input and written on the output (the output of the execution of the previous loop PID)

2. then the entry is sent the cRio, PID output is calculated and sent to the FPGA

3. the new release of PID is maintained until the next time through the loop

Thank you!

PHG wrote:

Thanks for the input guys, any advice as to how I could get the feature in scenario 1?

I still say that the best route is just putting all the logic of the control in the FPGA.

Other alternatives include 1) the use of DMA FIFO sedn data back or 2) use interruptions so that the FPGA code can not read the output level until the RT.

DMA FIFOs are usually very limited, and I would not use them in this situation since I belive said it this code to do for the many outputs.

Tags: NI Software

Similar Questions

  • Impossible to click on the buttons for the timed loop.

    Hello!

    I have a loop that is timed with a pace set by the user. And when the loop is running, I can't push any button of my GUI to stop it...

    I have to wait until a mistake or I stop the race.

    I can't put the diagram is too big and I think I don't have the right, but you have ideas?

    Ask me for more details.

    Thank you

    bejard wrote: timed loop is just in a structure of the event and I put 10 ms or 100ms.

    The program runs correctly (with this loop delay of 10ms/100 ms) like in the beginning, but I can't push any button or even change the tabs during the loop.

    You shouldn't have long extensions inside the event.  Which is supposed to stop your timed loop?

    I think that you have the option "Lock the front until the end of the occurrence" lit.  It will not press anything, until the end of everything for this case (including the timed loop).

    According to my experience, using a loop timed in a Windows system is a complete waste and often adds more overhead and questions.  Instead, I really think you need to use a State Machine.  When the button is pressed, you tell your state machine to move to the State the code inside your timed loop tracks.  You can use the State with the structure of the event to time your loop.  If you can go behind your state of event to your processing loop structure.  Just set the timeout on the structure of the event at any rate of loop you really want to.

  • Slow loop inside the quick loop

    It's my first week of work with LabView so perhaps the answer is very simple.

    Here's my question:

    How can I include a slow loop (event B) inside a quick loop (event A)?

    What I would like is for event B run every 1000 milliseconds, and the event has every 100 milliseconds.

    Where event is a position control loop and event B a simple write to a file of any measure.

    Any recommendations on how I should do this?

    You can use an Express VI of time spent inside the quick loop to see if it is time to perform the slow loop.  I took the liberty to not use a loop for your "event B" because it sounded like you want just the rhythm with the event.  Place B events in the real case of the box Structure. The design of producer/consumer model is the way to go if you are developing a complex application. This will make if your problem is relatively simple.

  • Schedule iteration five FOR lines inside a timed loop...

    Take a look at the attached code simply run five different but identical TO the lines inside a single loop timed.

    It is interesting to note the timings of each loop iteration FOR: 1,1,2,3,0 milliseconds. The most curious is the moment of the last loop, which for the most part indicates 0! Not only this, if you remove the fifth loop, the fourth a bed 0.

    I can't understand this behavior? Also if LV deals in parallel different loops why should there be a gradual increase in the synchronisation of successive loops?

    Thanks for any help.

    First, 0.2 ms is not statistically significant, you must increase the number of iterations by another factor of 10, at least.

    A quick loop uneducated wait FOR will grab the CPU for much more than one iteration, so regardless of the loop is first online will repel the other loops and run until LabVIEW decides to switch to another loop. The number of cores CPU do you have?

    You can force a release after each iteration by placing a 0ms wait inside each loop FOR. While all time will be significantly longer because of the overhead of increased switching, all loops will be now around the same time.

    You can also read this for more information.

    I don't know that anyone else can provide more details in the jargon of right. I don't know the correct terms for all this.

  • While loop inside a timed loop

    Hello world!
    I use:
    -LV 7.1 + real-time;
    -compactFieldpoint;

    When I put some time, I noticed a strange behavior, loop inside a timed loop.  Let's fix loop timed with these settings:

    -Clock 1 kHz
    -1 ms period (Yes, I know it's short...)
    -offset 0 ms
    -Stage 0
    -Take the period of absence (ON) and maintain initial Phase (ON);
    -Timeout:-1.

    So, inside the loo, I put a traditional while loop, waiting (for example) an event will occur, and if this event doesn't happen, my cFP-2020 crashes! I mean, it becomes inaccessible for the debugger, and also, if I run a ping at his address, after a few cycles it becomes inaccessible as ping!

    Obviously, that statement of code lock the fieldPoint, because if I remove the inside while loop all work.

    I know that with 1ms duration, timed loop always the finishing of the delay, but I put the scrapping period missed and timeout-1.
      
    It seems to me that sometimes timed loop add overload heavi programs, I all so that the loop according to the tasks, even if my application has be in real-time!

    Tips welcome! Good day!

    Graziano

    Thank you very much for your answer!
    I'll test the entire application and then look for the best practice... but I still think I'll replace it timed with while loops loops...

    Good day!

    Graziano

  • Oracle 11g: engage inside the outer loop or loop

    Hello

    Could someone pls help in this regard.

    My PLSQL program retrieves approximately 400 000 thousand records in cursor loop and cl, it takes more than 4 hours to complete IT.

    I commit every transactions inside the cursor loop... This can affect the runtime performance?


    Also, pls suggest, can we use commit 400 000 transactions once it will be faster? (or) the performance of baskets longer than the current situation.


    My goal is to make the fastest program and expect to reduce the timing of execution of 4 hours to 1 hour...


    Appreciate your help...


    Program design: advice:

    a. Select 400 000 thousand documents in the cursor.

    b. inside cursor for loop to two new sql instructions written to get values and store it in the local variable (this value is used in the call to insert data), two sql statements are handled with no_data_found and too_may_rows logic implicit sql statements to intercept the errors of the company

    c insert statement.

    validation of d. inside the loop (batch mode: nowait)

    management at the level of the procedure using raise_application_error exception e...

    Do not use the PL/SQL for data processing. SQL is a powerful language. Get the best out of him.

    Here is an example of using INSERT ALL. This is untested code and may contain syntax and semantic errors.

    insert all
      into medicomread.aatable_permit_people
      (
            permitnum
          , lic_num
          , lic_type
          , bus_name
          , addr1
          , addr2
          , addr3
          , city
          , state
          , zip
          , ph1
          , ph2
          , fax
          , bus_lic
          , lic_original_issue_date
          , expiration_date
      )
      values
      (
            appt_ref_no
          , lic_num
          ,'Business License'
          , company_name
          , postal_address
          , null
          , null
          , null
          , emirate
          , po_box
          , telephone
          , null
          , fax
          , license_no
          , issue_date
          , expiry_date
      )
      log errors into err$_aatable_permit_people ('INSERT1: HEALTH CARD SPONSOR DETAILS') reject limit unlimited
      into medicomread.aatable_permit_people
      (
            permitnum
          , tt_contact_type
          , name
          , b1_contact_nbr
      )
      values
      (
            appt_ref_no
          , 'Applicant'
          , cname
          , userseqno
      )
      log errors into err$_aatable_permit_people ('INSERT2: HEALTH CARD BUSINESS USER DETAILS') reject limit unlimited
      into medicomread.aatable_permit_people
      (
            permitnum
          , tt_contact_type
          , B1_Contact_Nbr
          , Name
          , gender
      )
      values
      (
            appt_ref_no
          , 'Individual Health'
          , userseqno
          , patient_name
          , ***
      )
      log errors into err$_aatable_permit_people ('INSERT3: HEALTH CARD APPLICANT USER DETAILS') reject limit unlimited
    with t1
    as
    (
     select mr.appt_ref_no
          , mr.sponsor_name
          , substr(mr.PATIENT_NAME,1,79) PATIENT_NAME
          , mr.***
       from medicomdata.mc_register mr
          , medicomdata.mc_process_type_register mptr
          , medicomdata.um_users uu
          , medicomdata.um_companies uc
      where mr.patient_id     = mptr.patient_id
        and mr.pro_id         = uu.user_id
        and mr.facility_id    = mptr.facility_id
        and mr.process_type   ='OH'
        and mr.regn_status    = 5
        and mr.sponsor_name   = uc.company_name
        and uu.type_id        = 3
        and (add_months( mptr.issued_date, 12 )-1) > sysdate
    ),
    t2 as
    (
     select decode(ucr.license_category_id,'DED','DED'||uuc.license_no,uuc.license_no) lic_num
          , uuc.company_name
          , ucr.postal_address
          , ucr.emirate
          , ucr.po_box
          , ucr.telephone
          , ucr.fax
          , uuc.LICENSE_NO
          , ucr.issue_date
          , ucr.expiry_date
       from medicomdata.um_companies uuc,medicomdata.company_registration ucr
      where uuc.license_no=ucr.business_license_number
        and uuc.inactive=0
        and upper(ucr.request_status)=upper('true')
    ),
    t3 as
    (
     select uu.company_name
          , cname
       from (
             select uu.first_name ||' '|| uu.last_name cname
                  , row_number() over(partition by uu.company_name order by decode(usr.service, 'HCDC', 0, 1)) rno
               from medicomdata.um_users uu
                  , medicomdata.user_service_request usr
              where uu.user_id      = usr.user_id
                and usr.service     = 'HCDC'
                and uu.type_id      = 2
                and uu.inactive     = 0
             )
      where rno = 1
    )
    select t1.appt_ref_no
         , t1.patient_name
         , t1.***
         , t2.lic_num
         ,'Business License'
         , t2.company_name
         , t2.postal_address
         , null
         , null
         , null
         , t2.emirate
         , t2.po_box
         , t2.telephone
         , null
         , t2.fax
         , t2.license_no
         , t2.issue_date
         , t2.expiry_date
         , t3.cname
         , companyuserseq.nextval userseqno
      from t1
      join t2
        on t1.sponsor_name = t2.company_name
      join t3
        on t1.sopnsor_name = t3.company_name;
    
  • No related video and audio when using a sequence of nest in the source Panel and try to insert a clip in the timeline

    When I use a sequence of nest in the source Panel and try to insert a clip in the timeline, the video and audio are not related. Before this update (2015.1), I did not have this problem.

    Issue.png

    Hi Daniel,.

    I can confirm this matter and will get a logged bug. It is a pain, but after having been published in the sequence, select the audio and video components, right click and select 'Link' to link the components between them. Sorry for the inconvenience.

    Colin

    First Pro EQ

  • Timed sequences. Is this the right choice and how it works!

    Hello!

    I am a newbie in LV, and I am creating a VI that is able to fly a small filtration unit I have build in my engineering studies.

    I have to control three magnetive valves which are connected to the Do0, Do1 and Do2 digital output on my USB 6009 MyDAQ device port.

    I have to control the sequence in which the valves open / farm as to avoid damage to the sensitive som of pressure transmitters. How to program a sequence of controlled time that opens and closes the valves in the right order, and in order reverse, repeat the sequential once a user defined timing?

    I have looked at the 'timed sequence' but could not find a "down to earth" description on how to use it.

    Perhaps my problem is a little in general. In this case I can certainly help with precision if necessary.

    I hope someone can help me with my problem. Now, I spent 6 hours looking at different tutorials without a bit of luck.

    Thanks in advance

    Henrik


  • How to control the execution of a sequence of flat have the Cancel button

    Hello
    I have a question for you guys.
    Suppose I want to write a program to control a set of materials by sending commands via a serial port
    In fact, he calls a 'round '. Because a series of specific commands will send via a serial port at once specific time. What I call one a time Cycle.
    Between each send command steps there is a delay (waiting in range of Timing). The joint part of my VI.

    I was wondering how I can integrate a Cancel button which is able to act in any image of the flat sequence Structure?
    As you can see it is not everything in loops to have the best control of the program because I want to run commands in the series only once.
    Where to put the button 'Cancel' in frames?
    I want to show a confirmation message when the user clicked the Cancel button, and if the answer was 'YES' LabvIEW stops running flat sequence Structure and of the specific procedure to cancel (which is not included in above VI) takes place. Otherwise (by clicking 'NO') program continues to run...

    Note that home is just a simple version of what I intend to

    For example in some frames, it will be a while loop and so on...

    But there will be only on flat sequence at all

    Excuse me for my bad English

    Hi mostafi,.

    General answer: convert your flat sequence in a correct state machine States!

    Now, you can check your "Cancel" button after each State is treated...

  • Execution time of the timed loop

    When I run a timed loop, even a dummy, I have 100% CPU usage with "RT get CPU loads. The Profiler 'Performance and memory' and "execution trace toolkit" also indicate a maximum time of VI. Is this normal?

    What target RT do you use? If it's a FP, you will always have 100% of the CPU load due to the optimizatio performance.

    Best regards

    Fabio

  • run inside once timed loop

    I have a timed loop that monitors the equipment. Whenever there is an error I send a notification by e-mail. My problem is how to stop send e-mail whenever the time loop is executed. I tried placing email it inside a loop, but quickly realized that the whole of the loop itself is reiterted. Any help is much appreiciated.

    You can also consider using the first call? under the range of synchronization primitive.

  • How to get the value selected inside the forEach loop

    Hello
    I have foreach loop with a link inside command. It looks like in below:

    * < af:forEach items = "#{PagingBean.pages}" var = "item" > * "
    * < text af:commandLink = ' #{point} "id ="cl1. "
    * actionListener = "#{PagingBean.pageLinkClicked}" / > * "
    * < af:spacer width = "10" height = "10" id = "s1" / > *.
    * < / af:forEach > *.

    where PagingBean.pages is an array of integers.
    Now the links look like this * 1 2 3 4 5 * I want to get the value of the clicked link.
    Anyone please help me to get the value of commandlinks clicked in the bean

    Hello

    How about the text in the actionListener for the clicked commandLink and process accordingly?

    Ex:

     
                           
                           
    
    
        public void pageLinkClicked(ActionEvent actionEvent) {
            // Add event code here...
            System.out.println(((RichCommandLink)actionEvent.getSource()).getText());
        }
    

    Arun-

  • How to add the unique element (inside the while loop) to itself

    I have only digital output element that is in the while loop. Its value changes in each time the loop iteration. If lets say I want to adds the values of the ten first in iterations of the loop of this variable.  How can I do that.

    See attach image for more precision.

    Thank you

    JK

    Hi Joseph,.

    THINK THE STREAM!

    As the values are stored in the son and the shift registers (and NOT in any kind of variables), you must use these fundamentals of LabVIEW:

  • Sequence of creation of the images uploaded and codecs.

    Hey!

    I edit a video with mainly pictures of youtube (bulletins of news and journalists), I downloaded I have no idea what sequence setting should I use for this? Videos also have a different codec. How can I change this codec, and which one should I use so they all have the same codec? I have the first cc pro.

    First, you should figure out what codecs are... you can get an idea in Finder/Explorer, but MediaInfo (downloadable for free) is a very handy tool to have on your machine in any case. Open the drag and drop file from Finder/Explorer on it and go to the tree view and it will show you an amazing amount of info on this file.

    Media Info: https://mediaarea.net/en/MediaInfo

    You'd be able to get the codecs, speed & size, all kinds of useful things.

    Once you know say sizes of images, you can determine what image size should be your 'base' image size for your project. You can always put the "biggest" files on it, but top-sizing of the smaller files always shows a degradation.

    Neil

  • Can Media Encoder take a sequence of images in the watch folder and turn it into a video file?

    I use OSX and Media Encoder 6 (6 pm) and does not know how the spyware file take a .jpeg or .dpi sequence and turn it into a single video file.

    I tried to copy all photos in the folder of the watch, who made 60 video files individual (one for each image).

    I tried to make a subfolder in the watch folder and copy images in there... to which Media Encoder did nothing.

    What Miss me? Media Encoder will take image sequences and make out like an audio-less video for me?

    Thanks for any imput.

    Hi action_packed,

    This is the documentation: http://helpx.adobe.com/media-encoder/using/add-items-encoding-queue.html

    Still image sequences are not supported as a source through spyware records footage. If a set of still images is placed in the watched folder, each individual file will be added under a separate item in the queue rather than the entire sequence as a single piece of film.

    Make a feature request for it here: http://adobe.ly/feature_request

    Thank you

    Kevin

Maybe you are looking for