11-19-2008 03:36 PM
Hi,
I've been using Teststand (V4.1), Labview (V8.5), and switch executive (2.1) recently to design several production testers (using a modified version of the batch process model), and I'm confident with the general design of "normal" multi threaded, multiple UUT test system. However I'm now required to design a burnin/stress test system that has a "unique" feature. I would greatly appreciate some advice from this group to ensure my architectural decisions are sound.
As a background, the burnin/stress test rig will comprise several sockets which will all run in parallel. Each socket could potentially have a different type of UUT connected. Each socket will also have a small thermal chamber associated with it that will enclose the UUT during the test. Instrumentation such as an switches (multiplexer and matrix), AC source, DMM and pressure calibrator will be shared between sockets using switch executive routing and normal Teststand locking mechanisms. Each UUT test will be quite long in duration (hours). All the UUTs are direct off mains, i.e. they have live 320vdc buses!!!
Unfortunately the burnin/stress tester has a unique requirement... from time to time operators may want to open a chamber door for inspection before the test is completed. Because of the live nature of the UUTs and the fact that instrumentation is shared via switching across all chambers, the chamber doors will have interlock switches fitted that will drop ALL the AC supply outputs to ALL UUTs on any chamber door openings. This is required because I cannot guarantee the status of the switching matix and any associated rogue cross routes from any adjacent live UUT chamber. The interlock will use an industry standard safety switch/relay system (probably a Guardmaster), to meet regulatory safety requirements.
Hence all the UUT test sequence threads need to be placed in a "pause" mode at this stage, and when the chamber is closed again must resume tests from where they left off (this is the part I'm having the most problem with).
Hence to the bit I need critique on.....
I'm using the parallel process model and overriding the "SequenceFilePreStep" callback, which is called for each sequence step for each socket. By inserting an API query on the "RunState.CallingStep.UniqueStepID" in this callback and monitoring the chamber door interlock switches, I can determine the exact location that each UUT test sequence was at before the operator "paused" the tests. When a pause is detected I'll go into some sort of holding state, awaiting a "resume" command from the operator (maybe just monitor the chamber doors for a reclosure).
The hard part and bit I need advice on, is how to behave when a "resume" is detected. Obviously I need to reinstate the system parameters I cleared previously, i.e. I have to rearm the AC source, repower the UUTs, reset any UUT registers etc.
At present I've thought of two approaches....
1/ Jump back to the "setup" part of the last running subsequence. The SequenceFilePreStep callback will have a routine to keep track of the last entered subsequence for each thread so I know which subsequence to return to. Then its just a matter of forcing a jump to the setup part. However I'm not sure how I get Teststand to jump back to a predefined place for each socket. Assuming I've got the UniqueStepID for the relevant setup area, what API calls do I use to make this jump?
2/ My alternative method would be to jump back to exactly where each thread left off. In this case I would need to keep track of all my system parameters so I could call a specialised routine to reinstate everything without recalling the setup steps.
My gut feeling tells me "2" is the right approach, but it means I need to duplicate the setup routines each time (once in the actual subsequence setup area and again in my special reinstatement routine).
Is there a right and wrong way to do this? Am I using a totally incorrect approach, i.e. should I be trying to utilise a Teststand breakpoint command instead of my custom "pause" mechanism?
Note that my requirement isn't really a breakpoint due to the specific reinstatement steps before I resume. Also the operator will never be single stepping during pause as the UUTs will be effectively powered down and dead.
Sorry this post is so long. I hope someone can either improve on my approach or give comments on similar systems they have seen work in the past (help Ray Farmer 🙂 )
Regards,
Tom
11-20-2008 04:54 PM
11-21-2008 04:02 AM
Hello Tom,
You seemed to have moved on from your original ideas since I looked at you post yesterday. I briefly looked at this and wondered how you could Pause the execution, without affecting the process that you might have running which is doing the monitoring and restarting process. But I see that you are not pausing as you do when you press the Pause button on the Operator Interface.
Your latest solution seems a lot least complicated and hence will be easier to maintain.
One concern, is the fact that when you start up again you are running full speed through the burn cycle upto the point where you stop and hence maybe over stressing the UUT.
Regards
Ray Farmer
11-23-2008 02:15 PM