09-27-2010 05:50 AM - edited 09-27-2010 06:00 AM
So I'm trying to make my current test sequence a little more general and I've come up with this problem.
I'm venturing into using callbacks as it really cleans up my sequences and I can make my sequence more general to accommodate different products and tests at the same time. I'm testing devices on a wafer (65k+ DUTs per wafer) and I was using the single pass execution entry point with a loop inside my test sequence to loop through all the devices on my wafer. It was really ugly with just about all information passed by local variables. After I wrote it again using callbacks I really see the advantage of going this way.
Here is my problem.
Since I don't want the tester to prompt an operator every time the probe station probes a device I'm using a callback which reads information from the probe station and this information is used as the DUT serial number (actually a message saying it's a valid die as well as X & Y coordinates). The practical location for me to save this information is in File Globals however according to
NI TestStand I: Introduction Course Manual
Lesson 9 - Best Practices for Test Development
Section B. Using Appropriate Data Scope
Course Software Version 4.0 July 2007 Edition
Avoid using file global variables for continuous communication among sequences. File global variables are appropriate for data items that you set once in a single-threaded portion of the sequence and do not set again.
So my use of a file global to store information produced during the pre UUT sequence callback clearly violates these guidelines. So in order for me to pass this information to the MainSequence callback where I'm executing the test it seems I should be using Parameters instead. So this leads to my question
How do you use parameters to pass information between sequence callbacks? Do I need to modify the process model? I hope not
Solved! Go to Solution.
09-27-2010 06:06 AM
Just wanted to clarify that I'm also using the Test UUTs execution entry point now
09-27-2010 08:12 AM
Going for the execution entry point which loops the MainSequence by default is a good idea. For the automated test system, you have to replace both PreUUT and PostUUT callback. Often, PostUUT callback can be overridden by an empty sequence.
But when overriding PreUUT, you have to take care of two parameters the callback sequence supplies:
- Serial Number
- Continue Testing
The second parameter is used for termination of the UUT loop within the process model. Therefore, you should not forget this parameter in order to have the chance to shutdown the system properly.
Attached you can find a small example (do not run it!) with a general design idea of this.
hope this helps,
Norbert
09-27-2010 09:40 AM
"Avoid using file global variables for continuous communication among sequences. File global variables are appropriate for data items that you set once in a single-threaded portion of the sequence and do not set again."
This is just advice. Following this advice can help keep you away from certain types of common trouble such as excessive coupling or race conditions. However, assuming you can manage the downsides of globals, you might decide their convenience is worth employing them in violation of this advice.
09-27-2010 09:40 AM
Hi Chilidog,
if this would be my task i can see two ways for reaching it without changing the model
1.) Create a local variable during execution time in the model entry point.
Pre UUT will create in a statement a new variable in models entry point by using
Runstate.Root.Locals.AsPropertyObject.NewSubProperty ("strMyVariable",PropValType_String,False,"",PropOption_DoNothingIfExists)
and then in another step access it via PropertyObject and add new value.
Note: This is also working with containers
In the Main access it via Property Object in the same way and get the value.
2.) Use a queue.
for more information use this thread
http://forums.ni.com/t5/NI-TestStand/Generating-Multiple-Reports-in-Subdirectories-with-Nested/m-p/1...
hope this helps
juergen
09-27-2010 03:56 PM
thanks j_dodek
I found a queue was exactly what I needed. Simple and effective.
09-27-2010 04:00 PM
Norbert B
why is it necessary for me to use the Serial Number parameter? What happens if I don't use it? I've disabled the reporting options
09-28-2010 02:09 AM - edited 09-28-2010 02:11 AM
@chilidog wrote:
[...]
Since I don't want the tester to prompt an operator every time the probe station probes a device I'm using a callback which reads information from the probe station and this information is used as the DUT serial number [...]
Well, i thought this is exactly what you are after..... therefore my suggestion to use the default location for this information
Of course nothing "bad" will happen if you do not use this parameter of the PreUUT callback, but instead of bringing in new techniques which are customized, why not use default functionality?
Norbert
09-28-2010 02:30 AM
Actually I don't need a serial number. I'm getting X and Y coordinates from the probe station at this step and these values identify the device on the wafer.