NI TestStand

cancel
Showing results for 
Search instead for 
Did you mean: 

Side by Side Parallel Execution Displays

I am working on proving the high level design of a test system interface with TestStand 3.5 versus LabVIEW 8.20 only.  We want side by side parallel executions with resource sharing locking.  I have demonstrated that TestStand will quickly provide all of the information we want on the screen except for the side by side display of two separate executions.  I am hoping for some quick information to link the separate viewers to the separate executions and demonstrate the interface with simulated test Vis in the test sequence.

 

I have seen some posts on the subject, but they stop before I see the answer I am looking for.

 

I am working with the LabVIEW Full-Featured Operator Interface as the starting point.  So far I have ExecutionView0 and ExecutionView1 for TestSocket0 and TestSocket1, respectively, and they are tied into the Callback and Resize SubVIs.  I have two Configure ExecutionView Managers, one for each ExecutionView, based on information I have seen in posts.  It looks great and the information is there if you switch between the two executions in the listbar but the side by side duplicates the active execution.

 

Does anyone have a fairly quick answer to implement and tryout this configuration?

0 Kudos
Message 1 of 28
(6,812 Views)

Hi,

Have a look at the MultiUUT example in the TestStand\examples folder. This displays four seperate executions. The example may help.

Regards

Ray Farmer

Regards
Ray Farmer
0 Kudos
Message 2 of 28
(6,795 Views)
That example will tile multiple execution windows in the sequence editor, but I think he might be trying to make his own multi-execution window application.
 
If this is the case then, at a high level, you must have a separate ExecutionViewMgr control and separate SequenceView control for each execution "window". For each window, connect these controls together. 
 
Clicking on an execution in the list bar or starting a new execution fires an an ApplicationMgr.DisplayExecution event. In the event handler, you must specify which ExecutionViewMgr control displays the execution by setting ExecutionViewMgr.Execution property for the ExecutionViewMgr control you choose.  How you decide which ExecutionViewMgr to use depends on your application. For example, you might have a way to associate particular executions with particular test fixtures and choose to always display the execution for a particular fixture in a specific window.
Message 3 of 28
(6,787 Views)

To clarify what I am trying to do...  I want to run the same test sequence on two UUTs in side by side fixtures, "A" and "B".  Most of the test equipment is duplicated for each side but two pieces are not, so I am using TestStand Locks.  I want to operator to be able to scan, load and start "A"; then scan, load and start "B" while "A" is running.  I want the test flow and results for each side displayed side by side live.  So, if "A" locks "B" you can see it and when one side is done you can see which test failed if the unit failed.  The sequence uses the parallel model with two testsockets allowed.  Testsocket[0] will always be side "A" and testsocket[1] will always be side "B".

The batch model example is not the direction I am heading.

0 Kudos
Message 4 of 28
(6,777 Views)

Hello Again,

I am so close to what I am looking for!  Under just the right startup and control click process, I can see the two my two parallel threads running side by side!  In the reverse left and right orientation of course.  So I am working to control the Exection to Execution View links.  If I am following James Grey's leads correctly, I will have to register a user event to trigger an event for the ApplicationMgr.DisplayExecution.  Once I have this I need to determine which execution to assign to my ExecutionView0 Manger and assign the other to my ExectuionView1 Manager.  Is this by Execution.Id?  I have been digging through the properties and display values during runs to try to see the linkages.  But it not very revealing so far.

Have a good day,
Mark Loy

0 Kudos
Message 5 of 28
(6,746 Views)
Is there any other examples like the MultiUUT example avalilable (VB6, C#) ?
Sorry for this OT question, but I can't find anything about parallel testing with your own GUI in VB6 or C#.
0 Kudos
Message 6 of 28
(6,736 Views)

Sorry JPA,

I work in a LabVIEW only world these days.  I have not looked at VB in years and have ignored C# altogether.  I would assume that LabWindows/CVI (which I have not used in aobut 8 years) would have carryover to any C based realm.  Others would know more.

Have a good day,

Mark Loy

0 Kudos
Message 7 of 28
(6,724 Views)
The multiuut example is a sequence file. The language that its code modules are written in is not relevant to its parallel execution. The reason it tests in parallel is that its Edit>>SequenceFileProperties>>Advanced>>Model File setting is set to BatchModel.seq. The batch model automatically runs your sequence in parallel for each test socket. The parallel model does the same thing. The difference is that the batch model assumes you are testing your UUTs together and thus want to stop and start testing of all UUTs at the same time.
 
However, you do not have to use these models to create parallel executions. In any sequence you also can drop a sequence call step and configure the subsequence it calls to run in a new thread or a new execution.
 
ALL Teststand OIs (GUIs), including the simple and full examples for LV, C#, and VB.NET, can run all sequences, no matter how much parallel execution they create. A difference between the examples and the Sequence Editor is that the editor will show you more than one execution at a time in different windows, while the examples only have one window, so you must select which execution you want to view when more than one is running.
 
Thus, you can do parallel testing with the C# example OI.  If you do not like how it displays only one execution at a time, you can modify its source code to create more windows.
 
 
0 Kudos
Message 8 of 28
(6,719 Views)
Happy Days,
 
I have a working demo of a dual fixutre setup with parallel executions in side by side execution displays.  While there is more work to do, the basics work.  I have attached a MS Word doc with the captured print screen.  It even shows the first lock in effect.  The parallel model is defined for my simulation test sequence.  I do not expect it would gracefully handle a non-parallel execution.
 
A second Execution View control and a second ExecutionView Manger control were added to the Full OI Top Level VI of the Full Featured LabVIEW Operator Interface llb.  A second SubVI call to Configure ExecutionView Manger set up the second viewer.  This calls for duplication with minor differences in the bundles for each of the two calls.
 
Minor changes to Resize Controls SubVI keep autoscaling from changing the side by side layout of execution displays.
 
Most of the useful work is in linking the second ExecutionView Manger (I called mine ExecutionView0 Manger and ExecutionView1 Manger to mirror TestSocket 0 and TestSocket 1 of the parallel model executions) to the Configure Event Callbacks SubVI.  Then inside it changing the DisplayExecution Event Callback SubVI to add the ExecutionView1 Manager reference and insert an ExecutionView0 Manger.RunState property read node to link the Event data.exec to either ExecutionView1 Manger.Execution for Case 0 or ExecutionView0 Manger.Execution for Case 1.
 
Also, a minor duplication in the Configure ListBar SubVI gets the text for each execution shown in the ListBar control on the left side of the display.
 
Although this information is incomplete to keep it brief and there is more work that has to happen to fully make it interact correctly, I hope it gives the next person that wants to explore this approach a good start.
 
Have a good day,
Mark Loy
0 Kudos
Message 9 of 28
(6,705 Views)

James: However, you do not have to use these models to create parallel executions. In any sequence you also can drop a sequence call step and configure the subsequence it calls to run in a new thread or a new execution.

As I'm a newbie om TestStand, what's the differens between calling a thread and a execution?

I want to do parallel tests on some UUT's using a C# interface (similar look as Neptunes). The executions/threads must run independently.

What's the best way to proceed?  

0 Kudos
Message 10 of 28
(6,652 Views)