private void DoNistLeakTempTest(ref TestInfo myTestInfo, ref UUTData myUUTData, ref CommonData myCommonData) { try { int loop = int.Parse(myTestInfo.TestParams[1].Value); int delay = int.Parse(myTestInfo.TestParams[2].Value); double deltaSpec = double.Parse(myTestInfo.TestParams[3].Value); int trial = Convert.ToInt32(myTestInfo.TestParams[4].Value); // Configure Thermocouple measurement InstrumentIO.ConfigureThermocouple(mySw); List <double> tempReadings = new List <double>(); Trace.WriteLine("Measuring NIST Cal Leak Temperature."); Trace.WriteLine("... waiting for the NIST Cal-Leak's temperature to stabilized."); Trace.WriteLine("Loop 10 times"); int counter = 0; Repeat : for (int i = 0; i < loop; i++) { var nistTemp = InstrumentIO.MeasureCalLeakTemp(mySw, 0); tempReadings.Add(nistTemp); Trace.WriteLine("NIST Temperature: " + nistTemp.ToString()); Thread.Sleep(delay); } Trace.WriteLine("NIST Average Temperature: " + tempReadings.Average().ToString()); Trace.WriteLine("NIST Max Temperature: " + tempReadings.Max().ToString()); Trace.WriteLine("NIST Min Temperature: " + tempReadings.Min().ToString()); Trace.WriteLine("NIST Delta Temperature: " + (tempReadings.Max() - tempReadings.Min()).ToString()); var delta = tempReadings.Max() - tempReadings.Min(); counter++; if (delta > deltaSpec && counter < trial) { goto Repeat; } if (counter == trial) // more than 3 times try to get stable temperature, considered failed { myTestInfo.ResultsParams[1].Result = "TIMEOUT"; } else { var averageTemperature = tempReadings.Average(); myTestInfo.ResultsParams[1].Result = "PASS"; myTestInfo.ResultsParams[2].Result = Math.Round(delta, 3).ToString(); myTestInfo.ResultsParams[3].Result = averageTemperature.ToString(); //myTestInfo.ResultsParams[3].SpecMax = Convert.ToString(averageTemperature + deltaSpec); //myTestInfo.ResultsParams[3].SpecMin = Convert.ToString(averageTemperature - deltaSpec); } } catch (Exception) { throw; } }
private void DoTempTest(ref TestInfo myTestInfo, ref UUTData myUUTData, ref CommonData myCommonData) { try { int loop = int.Parse(myTestInfo.TestParams[1].Value); int delay = int.Parse(myTestInfo.TestParams[2].Value); double deltaSpec = double.Parse(myTestInfo.TestParams[3].Value); double deltaSpec2 = double.Parse(myTestInfo.TestParams[4].Value); int trial = Convert.ToInt32(myTestInfo.TestParams[5].Value); int slot = Convert.ToInt32(myCommonData.Slot); // UUT Slot // Configure Thermocouple measurement Trace.WriteLine("Starting to initialize thermocouple and DUT's Temperature board."); InstrumentIO.ConfigureThermocouple(mySw); Trace.WriteLine("Measuring Thermocouple."); Trace.WriteLine("... waiting for the DUT's thermocouple to stabilized."); Trace.WriteLine("Loop 10 times"); int counter = 0; Repeat : List <double> tempReadings = new List <double>(); for (int i = 0; i < loop; i++) { var dutTemp = InstrumentIO.MeasureCalLeakTemp(mySw, slot); tempReadings.Add(dutTemp); Trace.WriteLine("DUT Temperature: " + Math.Round(dutTemp, 2).ToString()); Thread.Sleep(delay); } Trace.WriteLine("DUT Average Temperature: " + tempReadings.Average().ToString()); Trace.WriteLine("DUT Max Temperature: " + tempReadings.Max().ToString()); Trace.WriteLine("DUT Min Temperature: " + tempReadings.Min().ToString()); Trace.WriteLine("DUT Delta Temperature: " + (tempReadings.Max() - tempReadings.Min()).ToString()); var delta = tempReadings.Max() - tempReadings.Min(); counter++; if (delta > deltaSpec && counter < trial) { goto Repeat; } // Measure Board Temperature Trace.WriteLine("Measuring DUT Board Temperature."); Trace.WriteLine("... waiting for the DUT's board's temperature to stabilized."); Trace.WriteLine("Loop 10 times"); //InstrumentIO.SetupBoardTempMeasRoute(mySw, myScope, slot); // setup route for BoardTemp supply and output 5V and TTL signal output int counter2 = 0; Repeat2 : List <double> tempReadings2 = new List <double>(); for (int i = 0; i < loop; i++) // repeat 10times to make sure the temp is stable { var boardTemp = InstrumentIO.MeasureBoardTemperature(mySw, myScope, slot); boardTemp = Math.Round(boardTemp, 2); tempReadings2.Add(boardTemp); Trace.WriteLine("Board Temperature: " + boardTemp.ToString()); Thread.Sleep(delay); } Trace.WriteLine("Board Average Temperature: " + tempReadings2.Average().ToString()); Trace.WriteLine("Board Max Temperature: " + tempReadings2.Max().ToString()); Trace.WriteLine("Board Min Temperature: " + tempReadings2.Min().ToString()); Trace.WriteLine("Board Delta Temperature: " + (tempReadings2.Max() - tempReadings2.Min()).ToString()); var delta2 = tempReadings2.Max() - tempReadings2.Min(); counter2++; if (delta2 > deltaSpec2 && counter2 < trial) { goto Repeat2; } var boardTempFinal = InstrumentIO.MeasureBoardTemperature(mySw, myScope, slot); //InstrumentIO.DisconnectTempBoardMeasRoute(mySw, slot); // Save result if (counter == trial) // more than 3 times try to get stable temperature, considered failed { myTestInfo.ResultsParams[1].Result = "TIMEOUT"; } else { myTestInfo.ResultsParams[1].Result = "PASS"; } //var averageTemperature = tempReadings.Average(); var finalCanTemp = InstrumentIO.MeasureCalLeakTemp(mySw, 1); myTestInfo.ResultsParams[2].Result = Math.Round(delta, 3).ToString(); myTestInfo.ResultsParams[3].Result = Math.Round(finalCanTemp, 1).ToString(); myTestInfo.ResultsParams[4].Result = Math.Round(delta2, 3).ToString(); //var boardTempAve = tempReadings2.Average(); myTestInfo.ResultsParams[5].Result = Math.Round(boardTempFinal, 1).ToString(); // Get Temperature difference between Can's temperature and board temperature. (Factor) double diffTemp = boardTempFinal - finalCanTemp; //myTestInfo.ResultsParams[6].Result = Math.Round(diffTemp, 3).ToString(); } catch (Exception) { throw; } }
private void DoLeakRateTest(ref TestInfo myTestInfo, ref UUTData myUUTData, ref CommonData myCommonData) { try { var slope = Convert.ToDouble(myTestInfo.TestParams[1].Value); var refTemp = Convert.ToDouble(myTestInfo.TestParams[2].Value); var loop = Convert.ToInt32(myTestInfo.TestParams[3].Value); var acquireDelay = Convert.ToInt32(myTestInfo.TestParams[4].Value); var stabilizeDelay = Convert.ToInt32(myTestInfo.TestParams[5].Value); int slot = Convert.ToInt32(myCommonData.Slot); // Step #1: Measure leak rate and calculate normalized leak rate // Close all valves Trace.WriteLine("Verifying test valves are closed..."); InstrumentIO.CloseAllTestValve(mySw); Thread.Sleep(3000); Trace.WriteLine("All valves are closed"); // hold valve Trace.WriteLine("Set VS Leak Detector to HOLD mode"); myLD.Hold(); Thread.Sleep(3000); // Open Test Port Trace.WriteLine(String.Format("Open SLOT#{0} DUT's Test Valve", slot)); InstrumentIO.OpenTestValve(mySw, slot); Thread.Sleep(2000); myLD.Rough(); string status = ""; bool isMidStage = myLD.WaitForFineTest(ref status); if (!isMidStage) { myTestInfo.ResultsParams[1].Result = status; Trace.WriteLine("Unable to set to MIDSTAGE state."); } bool isReadingStabilized = myLD.WaitForStabilizedReading(ref status); if (!isReadingStabilized) { Trace.WriteLine("Timeout to get stable leak rate reading"); } Thread.Sleep(stabilizeDelay * 1000); // Loop measurement for DUT's Leak Rate var listOfLeakRate = new List <double>(); var listOftemp = new List <double>(); var listOfBoardTemp = new List <double>(); // Configure Thermocouple measurement InstrumentIO.ConfigureThermocouple(mySw); Trace.WriteLine(String.Format("Measuring DUT's Leak Rate and Temperature for {0} times.", loop)); for (int i = 0; i < loop; i++) { // read LeakRate double leakRate = Convert.ToDouble(myLD.ReadLeakRate()); var dutTemp = InstrumentIO.MeasureCalLeakTemp(mySw, slot); var boardTemp = InstrumentIO.MeasureBoardTemperature(mySw, myScope, slot); Trace.WriteLine(string.Format("Leak Rate #{0} = {1}std cc/sec & DUT Temp #{0} = {2} Deg C & Board Temp #{0} = {3} Deg C", i + 1, leakRate, dutTemp, boardTemp)); listOfLeakRate.Add(leakRate); listOftemp.Add(dutTemp); listOfBoardTemp.Add(boardTemp); Thread.Sleep(acquireDelay * 1000); // delay in miliseconds } // calculate normalized leak rate var aveLeakRate = listOfLeakRate.Average(); Trace.WriteLine("Average Leak Rate = " + aveLeakRate.ToString()); var aveTemp = listOftemp.Average(); Trace.WriteLine("Average DUT's Temperature = " + aveTemp.ToString()); var aveBoardTemp = listOfBoardTemp.Average(); Trace.WriteLine("Average Board's Temperature = " + aveBoardTemp.ToString()); Trace.WriteLine(string.Format("Calculating DUT Normalized Leak Rate at {0} Deg Celcius reference temperature", refTemp)); var normLeakRateDouble = TestHelper.CalculateNormLeakRate(slope, refTemp, aveLeakRate, aveTemp); Trace.WriteLine("Normalized Leak Rate = " + normLeakRateDouble.ToString()); // store result var normLeakRate = Math.Round(normLeakRateDouble, 9); Trace.WriteLine("Normalized Leak Rate = " + normLeakRate.ToString()); //myTestInfo.ResultsParams[1].Result = normLeakRate.ToString(); myTestInfo.ResultsParams[1].Result = Math.Round(aveLeakRate, 9).ToString(); // Step #2: Temperature measurement to get Factor (Delta DegC between board and cal leak can's temperature // Get Can's temp //var cansTemp = InstrumentIO.MeasureCalLeakTemp(mySw, slot); Trace.WriteLine("DUT Temperature (Thermocouple) : " + aveTemp.ToString()); myTestInfo.ResultsParams[2].Result = Math.Round(aveTemp, 1).ToString(); // Measure Board Temperature //InstrumentIO.SetupBoardTempMeasRoute(mySw, myScope, slot); // setup route for BoardTemp supply and output 5V and TTL signal output myTestInfo.ResultsParams[3].Result = Math.Round(aveBoardTemp, 1).ToString(); //InstrumentIO.DisconnectTempBoardMeasRoute(mySw, slot); Trace.WriteLine("DUT Temperature (PCB) : " + aveBoardTemp.ToString()); // calc temp difference var deltaTemp = aveBoardTemp - aveTemp; Trace.WriteLine("Temperature Difference : " + deltaTemp.ToString()); // store result myTestInfo.ResultsParams[4].Result = Math.Round(deltaTemp, 1).ToString(); // Close Test Valve InstrumentIO.CloseTestValve(mySw, slot); // Set LeakRate and Factor properties to be used for averaging at the end of the test UUTLeakRate = Math.Round(aveLeakRate, 9);//normLeakRateDouble; UUTTempFactor = deltaTemp; UUTTemp = aveTemp; } catch (Exception) { throw; } }
private void DoExperiment1(ref TestInfo myTestInfo, ref UUTData myUUTData, ref CommonData myCommonData) { try { var loop = Convert.ToInt32(myTestInfo.TestParams[1].Value); var delay = Convert.ToInt32(myTestInfo.TestParams[2].Value); // Close all Test Valves InstrumentIO.CloseAllTestValve(mySw); Thread.Sleep(5000); InstrumentIO.OpenTestValve(mySw, 0); // open NIST valve Thread.Sleep(5000); // Configure Thermocouple measurement InstrumentIO.ConfigureThermocouple(mySw); myTestInfo.ResultsParams = new PIResultsArray(); List <PIResult> listOfPIResult = new List <PIResult>(); for (int i = 0; i < loop; i++) { listOfPIResult.Add(new PIResult { Label = string.Format("NistLeakRate#{0}", i + 1), SpecMin = "1E-7", SpecMax = "2E-7", Nominal = "1.5E-7", Unit = "std cc/sec" }); } for (int i = 0; i < loop; i++) { listOfPIResult.Add(new PIResult { Label = string.Format("NISTTemp#{0}", i + 1), SpecMin = "15", SpecMax = "30", Nominal = "22.5", Unit = "Deg C" }); } for (int i = 0; i < loop; i++) { listOfPIResult.Add(new PIResult { Label = string.Format("UUTTemp#{0}", i + 1), SpecMin = "15", SpecMax = "30", Nominal = "22.5", Unit = "Deg C" }); } for (int i = 0; i < loop; i++) { listOfPIResult.Add(new PIResult { Label = string.Format("UUTSensorTemp#{0}", i + 1), SpecMin = "15", SpecMax = "30", Nominal = "22.5", Unit = "Deg C" }); } myTestInfo.ResultsParams.PIResArray = listOfPIResult.ToArray(); myTestInfo.ResultsParams.NumResultParams = listOfPIResult.Count; // Test start here for (int i = 1; i <= loop; i++) // loop 5760 * 60 * 60 with 5sec delay = 8hrs { /* Read * (1) leak rate NIST, * (2) Temp NIST * (3) Temp UUT * (4) Temp Sensor Board */ var leakRate = Convert.ToDouble(myLD.ReadLeakRate().Trim()); var nistTemp = InstrumentIO.MeasureCalLeakTemp(mySw, 0); var uutTemp = InstrumentIO.MeasureCalLeakTemp(mySw, 1); var uutSensTemp = InstrumentIO.MeasureBoardTemperature(mySw, myScope, 1); Trace.WriteLine(string.Format("NIST Leak Rate #{0} = {1}std cc/sec & NIST Temp #{0} = {2} Deg C & DUT Temp #{0} = {3} Deg C & Board Temp #{0} = {4} Deg C", i, leakRate, nistTemp, uutTemp, uutSensTemp)); myTestInfo.ResultsParams[i].Result = Math.Round(leakRate, 8).ToString(); myTestInfo.ResultsParams[i + loop].Result = Math.Round(nistTemp, 3).ToString(); myTestInfo.ResultsParams[i + (loop * 2)].Result = Math.Round(uutTemp, 3).ToString(); myTestInfo.ResultsParams[i + (loop * 3)].Result = Math.Round(uutSensTemp, 3).ToString(); // Delay 5 seconds, maybe Thread.Sleep(delay * 1000); } } catch (Exception) { throw; } }
private void DoLeakRateProfilingTest(ref TestInfo myTestInfo, ref UUTData myUUTData, ref CommonData myCommonData) { try { var slope = Convert.ToDouble(myTestInfo.TestParams[1].Value); var refTemp = Convert.ToDouble(myTestInfo.TestParams[2].Value); var loop = Convert.ToInt32(myTestInfo.TestParams[3].Value); var acquireDelay = Convert.ToInt32(myTestInfo.TestParams[4].Value); //var holdDelay = Convert.ToInt32(myTestInfo.TestParams[5].Value); int slot = Convert.ToInt32(myCommonData.Slot); // Step #1: Measure leak rate and calculate normalized leak rate // Close all valves Trace.WriteLine("Verifying test valves are closed..."); InstrumentIO.CloseAllTestValve(mySw); Thread.Sleep(5000); Trace.WriteLine("All valves are closed"); // hold valve Trace.WriteLine("Set VS Leak Detector to HOLD mode"); myLD.Hold(); Thread.Sleep(5000); // Open Test Port Trace.WriteLine(String.Format("Open SLOT#{0} DUT's Test Valve", slot)); InstrumentIO.OpenTestValve(mySw, slot); Thread.Sleep(1000); myLD.Rough(); // rough the LD //Thread.Sleep(holdDelay * 1000); // once LD in FineTest myTestInfo.ResultsParams = new PIResultsArray(); List <PIResult> listOfPIResult = new List <PIResult>(); for (int i = 0; i < loop; i++) { listOfPIResult.Add(new PIResult { Label = string.Format("LeakRate#{0}", i + 1), SpecMin = "1E-7", SpecMax = "2E-7", Nominal = "1.5E-7", Unit = "std cc/sec" }); } for (int i = 0; i < loop; i++) { listOfPIResult.Add(new PIResult { Label = string.Format("Temp#{0}", i + 1), SpecMin = "15", SpecMax = "30", Nominal = "22.5", Unit = "Deg C" }); } myTestInfo.ResultsParams.PIResArray = listOfPIResult.ToArray(); myTestInfo.ResultsParams.NumResultParams = listOfPIResult.Count; // Loop measurement for DUT's Leak Rate var listOfLeakRate = new List <double>(); var listOftemp = new List <double>(); var listOfBoardTemp = new List <double>(); // Configure Thermocouple measurement InstrumentIO.ConfigureThermocouple(mySw); Trace.WriteLine(String.Format("Measuring DUT's Leak Rate and Temperature for {0} times.", loop)); int cnt1 = 0; int cnt2 = 0; for (int i = 1; i <= loop; i++) { // read LeakRate double leakRate = Convert.ToDouble(myLD.ReadLeakRate()); var dutTemp = InstrumentIO.MeasureCalLeakTemp(mySw, slot); var boardTemp = InstrumentIO.MeasureBoardTemperature(mySw, myScope, slot); Trace.WriteLine(string.Format("Leak Rate #{0} = {1}std cc/sec & DUT Temp #{0} = {2} Deg C & Board Temp #{0} = {3} Deg C", i, leakRate, dutTemp, boardTemp)); listOfLeakRate.Add(leakRate); listOftemp.Add(dutTemp); listOfBoardTemp.Add(boardTemp); Thread.Sleep(acquireDelay * 1000); // delay in miliseconds myTestInfo.ResultsParams[i].Result = Math.Round(leakRate, 8).ToString(); myTestInfo.ResultsParams[i + loop].Result = Math.Round(dutTemp, 3).ToString(); } } catch (Exception) { throw; } }