Parallel model - no response

Hello, 
I work in Power-One (Slovakia) company where we have 14+ ATEs with TestStand3.5... Most of them uses SequentialModel.seq and works OK, but one of them which uses ParallelModel.seq is "stopping work" and we have no more response from TestStand3.5 [application must be killed by Windows(XP) task manager].
TestStand3.5 is stopping work when it comes in ParallelModel.seq to notification test step "Wait for Dialog" or "Wait for Controller" [Wait(Parameters.TestSocket.WaitForControllernotification) - when I tried to skip this step, TestStand never stopped working and works fine].
Do somebody know how we could solve this issue please?
[With old PC on ATE, TestStand was stopping work at this step not very often, but after we upgraded PCs on all ATEs, it's stopping work all the time]
Best regards,
Jaroslav Janicek
Design Test Engineer
Power-One Slovakia
[email protected]

Hello Doug, thank you for reply.
We do not override PreUUT and PostUUT callbacks. SequentialModel.seq is little bit modified from the original TestStand version and ParallelModel.seq is modified in the same way. (I'm attaching it here - P1ParallelModel.seq)
I also supposed that some of our custom modifications is the reason of this issue, but probably it's not, because TestStand is stopping work also with original ParallelModel.seq [ always when it reach the notification test step which calls the function Wait(Parameters.TestSocket.WaitForControllernotification) ]
I also tried to recompile "modelsupport2.dll" in CVI8.1 (successfuly) but it didn't help.
Best regards,
neproy
Attachments:
P1ParallelModel.seq ‏547 KB

Similar Messages

  • What is the best way to open close and pass instrument handles from labview in teststand parallel model?

    I have a number of test systems that use a parallel model with labview. We have a good number of instruments(PXI).
    What is the prefered method for open,closing and passing instrument handles in teststand using labview? 
    Solved!
    Go to Solution.

    Hi,
    No, Below is a bit from the Session Manager Help
    Currently, Session Manager supports the following instrument session types:
    IVI Sessions—Use an IVI session to obtain the C-based instance handle for an IVI logical or virtual instrument name. NI Session Manager does not support IVI-COM drivers at this time. When IVI-COM drivers are available, you can use an IVI session to obtain an ActiveX interface reference to an IVI-COM driver.
    VXIplug&play Sessions—Use a VXIplug&play session to obtain a C-based instance handle for a VXIplug&play logical or virtual instrument name. Configure VXIplug&play names in the <VXIplug&play directory>\<Platform directory>\NISessionMgr.ini file.
    VISA Sessions—Use a VISA instrument session to obtain a C-based viSession handle to a VISA resource or logical name. Configure VISA logical names in the <VXIplug&play directory>\<Platform directory>\NISessionMgr.ini file.
    Custom Sessions—Use a custom session to create a data container object that shares ActiveX objects you create or other data between software components you write. Use the Attach and Get methods to attach data to and retrieve data from a session. A custom session does not initialize, close, or own an instrument handle. The data you share with a custom session does not have to be instrumentation related. You can create a custom session with any name you request.
    Regards
    Ray Farmer
    Regards
    Ray Farmer

  • A special Rendezvous that works on subsets of processes in the parallel model

    I have a parallel model test that works great on 14 UUTs so far, but now I must write some sequences where the processes have to share hardware two at a time. I need to pair up the processes like (0,1), (2,3), (4,5), etc. and have a Rendezvous operate on them two at a time like this:
    Processes (0,1) operate in parallel.
    Processes (2,3) operate in parallel.
    Processes (4,5) operate in parallel.
    And so on....
    Given enough time, maybe I could write that programmatically in TestStand; but I hope TestStand has a built-in Rendezvous for subsets of processes, or something else to do that. Does such a thing exist?

    bmihura wrote:
    OK I tried your pairing up idea with six processes (three seperate Rendezvous, one for each pair), but they all still ran in parallel. I'd like for one pair to execute at a time while locking out the others. This is because my system has two electronic loads (and two of many other things) that the six UUTs must share.
    Ok, then what you proposed before (a separate rendezvous for each pair of threads) is not the correct way to synchronize things. A rendezvous just causes threads to block until the specified number of threads reaches the rendezvous point. You have three independent pairs of threads running in parallel. If that is not what you want, then using rendezvous like this isn't the right approach.
    Please describe in more detail the entire flow of execution you are looking for. At what scope do you want the other threads to be blocked? Do you want each pair of threads to run all tests before any other threads can run? Do you want this only around certain steps? or Group of steps? Also, why do you want the threads to be paired? The most straightforward way I can think of to allocate two of a resource is to not care about which thread is using it, but to only allow two threads at a time, they don't necessarily have to be in pairs or even the same two threads every time. Do you really need the threads to be paired?
    One of the simplest TestStand specific ways to allocate resources is to use the auto-schedule step types. They allow you to define blocks of code which require specific resources and then automatically run those blocks of code when those resources are available. I recommend you read the documentation for these step types and see if that sounds like it will work for you.
    Another relatively simply way to synchronize access to a fixed number of resources among many threads is with a semaphore. A semaphore allows a certain number of threads through at a time, and blocks other threads until one of the ones using the resource release their acquisition of the semaphore. If the resources involved are more complicated though, I think you are better off using the auto-scheduler step types.
    Hope this helps,
    -Doug

  • SequenceFileUnload in TestStand 4.0 Parallel Model

    Has anyone experienced a problem when updating to TestStand 4.0 with the SequenceFileLoad and SequenceFileUnload callbacks?  I’m using the parallel process model configured for 8 threads and in earlier versions of TestStand have had no problems placing my hardware initialization steps in the SequenceFileLoad callback and the cleanup steps that release hardware references, in the SequenceFileUnload.   It seems very random that sometimes when I close my sequence, the Unload steps are executed.  Sometimes they only run if I select File->Unload All Modules or close TestStand. 
    Is there a flag in TestStand that I can use to trigger the Unload steps or possibly a better place in the parallel model to place my hardware cleanup?  I don’t want to release and have to reinitialize hardware references with each loop so any cleanup steps will need to be done once after all parallel threads are finished.

    Most of the time people do this in the Process Setup Callback and Process Cleanup Callback.  Those are process model callbacks that you can override from your client sequence.  They are probably better to use than the engine callbacks (SequenceFileUnload and SequenceFileLoad).  They get executed before and after the looping respectively.
    If you open the process model you'll see where they get called.  Process Setup Callback is in the Setup step group and Process Cleanup Callback is in the Cleanup step group.
    Regards,
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • When to use parallel models?

    I am using TestStand to control test execution in a thermal chamber. I am unsure which process model best suits my needs (sequential, parallel, or batch). My requirements are as follows:
    Up to 4 UUTs will be tested using a single test system. Each UUT shares assets in the test system. An entire sequence of tests will be run repetitively on each unit for a period of 24 hours. Within the 24 hour period, a single control signal is received from the thermal chamber indicating when tests should be run. (run for two hrs, soak for two hrs; run for two hrs, soak for two hrs �). Typically (prior to using TestStand) the test controller would run all tests on UUT#1, then all tests on UUT#2, then all tests on UUT#3, and so on. At the completion o
    f this cycle, testing for UUT#1 would occur again. Each UUT has its own data report generated.
    I know the parallel process model allows for the removal and/or addition of UUTs at any time during the test sequnce. Although that is a nice feature, it is not a necessity.
    I would appreciate some advice on how to handle this situation. How can I affect the �infinite looping� of an entire test sequence for this multi-UUT environment?

    Maz,
    in the TestStandI course they stated that the serial model is for serial testing of one UUT after the other. The parallel model could somehow be assumed as multiple serial models running in parallel. The batch model is somehow inbetween or extra. It handles the test of a whole batch of UUTs in parallel, where there are some things to be tested in common.
    Of course everything can be coded in every process model, but this would give up a lot of the built-in comfort.
    In your case I would choose the parallel model, except there are some steps that need to be done on the whole batch at the same time. Consider some UUTs that must all pass a voltage test where you have just one DMM, and must be cooled down when all are done. This would be a batch model.
    HTH and Greetin
    gs from Germany!
    LuI

  • "Batch Synchroniz​ation" in Parallel Model

    Hi,
    I'm working on a project with up to 15 UUTs which are supposed to be running using the parallel model, since they have to be able to start and stop separately.
    There are conditions in which all active UUTs are paused and restarted upon request. Communication with the UUTs is established using a single demon. Now I need a synchronization method, to make sure only one thread runs the daemons initialization. Just like a batch synchronization using the "One Thread Only" option.
    The Batch steps do not work in the Parallel Model so is there a best practice establish a synchronization like this? I have some ideas, but I guess I'm thinking too complicated and can't see the wood for trees....
    Cheers
    Oli
    Programming languages don't create bad code, programmers create bad code....

    James,
    thanks for the reply. I guess I can implement sth like you suggested. Was just wondering, if I'm missing some built in option that saves me from tinkering myself.
    Cheers
    Oli
    Programming languages don't create bad code, programmers create bad code....

  • Help with the Parallel Model configuration

    This is my first time posting, but I am a long time reader....
    First off, I would consider my Teststand knowledge level as high novice to low intermidiate. I created  a test sequence using in Teststand which calls labview vi's. My test sequence tests 5 units at a time in a parallel model (parallel model sequence). Functionally, everything runs great in single pass and looping. However, here is my issue:
    When selecting "Test UUT's", it brings up a window that asks for the serial number for each of the five stations. The operator then needs to enter a serial number for each and press okay to proceed. This setup is not valid for what I am doing. My test fixture has a button at each of the 5 stations. The user is to push the button to start the test (connects to a DAQ). Then, the serial number is read from the UUT and populated in the report.
    How would I go about reconfiguring this? I am not looking for someone to solve my problems for me, I just need a little direction. I looked at the parallel model sequence and I can't figure out where to go with it.
    Please help,
    Ryan
    Teststand 4.2
    Labview 2009
    Solved!
    Go to Solution.

    No problem Ryan,
    When you are done here you will be a pro.  
    Here is a link that talks about callbacks and how overriding them works: http://zone.ni.com/devzone/cda/tut/p/id/6605
    The PreUUT will be a Model Callback.
    One thing I should point out- There is a huge difference between the Batch Model and the Parallel Model.  People tend to get them confused and sometimes use the wrong when the other one is a better fit for their architecture.  They way I think about it is like a race track.  Each car on the track represents a different test socket.  One time around the track represents a full test.  Pretend the race is completed by teams of cars.  Each team can only race one car for one lap (sorta like a relay).  The team would represent the available test fixture for the next UUT and the car would be the UUT. Here's how the race would work with each model:
    Batch Model-  Let's say there are 2 available spots in the race so we have 2 teams of 5 cars each.  Both of the teams 1st cars would line up at the starting line.  The gun would go off and each car would take off.  Let's say team 1's car gets around the lap first.  Before they can start their 2nd car they have to wait for team 2's 1st car to get around the track as well.  Then both team's 2nd cars would line up and continue the same as the first go around and so on until all 5 cars had raced.
    Parallel Model-  In the same car scenario as the Batch Model both of the team's 1st cars would line up and the gun would go off and they would go.  However, this time if team 1's car gets around the track they can immediately send their second car without waiting for Team 2's 1st car.  In fact all 5 of team 1's cars could be finished before team 2's 1st car even finishes it's lap.
    Not sure if you are a fan of analogies but they work for me. In short-
    Batch Model- Everything in that set of test sockets must start and stop at the same time.
    Parallel Model- Each test socket is independant of any other test sockets.
    I'm picturing your scenario where you have 5 different stations that will be running independantly of each other and trying to figure out if you would want the Batch behavior or the Parallel behavior.  Or..... Why wouldn't you just use the sequential model on each station and deploy your sequence to each station?  Maybe you can describe your setup in a little more detail and we could come up with a better solution.
    How does the one station know that the others have the Go button pushed?
    Regards, 
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • Modal message popup hangs parallel model in Teststand 4?

    Hi:
    I'm having a problem using the 'Make Modal' option on message popups. It is hanging the user interface.
    Here is what I've done:
    * created a sequence with just a message popup in it (using Teststand 4.0 editor)
    * set the popup to be modal
    * set the sequence to use the parallel model
    * recompiled Full Featured CVI User interface for teststand 4.0 (using CVI 8.0.1)
    * run sequence in the recompiled user interface
    * popup is displayed
    * after acknowledging the popup, the popup and the user interface freeze
    If I change the sequence to use the batch model, everything works.
    If I don't recompile the user interface project that came with Teststand and just run the exe, everything works.
    What am I missing? Sequence file attached.
    Thanks,
    Dave
    Attachments:
    modalpopup.seq ‏6 KB

    Hi dseel,
    After I copied over your version of modelsupport2.dll, I see the attached error message for every test socket, basically saying that TestStand can't find a certain function in modelsupport2.dll.
    What modifications did you make to the dll?
    One thing though, I notice the same error message even with the Simple OI... Where are you putting modelsupport2.dll? In the same folder as the CVI Executable, or in <TestStand>\Components\NI\Models\TestStandModels?
    Jervin Justin
    NI TestStand Product Manager
    Attachments:
    TSErrorMessage.jpg ‏56 KB

  • Parallel model questions

    I have a few questions about how to implement a parallel model multi-socket test.
    So, we have a test board which is controlled by USB (1 per board).
    I have developed a VI based test sequence, that runs fine in a single mode.
    Now i need to rconfigure this to use 2 sockets to run 2 iidentical test simultaniously (asynchronous)
    A few things are unclear to me in the implementation:
    1. Are the variables common to the 2 instances, or separate? For instance i use a local which is the handle to the comms for that board, but do i now need a different local variable for each socket? If yes, i dont see how that would be implemented, because the variable is specified in the sequence.
    2. How to define constants that will apply only to one or other of the sockets (i.e. the board usb port)
    3. Is it really multi-threaded? i.e can i call the same VI in 2 instances?
    Labview 2010, TestStand 2010

    Hi,
    1. Do you have one resource or you multiple comm ports?
    2. You can use the Socket index to get the correct data, off course you would have to use an array to hold this data. If handles are not from a shared resourse then there is no need for any special consideration. Each Socket will be totally independant of each other. Its only when resourses are shared that you need to make sure each socket is not trying to use it at the same time.
    3. Providing VI are re-entrant then you can multiple instances of a VI in memory. Otherwise you would have to use synchronization so that you can share resourses.
    Regards
    Ray Farmer

  • How to synchronize section within a sequence runnin over parallel model

    Have this sequence using the parallel model, I want to synchronize some section of it such that the steps been executed only in one of the executions; the Batch Synchronization steps didn't worked, apparently they work only if running the batch model. Tnx.

    Doug,
    I wonder myself too, why not to use something like batch model, unfortunatelly here they use a custom model which is used in a number of testers and has a NI Parallel Model shape, never used before for batch type testing. I tryed this:
    i) Use a Randevois before my Only One Thread Synchronized (OOTS to abbreviate) section.
    ii) Enclose OOTS steps in a separated sequence.
    iii)Call this OOTS sequence after the Randevois but conditioned to only executed by socket 0 (like you suggest using socket index).
    iv) The calling to the OOTS sequence its been done launching a separated thread, and storing this in an ActiveX reference
    v) Set a Wait for Thread step after the calling, in this way every thread will wait and know about the result of OOTS steps.
    Comments are welcome.
    Regards.

  • Proper API call to disable socket with parallel model?

    Hi all,
    I am using the parallel model to asynchronously test 16 UUT's. At the end of each test, I have a temperature stabilization period. If this fails, I would like to "disable" the particular test socket that failed.
    I am using TS 2014 with LabVIEW. What is the proper API call for disabling a socket? I have tried "ModelData.TestSocket[0] = True" in the PreUUT callback as a simple test to disable socket 0, but I cannot get it to work, I get an error stating "Unable to access 'Model Data' "
    Thank you!
    Andrew

    Hi !
    If I'm not wrong, the number of sockets to launch is decided when evaluating the ModelOptions of your client file.
    To modify the nb of testsockets to LAUNCH I usually add a ModelOption callback in my client sequence. In this sequence you'll be able to modify the value stored in 'Parameters.ModelOptions.NumTestSockets'.
    However, once it is launched, you might want to 'wait' indefinely in your failed testsocket... You should wait for a particular execution to wait for example or for a psecific variable value... I don't see any other way to 'disable' a particular test socket...

  • Loop counter reset in parallel model ?

    Hello,
    i am using TestStand 3.1 with parallel model. There is a loop counter for each UUT in RunState.Root.Parameters.TestSocket.UUT.UUTLoopIndex. This increases with every loop that is done.
    Now my problem is: If i start the NextUUT, this counter is not set to 0. It just increases.
    Is there a different counter that i can use ? Or where can i get the information that the NextUUT button is pressed so that i can reset the counter manually ? Or is there another solution.
    Thanks for Help.

    Hi,
    I don't completely understand, why you want to reset the UUTLoopIndex, because it shows the number of iterations per test socket to check how many uut's have been tested on each. However, you could reset the value with a simple statement before you start the tests. You could do this in the setup step group, e.g. with RunState.Root.Parameters.TestSocket.UUT.UUTLoopIndex = 0. You could add a message popup or evaluate an extra condition or so.
    Kind regards,
    Philippe Goetz,
    Applications Engineer, National Instruments

  • Creating a custom UUT dialog for the parallel model

    Hello,
    I am attempting to customize the parallel process model in order to (amongst other things) present a different UUT info dialog.  (The default one defined in modelsupport2.dll only presents a single "Serial number" field where I need numerous other ones.)  Because I am not familiar with CVI (and don't have the development tools for it), I was hoping to create an ActiveX DLL in Visual Basic, or a .NET assembly to manage a slightly more complex version of the UUT info dialog...  While I am sure it would be great fun to fumble with all the complexities of this until it shows some semblance of proper functionality I am hoping there may be some resources available online that would demonstrate how one would go about doing this kind of thing.  I've seen LabVIEW code that provides a different UUT dialog, but it was based on the sequential model which circumvents the most complex issues such as synchronizing the dialog with the TestStand threads, etc.  Any pointers would be greatly appreciated.
    Thanks!

    I am just posting this in case anyone else runs into the same sort of requirement.  The attached zip file contains the source for a .NET assembly that is the beginnings of a VB .NET replacement for the parallel UUT dialog of the modelsupport2 DLL.  I don't want to write an epic here, so the general idea is that the parallel model sequence is modified to make calls into this assembly instead of the modelsupport2.dll component.  But you can't just disable the dialog by setting the ShowUUTDlg boolean to false - that will completely remove the consumer loop in the ProcessDialogRequests sequence which the .NET assembly is trying to send requests to.  I've attached the modified ParallelModel.seq in case anyone's interested.
    Note that there are still significant problems with this and it is provided as-is.  In particular, if you attempt to break and step through the parallel model sequence after the dialog has been initialized, you will not be able to continue - the main thread will hang until you restart TestStand.  With a little more thread mgmt, that could be fixed.  If nothing else, it is useful code to look at if you need to enqueue items from a .NET assembly into a queue defined in a TestStand sequence.
    If you can afford to use the existing dialog as-is, and then add additional info gathering to the main sequence, that is clearly easier.  (That will be OK for my purposes so that is what I'll do.)  However, if you need to have one custom dialog that manages everything in the parallel model, this is the kind of code you should expect to need.
    Hopefully that helps somebody.  There is not much info out there about integrating .NET at this level.
    Attachments:
    CustomUUTDialog.zip ‏117 KB
    ParallelModel.seq ‏430 KB

  • Find execution for socket in UI for parallel model

    TestStand 2010 sp1 and labview 2011 to start.
    I'm trying to find a way to incorporate the terminate/restart functionality in my LabVIEW GUI for a parallel model.  What I've done so far is rather than use the built in modelsupport2, I need my own GUI with a lot of the same functionality.  I launch the GUI from the process model and pass in RunState.Engine.GetInternalOption(InternalOption_ApplicationManager) to the get the application manager reference.  I use that to register a user event for the socket and to pass a notifiication (using engine and sync manager) to TestStand to start a socket.
    What I'd like to do now is have the ability to terminate/restart a socket.  I believe I've found the method within the execution class, but I don't know how to specify which execution to invoke that on.  Is there a way to get a list of the executions?  and, will I know which execution goes to which socket?
    I'm not running this UI as the main UI.  It is launched from within TestStand just like the modelsupport2.dll UI.  Just not sure how to specify an execution to invoke the method on.  
    Thanks.

    Bad news.  I'm not quite out of the woods.  Everything runs fine from the sequence editor.  But when I run from my GUI, I run into issues.  Socket 1 will run without issue, but socket 0 will not abort.  Attached are two screen shots with probes attached.  For some reason, socket 0 returns nothing for the execution manager, but socket 1 works as I'd expect.  I have no idea why socket 0 doesn't play nice.
    My GUI has an application manager, sequence file manager and execution manager running, but what gets passed in to this GUI is from TestStand.  I don't see that there should be a difference in functionality here.
    Attachments:
    Socket0 error.JPG ‏128 KB
    Socket1 works.JPG ‏113 KB

  • Replacing the default Parallel model UUT Dialog

    What is the best way to replace the default UUT Dialog for the parallel model? I don't want to modify the default parallel model, but use the callback options in my sequence to replace the default UUT dialog.
    Things already tried:
    1) Generated a UIR to replace the default UUT dialog.
    2) Placed an action to call the new dialog into the PreUUT callback.
    3) Created a statement function that change the status to display the default UUT Dialog and place into the ModelOption callback.
    This replaced Default UUT Dialog with the new UUT dialog. But the new UUT Dialog panel shows up in four different panel, one for each of the four socket being executed.
    The goal is to have the new UUT Dialog appear only once to handle all 4 sockets. The default parallel model initialize the default UUT dialog panel then uses display panel to view UUT dialog. Is there a different method to have the new UUT Dialog panel appear only once for all four socket inputs and not multiple times?

    There is an example for this under the directory:
    <TestStand>\Examples\ProcessModels\ParallelModel
    Edited: Just realized that what you asked is a bit different than the example.
    I recommend you try one of 2 possibilities:
    1) In addition to disabling the old dialog as shown in the example,
    override the ProcessSetup and ProcessCleanup model callbacks and add
    your code to display and remove your dialog there (you should probably use a "new thread" sequence call when displaying the dialog so that it has its own thread for message processing). Then also override
    the preuut callback and add code to communicate with your dialog in
    some way to pass and return the necessary information for each
    testsocket. This could be a dll call or some other way of doing this communication.
    2) Modify the existing code for the current dialog or implement something similar. The code for the dialog is in the cvi project for modelsupport in the same directory as the process models. If you are going to modify this dll you should copy the Models directory from Components\NI to Components\User and modify the version of it there. The Components\User version will override the version under Components\NI.
    -Doug
    Message Edited by dug9000 on 03-06-2006 10:25 AM

Maybe you are looking for