Generate dynamic event of producer loop in multiple consumer loop

I have one producer loop which used event case to interface with FP controls and 5 consumer loops
If I have to use the fifth consumer loop to generate dynamic event which send to event case in produer loop. 
I have to wire register event with dynamic event terminal in producer loop . Also I need to wire user event to consumer loop (at the bottom of screen window) which is far away from producer loop. It is hard to wire them. 
Is there any other method to let many consumer loop to communicate with one producer loop through dynamic event (the same user event)?

I like to use an Action Engine to hold control my Event Reference.  Then anybody can send the event commands.
You may also want to look at the VIs I recently submitted for OpenG here.
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines

Similar Messages

  • Producer loop and 2 consumer loop for acquisition and process images

    Hello everybody,
    I'm quite a newbie in Labview 2011 on Windows 7.
    Those are what I want to do :
    Step 1: When the objects fall with velocity around 2 to 5 m/s, images of these objects will be acquired continuously from PCIe 1433 with Basler spL4096-39kc.
    Step 2: The processing of the images continuously in the same time with step 1 will find the datas of the objects in images as colors, patterns and locations. If the patterns and colors at location are as the same sample, the elements in Boolean data array are true.
     Step 3: Every 01 millisecond, values from Boolean data array will be read, the valves of nozzle will be opened if the values are true.
     My question is what is the best way to do my tasks ? I couldn't find any example of program in Labview and I think I use producer/consumer architecture for step 1 and 2 but I don't know how can I set up producer loop for step 3 and transfer Boolean data array from step 2 to step 3 ?
    Thank you for reading and help me !

    Dear Eric-J,
    Thanks for your reply. I want sort the pellets that have 6mm diameter. The pellets were fed in a single layer by a vibratory feeder with a flat-bottom trough, 400mm wide that was supplied with the feeder . The pellets dropped off the end of the feeder onto a chute with 40 parallel U-shaped grooves. Images of these pellets will be acquired continuously. I make the sample from image that was acquired. I use NI Vision for processing  of the images. If the patterns and colors of pellets are as the same sample, the elements in boolean data array are true. As you thought, I would like to interpret data every millisecond and open/close a valve based on the boolean array. The air valve sends a burst of air for 2 - 3 milliseconds to an air nozzle that diverts the pellets into the appropriate channel.
    What are your ideas for this task ? Could you explain more clearly about "a real time system" and "determinism" for this task ?
    Thanks and best regards

  • Shutting down a queued event state machine with multiple parallel loops

    I am trying to find the best way to shutdown a program that consists of a queued event state machine architecture with multiple parallel loops. Can anyone recommend the best way to accomplish this in my attached VI? (From browsing the forum, this seems to be a common question but I haven't found a solution that works for me.)
    I welcome any other feedback on my code as well, if anyone is willing to offer it.
    My Program Requirements:
    If the user presses the "Shutdown" button, the program should prompt the user with "Are you sure you want to stop the program?" and then either return to the Idle state or proceed to stop the program. Additionally if there is an error, the program should prompt the user with "Clear error and continue, or Stop program?" Then either return to the Idle State or proceed to stop the program.
    Details of architecture:
    The program consists of 3 parallel loops: (1) an Event Handling loop that enqueues various States to a State Queue, (2) a State Machine which enters the latest state that is dequeued from the State Queue, and (3) an Error/Shutdown handling loop which processes any errors in the Error queue.
    During normal Shutdown, in the Event Handling loop the "Program.Shutdown" event case executes, and the States "Shutdown" and "Idle" are added to the State Queue. In the State Machine, the "Shutdown" state is invoked. A special error code "5000" is added to the Error Queue. In the Error/Shutdown handling loop, the "5000" error triggers a prompt that asks the user if they want to stop the program. If the user chooses not to stop, a notifier StopNotif is sent to the "Shutdown" state and "Program.Shutdown" event case with the notification "Go". If the user chooses to stop, the notifier sends the notification "Stop". The Event handling loop and State Machine are terminated if they receive the notification "Stop".
    In case of error, the program behaves similarly: if the user chooses to clear the error and continue, the program returns to the "Idle" state.
    HOWEVER - if the user chooses to stop the program, the program stalls. The notifier that is sent to stop the Event Handling Loop and State Machine cannot be read because the Program.Shutdown event case and the Shutdown state (which contain the "Wait for Notifier" function) are not active.
    I have been able to activate the Shutdown state by enqueuing it in the Error/Shutdown handling loop. But I don't know how to activate the "Program.Shutdown" event programmatically, and thereby access the "Wait for Notifier" function inside it.
    I tried to place the "Wait for Notifier" function outside the event structure, but then the Event Handling loop never completes. Placing timeouts on the "Wait for Notifier" and on the Event structure makes the program work, but I want to avoid using timeouts because I don't want to turn my event-driven program into a polling-based program. I'd also like to avoid using variables or property nodes to stop the loops, because that requires creating a control/indicator for something that the user doesnt need to interact with.
    Thank you!
    Solved!
    Go to Solution.
    Attachments:
    Queued event state machine parallel loops empty.vi ‏46 KB

    Thanks for clarifying that, Ravens Fan.
    I marked crossrulz as the solution for pointing out User Events to me.
    I also adopted Ravens Fan's suggestion to keep the Shutdown procedure out of the Error Handling Loop. This has simplified the architecture by eliminating the need for Notifiers. Instead, I have used booleans in case structures to stop the Event Loop and State Machine, and Release Queue to stop the Error Handling Loop.
    For reference, I'm attaching my corrected code.
    Thank you to everyone who helped!
    Attachments:
    Queued event state machine parallel loops empty in progress.vi ‏44 KB

  • Producer consumer loop only execute once?

    Hello here,
    In my VI, the producer loop seems working continuously, but the consumer loop only execute once.
    I haven't used producer/consumer pattern before, could someone give me some ideas why this happens?
    My code is in attachment.
    Thank you in advance.
    Yaqiong
    Solved!
    Go to Solution.
    Attachments:
    parallel - Copy.vi ‏72 KB

    That would be the poor choice of using an event structure in the consumer loop.  As set up you must generate a mouse Leave or mouse enter event on Waveform Graph for the consumer loop to finish its first iteration. 
    Delete the event structure.  you don't need it to update a graph.
    Jeff

  • Register event in producer consumer design pattern

    Hello wire workers,
    I am fairly green when it comes to dynamic event registration, so my understanding of it is probably quite flawed, but what I have implemented seems to work fine.
    Assuming a fairly typical queued producer/consumer state machine architecture.
    Up till now, I have done the dynamic event registration outside (i.e. to the left of) the UI loop, so all events get registered before the UI loop starts to run.
    My question is:
    How can I register events from inside one of the consumer loops? I cannot wire it...
    Maybe an example will make my scenario more clear.
    I have a DAQ loop (queued state machine). In the init state of this loop I want to register a digital input such that changes on a line are handled by my main event structure (in the totally separate UI loop). Is this possible?
    I look forward to hearing positive answers
    nrp
    CLA

    The best way to send data from the Consumer Loop to the Producer Loop is through User Events. What you will want to do is create a User Event whose data type is the registered DAQmx event refnum. Then when you register the DAQmx event in the Consumer Loop, fire the User Event with that new refnum and update the registration in the Producer Loop. That's probably hard to wrap your head around in words, so I'll attach a dummy example and pic below. Hope this helps!
    VI Saved in LV85.
    Message Edited by Jarrod S. on 04-21-2008 12:54 PM
    Jarrod S.
    National Instruments
    Attachments:
    DAQmx Event.vi ‏30 KB
    DAQmx Event Pic.PNG ‏38 KB

  • Dynamic Event LabVIEW

    Hello,
    I post this comment because I have questions about "dynamic event" in Labview and Veristand.
    LabVIEW allows user generate dynamic event but :
    - What is really a dynamic event?
    - What is the mechanism used by Labview to manage a dynamic event?
    It's TCP-IP communication, network streming ....

    Are you sure?
    I take two screenshots :
    - First :the diagramme of the host vi which send a command to a specific custom device.
    - Second : a template of an asynchronous custom device under NI Versitand 2011.
    It seems to be real dynamic event mechanism.
    I succeed with the host vi, sending an event to my specific custom device but I don't succeed the opposite data transfer.
    Attachments:
    Host_vi.png ‏17 KB
    Template_Custom_Device_NIVS2011.png ‏72 KB

  • 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

  • Multiple "generate user event" in event loop

    Hello.
    1.)  I am wondering if you can user a "generate user event" into an event loop to create a quasi-state machine.
    For example create an event loop with the events "event a", "event b," "event c," and so on.   The in "event a" put in a function to generate a user event to call "event b".  Then "event b" will call "event c" and so on.
    2.)  If this is possible, then can u put multiple generate user events into a single event loop and have it queue the generate user events up.  For example have the "event 1" case use the "generate user event" 3 times (generating "event 7" "event 8" and "event 9.") to call the next three future event cases in that order?
    Thanks
    Charlie C.

    Of course it is possible, easiest with simply writing signaling properties. (See attached examples, LabVIEW 7.1).
    You have to be very careful that you don't create trigger loops, e.g. event A triggers Event B, which triggers Event A ... ad infinitum! :0
    Example "Multievents": event 1 triggers event 2, which triggers event 3.
    Example Multievents2": event 1 triggers events 2-3-2-stop in sequence.
    Message Edited by altenbach on 09-28-2005 01:26 PM
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    MultiEvents.vi ‏57 KB
    MultiEvents2.vi ‏72 KB

  • Dynamic event multiple loops

    I'm trying to see if I can use one Dynamic User Event to control multiple Event Structures. It seems that sometimes once a dynamic event occurs and its "interrupt" is answered by an event case, other VIs only have a short amount of time (<50ms) to reach their event case state for accepting this event otherwise the event seems to be cleared and the other VIs are oblivious that the event even occured.
    My Question: Is it possible to use one dynamic event to control multiple Event Structures reliably?
    A previous post somewhat speaks of this issue but does not provide a solution or anything insightful.
    http://forums.ni.com/ni/board/message?board.id=170&message.id=223495&query.id=135563#M223495
    I've included an example of my issue
    Attachments:
    DynamicUE.zip ‏61 KB

    Thanks to both of you. I found the answer to my question in the second posted link. "the common, correct use case is to have one Event structure per dynamic event registration". I tested this out with the previous attachment by registering the User Event refnum from the ESTOP functional global to another Event Registration node. I then ran this refnum to the top loop. (instread of the top loop sharing the registration refnum with the middle loop). Now I can put a delay of 2000+ ms and not even miss an event. cooool. This will probably NOT be my final solution but its good to know in the future.
    Most likely I am going to design each of my main VIs to have a main while loop with a User Event Structure listening for dynamic events. Associated with each of these VIs will be a functional global which contains its User Event Refnum and Registration Refnum. This functional global will act as a gateway into the associated VI for other VIs/Subvis to use. This will follow the "one Event structure per dynamic event registration" rule while keeping my API organized and allowing room for scalability by simply adding more functional globals in the future.
    Just putting this info out there for other users.
    Thanks again,
    Craig

  • FOR XML to generate dynamic script to drop multiple tables

    Log_Table has a column named Col1 where we have table names
    Col1
    TableA1
    TableA2
    TableA3
    TableB1
    TableC1
    TableC2
    Generate dynamic script to drop tables that are in Log_Table and starts with TableA.
    Instead of using the loop, use For XML

    Thanks Visakh16 [+1],
    you are right there was typo mistake :-) I forgot the variable in the end, and Thanks Naomi [+1],
    this is true and better to use quotename or just add brackets. Actually I will not choose this approach since we chould use schema as well. the DDL in the OP is not something that I will create probably.
    In any case, here is the fixed query (current approach):
    declare @SQLString NVARCHAR(MAX)
    SELECT
    @SQLString = (select
    N'IF OBJECT_ID (N''' + CAST([Col1] AS VARCHAR(MAX)) + N''') IS NOT NULL drop table [' + CAST([Col1] AS VARCHAR(MAX)) + N']; '
    FROM Log_Table
    WHERE (Col1 like 'TableA%')
    FOR XML PATH (''))
    --print @SQLString
    EXECUTE sp_executesql @SQLString
    GO
      Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

  • 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.

  • Dynamic Events Problem

    I am fairly new to LabVIEW and I am trying to make a GUI that uses
    events to pass messages between three separate event loops, GUI,
    Messaging and Logging. GUI controls the state of the other two event
    loops by generating control events and using semaphores. While the
    messaging semaphore is released by the GUI, Messaging generates
    messages and raises them as events. Some message events are handled by
    the GUI event loop and others by the Logging event loop. Logging, once
    it receives a 'logging ON' control event dynamically registers for
    certain message events and logs the message events it handles to file.
    When Logging receives a 'logging OFF' control event, it dynamically
    unregisters the message events. The logging control events are
    registered for the life of the Logging event loop.
    I have created a cut-down version of my GUI that exhibits the same
    problem. The problem is that after I have turned Logging on and off
    once, it no longer responds to logging control events from the GUI.
    Even though the GUI is still generating the events. I have looked at
    the dynamic logging example in LabVIEW and thought I did the same sort
    of thing but I just can't get it to work that way. The only way I got
    it working was by creating a clean event registration with all events
    each time I want to change the event registration. This is how I have
    done it in the example file and it works. But I don't want to use this
    method, I don't want to have to re-register the control events each
    time I unregister/register message events.
    If anyone knows what I'm doing wrong please edit the example vis and post them back.
    Notes for the example:
    Files are LabVIEW 7.1.1
    Just open the front panels for all the vis before running the GUI vi.
    The Display vi just does the same thing as the logging vi.
    Run the GUI vi and turn on Messaging then turn Logging on and off a few times.
    The example works, but if you wire the event registration refnum
    input when doing dynamic event registration, Logging will only turn on
    and off once, then no longer respond to log control events... what's
    going on?

    I can't tell you how to solve you problems - without code this is always quite tricky.
    But in case you want to log messages to a log file, have a look at this thread
    http://forums.ni.com/ni/board/message?board.id=170&message.id=172117&view=by_date_ascending&page=1
     where I posted a logging-library.
    Maybe it is a useful help for you.
    Thomas
    Using LV8.0
    Don't be afraid to rate a good answer...

  • Generating LabVIEW events via ActiveX

    I have a Labview 2010 Vi compiled to an EXE with ActiveX server enabled.
    The VI has a single control that is a latched boolean control that is used in an Event Handler.
    When I toggle this control, remotely, via an ActiveX client, the control changes state, but does not generate an event. (non-signaled).
    I can understand this behavior if the control was not a latched control, but I would have thought that the latched control would automatically generate an event, since it doesn't make a distinction between "value" and "value (signaled)".
    Other than monitoring/polling the control status and when it changes using a Value (Signal) local variable, is there a way to generate an Event, in a LabVIEW EXE, via ActiveX?  Or is there another, more appropriate way to accomplish this.  I'm trying to remotely run an program from another program through an activeX interface.   I suppose if every control had a unique message and I had a message handler loop, then I could just use the ActiveX control to insert the appropriate message into the Queue, but this is an existing application and would take a fair effort to set that up.

    What if you tried dynamically registering the event? You could create a reference to the boolean and use the Register for Events VI. Then, wire this event into the dynamic event terminal of the event structure (right click the border and say "Show Dynamic Event Terminals").  I don't have an ActiveX program to call into LabVIEW with, so I'm not sure if this will be any different than what you're doing now, but it's something easy to try.  Perhaps you could post you ActiveX code and LabVIEW code or a modified version of both illustrating what you're mentioning?

  • Continous dynamic event loss

    Hello,
    we are experiencing a continous dynamic event loss.
    The test-main-VI is Button Menue 15.vi, all received and generated counts should be the same.
    Button Menue 14.vi is included as a "not really doing some real work" example, an seems to be running flawlessly also on the customer machine. But if we replace the sleep with some larger loops then we easily can see a big difference.
    On the customer machine the continous loss can be seen quite easily, here we have to run about 12000 cycles so see a small difference,
    We are using a german LabView 8.2.1.
    Attachments:
    ButtonTest.zip ‏106 KB

    You splitted the Event Registration refnum:
    This is a no-no, have a look at this post (and the rest of the thread)
    In order to solve your problem you should NOT share the Event Registration Refnum in the sub-vi but create a new one:
    If I run that code I have no problem  and seeing no missed events.
    Viel Spass
    Ton
    Message Edited by TonP on 09-17-2007 05:45 PM
    Free Code Capture Tool! Version 2.1.3 with comments, web-upload, back-save and snippets!
    Nederlandse LabVIEW user groep www.lvug.nl
    My LabVIEW Ideas
    LabVIEW, programming like it should be!
    Attachments:
    Button Menue 20.png ‏1 KB
    Button Wrapper 20.png ‏5 KB

  • RT: Dynamic Event possible without polling?

    RT Targets only support dynamic events as seen in this demo:
    http://digital.ni.com/public.nsf/allkb/42B70D2D0C4B568586256E2F0051441D?OpenDocument
    the example uses: "Generate User Event" to fire an event.
    The event is fired within an While Loop where two inputs are compared (polling the input all the time....)
    I would like to generate an Event on a change of a variable without having to poll.
    Is this possible?
    thanks a lot
    thomas

    Hi Thomas,
    you can use shared variables and LabVIEW DSC on your RT target without polling but otherwise there's no possibility to avoid polling completely.
    Here are some interesting links on this issue:
    "Installing LabVIEW DSC, SQL, or MSDE on a Real-Time Target": http://digital.ni.com/public.nsf/allkb/52CC76196A480C6C86256F8900592A25 
    This page contains also other interesting links on this issue!
    http://digital.ni.com/manuals.nsf/websearch/12BCE84BAF96E2AE862574330022EC46 
    "Using the LabVIEW Shared Variable": http://zone.ni.com/devzone/cda/tut/p/id/4679 
    "Using Shared Variable Events on Real-Time Targets": http://digital.ni.com/public.nsf/websearch/3AE325EECD9A17AD862570BA00625088?OpenDocument 
    The DSC features of the shared variable are limited to use on Windows targets, however you can host variables on a Windows machine and reference them on a real-time target. Another option is to create two sets of shared variables, one set hosted on the Windows side and one on the RT side, with each variable on the Windows set bound to the corresponding variable on the RT side. This would allow you for example to log data on a variable, but have it hosted on the RT side with no network dependency on the RT side to the Windows side.
    I hope these informations help you!
    Best regards
    Suse
    Certified LabVIEW Developer (CLD)

Maybe you are looking for

  • KT3 Ultra ARU - Restricted Voltages?

    I'm running a MSI KT3 Ultra ARU with an Athlon 1700+ tbred. I was trying to adjust the voltage, but the max I can put it at is 1.6V (the default voltage for my chip is 1.5V). Now, I know the board can go higher for sure, because prior to this tbred,

  • Date object doesn't work in query filters

    I'm trying to create a universe object called Next Biweekly Pay End Date.  Some background: there is an end date for our biweekly payrolls every 14 days, and the logic behind the object is basically that if there was a biweekly pay end date 7 days ag

  • BAPI_PO_CREATE1 to create PO with limit item (item category = B)

    Hello, I want to create a PO with a limit item (category = B). What are the important parameters/tables which have to be filled. Currently I'm filling the following: POHEADER + POHEADERX POITEM + POITEMX POSCHEDULE + POSCHEDULEX POACCOUNT + POACCOUNT

  • Playing Clips/Sequences in background, while using other application?

    I am working for a reality TV show and we are trying to take notes in Microsoft Word while the editors sequences are playing. Is there any way to change the preferences so that Final Cut will play a clip or a sequence while we are using another appli

  • Transfering iTunes library/music to new comuter.

    I currently have an iMac G5 but have a new iMac on order. When it arrives, how do I move my iTunes library and all its music from the old iMac to the new one? I don't want to mess up any of the playlists.