From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI TestStand

cancel
Showing results for 
Search instead for 
Did you mean: 

Batch Sync - Run one thread only parse results to other UUT's

 

On a new project I'll be using the Elprotronics GangPro to JTAG my UUT's simultaneously so it will only need to be run once. I see where I can set the batch synchronization for the step, what I'm trying to understand is the best way to pass the results for each UUT to the appropriate socket. So basically the test only runs ones but populates a P/F result for that step on each of the sockets being used.

Any ideas would be greatly appreciated.

Thanks,

Derrick 

 

0 Kudos
Message 1 of 6
(3,530 Views)

Just further clarification on what I'm trying to do here.. My Jtag.vi returns an int, based on that int I know which UUT failed jtag. 

My question is what's the best way to tackle getting that return value to the other sockets for pass/fail result?

Obviously there are globals, although I'm not sure how to write a expression for Pass/Fail from a FileGlobal?

I can write it in C++ just not sure how to use it in teststand properly.

Any example would be greatly appreciated.

result socket 0 = 1 socket 1 = 2 socket 2 = 4
0 fail fail fail
1 pass fail fail
3 pass pass fail
5 pass fail pass
7 pass pass pass
6 fail pass pass
  if(result==6||result==0) Fail if(result<3||result==5) Fail if(result<5) Fail

 

Regards,

Derrick

0 Kudos
Message 2 of 6
(3,515 Views)
Hi Derrick,
one of the easiest ways is to break this in to two steps. The first is the action step and that is set to one thread only. That way it returns the data to an appropriately scoped variable (I would suggest using a local with a flag in the attributes to make it shared). Then create a second step which runs for all threads (since each thread is a unique UUT) that performs the actual test using the runstate.testsockets myindex as a mask on the data source which is pointed to the local.
Hope that makes sense.
Which version of TestStand are you using? I'll pop a quick example together tomorrow if that wasn't a great description.
Thanks
Sacha
// it takes almost no time to rate an answer Smiley Wink
Message 3 of 6
(3,508 Views)

 

Sacha,

 

Breaking it into two steps was my intent.

Problem is the evaluation expression needs to be different for each socket as shown in my last post. 

So maybe I need a vi with a case switching on the socket index that does the evaluation on a teststand variable?

I was trying to find more info on this doing tons of searches but maybe I'm looking for the wrong keywords.

I thought using a local it would be cloned for each socket, making it inaccessible to other sockets?

 

In any case seems to be plenty of ways to skin this cat, I'd love to see your example.

Thanks,

Derrick

 

Teststand 5

LabView 2012

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

Hi Derrick,

  have a look at the attached code - I've forced the situation through the model options callback to only present 3 UUTs and set the sequence file to run with a batch process model.

The first step is set to one thread only - enter a 0 to a 7 in the box. You should then see a pass or a fail depending on the binary patterning I've used.

If you have a much more complex truth table, then you could create a 2D array of passes and fails and then use the testsockets.myindex as a column or row index as appropriate, and the value returned as the other index. In the attached sequence example, I went with a "bit in the right position" mask and compare.


Hope this makes sense.

 

Thanks

Sacha

// it takes almost no time to rate an answer Smiley Wink
Message 5 of 6
(3,497 Views)

Thanks, Sacha .

 

I actually decided to do it similar to how I'm handling other vi sharing based on Jiggawax's suggestions.

One thing I quickly noticed once I got this working was my truth table was off a bit..

That's what happens when you burn the candle at both ends !

Corrected.

result

socket 0 = 1

socket 1 = 2

socket 2 = 4

0

fail

fail

fail

1

pass

fail

fail

2

fail

pass

fail

3

pass

pass

fail

4

fail

fail

pass

5

pass

fail

pass

6

fail

pass

pass

7

pass

pass

pass

       
       
 

if(result<=0||result==2||result==4||result=6) Fail

if(result<=1||result==4||result==5) Fail

if(result<4) Fail

 

Attached is example code I'm using for JTAG 3 UUT's.

 

JTAG_ELP_DLL.vi -

Does all the major functions via dll calls to succesfully JTAG an MSP430 using Elprotronics GangPro430.

Notice the SetPropertyValue to the right this is where you get your data up to teststand.

Make sure that you set the local variables flags to pass by ref, and shared.(right click, advanced,edit flags)

JTAG_PASS_FAIL.vi

Based on the current socket index it returns pass/fail for the socket, based on the revised truth table!!

ELPROTRONICS_DEMO.seq - all put together.

 

Tah-Da done all in labview, no C required ! lol.

Although SachaE is right a bitshift could be used to do the same thing.

 

 

Download All
0 Kudos
Message 6 of 6
(3,482 Views)