LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Run Code Continuously in Event Driven State Machine

Hi there, I was wondering what is the best way to run code continuously in an event driven state machine. Particularly, I am going off the JKI state machine. At the moment I put the code I want to run continuously (acquire from an instrument) in the timeout case of the event structure. When the user presses the button, the event sends the value 0 to the timeout terminal of the event structure (through a shift register). If the user stops the acquisition then the value -1 is sent to the timeout terminal. This is a tip that I took from an article by Mike Porter.

 

Would it be better to run this process in a separate loop? Is a state machine a bad design choice for running code continuously? I don't like my current solution because if I have another process I'll have to start putting case structures into the timeout case. Also, if the process takes a while then the event structure will take a while to respond.

 

Thanks for your input!

0 Kudos
Message 1 of 6
(4,092 Views)

I typically put those things into another loop and communicate with that loop using a queue.  I also will use the timeout trick of setting the queue's timeout to -1 when not continuously running and 0 (or whatever loop rate you actually want) for when you are repeatedly running something.  I find this simplifies your main state machine loop, especially if your state machine is doing a lot of stuff.


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
Message 2 of 6
(4,065 Views)

 

Adding to that I believe Preview Queue element to read the data and Lossy  enqueue to transfer the I/O output, especially if the I/O device responds slowly. This should keep your event structure polling along very nicely during I/O calls to the other structure.

 

 

0 Kudos
Message 3 of 6
(4,061 Views)

@AKA_TG wrote:

 Adding to that I believe Preview Queue element to read the data and Lossy  enqueue to transfer the I/O output, especially if the I/O device responds slowly. This should keep your event structure polling along very nicely during I/O calls to the other structure.


I actually prefer to use an User Event to send the data to the main event structure and/or whoever else needs it.  I am not a fan of the lossy enqueue (loss of data).  At that point, I might as well just use a Notifier and/or global variable.


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
0 Kudos
Message 4 of 6
(4,054 Views)

In  a recent related conversation on LAVA, I posted an example of "triggering" a JKI state machine, with two independantly-timed continuous processes.  

 

This involves separate loops, but they are reusable timers that send messages (via User Event) to the JKI to trigger the process.  

Message 5 of 6
(3,996 Views)
0 Kudos
Message 6 of 6
(3,959 Views)