Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }