Пример #1
0
        protected bool ReadVccADC(DUT inputDut, Powersupply inputPowerSupply)
        {
            byte tempCount;

            if (GlobalParameters.TotalVccCount <= 0)
            {
                tempCount = 1;
            }
            else
            {
                tempCount = GlobalParameters.TotalVccCount;
            }

            for (byte i = 0; i < tempCount; i++)
            {
                for (byte j = 0; j < calVccDmiStruct.ArrayListVcc.Count; j++)
                {
                    inputPowerSupply.ConfigVoltageCurrent(calVccDmiStruct.ArrayListVcc[j].ToString(), 0);
                    UInt16 temp;
                    Thread.Sleep(1000);
                    dut.ReadVccADC(out temp, (byte)(i + 1));
                    vccAdcArray[i, j] = Convert.ToDouble(temp);
                }
            }
            return(true);
        }
Пример #2
0
        protected override bool StartTest()
        {
            logoStr = "";
            calledCount++;
            if (calledCount > 1)
            {
                Log.SaveLogToTxt("calledCount>1");
                OutPutandFlushLog();
                return(true);
            }
            if (AnalysisInputParameters(inputParameters) == false)
            {
                OutPutandFlushLog();
                return(false);
            }

            if (tempps != null)
            {
                if (GlobalParameters.TotalVccCount <= 0)
                {
                    vccAdcArray = new double[1, calVccDmiStruct.ArrayListVcc.Count];
                }
                else
                {
                    vccAdcArray = new double[GlobalParameters.TotalVccCount, calVccDmiStruct.ArrayListVcc.Count];
                }

                ReadVccADC(dut, tempps);
                Log.SaveLogToTxt("Step3...Start Fitting Curve");
                tempVccArray = new double[calVccDmiStruct.ArrayListVcc.Count];
                for (byte i = 0; i < calVccDmiStruct.ArrayListVcc.Count; i++)
                {
                    tempVccArray[i] = Convert.ToDouble(calVccDmiStruct.ArrayListVcc[i].ToString());
                }
                tempps.ConfigVoltageCurrent(Convert.ToString(GlobalParameters.CurrentVcc));

                if (!CurveVccDMIandWriteCoefs())
                {
                    OutPutandFlushLog();
                    return(false);
                }
                tempps.OutPutSwitch(false);
                tempps.OutPutSwitch(true);
                dut.FullFunctionEnable();
            }
            else
            {
                Log.SaveLogToTxt("Equipments are not enough!");
                isCalVccDmiOk = false;
                OutPutandFlushLog();
                return(isCalVccDmiOk);
            }
            OutPutandFlushLog();
            return(true);
        }
Пример #3
0
 protected bool ReadVccADCTM(DUT inputDut, Powersupply inputPowerSupply)
 {
     for (byte i = 0; i < GlobalParameters.TotalVccCount; i++)
     {
         for (byte j = 0; j < calVccDmiStruct.ArrayListVcc.Count; j++)
         {
             inputPowerSupply.ConfigVoltageCurrent(Convert.ToString(Convert.ToDouble(calVccDmiStruct.ArrayListVcc[i]) + GlobalParameters.VccOffset));
             Thread.Sleep(1000);
             UInt16 temp;
             dut.ReadVccADC(out temp, (byte)(i + 1));
             vccAdcArray[i, j] = Convert.ToDouble(temp);
         }
     }
     return(true);
 }
Пример #4
0
        protected override bool StartTest()
        {
            logger.FlushLogBuffer();
            logoStr = "";
            calledCount++;
            if (calledCount > 1)
            {
                logger.AdapterLogString(0, "calledCount>1");
                return(true);
            }
            if (AnalysisInputParameters(inputParameters) == false)
            {
                return(false);
            }
            if (selectedEquipList["POWERSUPPLY"] != null && selectedEquipList["DUT"] != null)
            {
                bool isWriteCoefCOk = false;
                bool isWriteCoefBOk = false;
                bool isWriteCoefAOk = false;

                Powersupply tempps = (Powersupply)selectedEquipList["POWERSUPPLY"];
                // close apc
                string apcstring = null;
                dut.APCStatus(out apcstring);
                if (apcstring == "ON" || apcstring == "FF")
                {
                    logoStr += logger.AdapterLogString(0, "Step2...Start close apc");
                    dut.APCOFF();
                    logoStr += logger.AdapterLogString(0, "Power off");
                    tempps.Switch(false);
                    Thread.Sleep(200);
                    logoStr += logger.AdapterLogString(0, "Power on");
                    tempps.Switch(true);
                    Thread.Sleep(200);
                    bool isclosed = dut.APCStatus(out apcstring);
                    if (apcstring == "OFF")
                    {
                        logoStr += logger.AdapterLogString(1, "APC OFF");
                    }
                    else
                    {
                        logoStr += logger.AdapterLogString(3, "APC NOT OFF");
                    }
                }
                // close apc
                vccAdcArray = new double[GlobalParameters.TotalVccCount, calVccDmiStruct.ArrayListVcc.Count];
                ReadVccADCTM(dut, tempps);
                logoStr += logger.AdapterLogString(0, "Step3...Start Fitting Curve");
                double[] tempVccArray = new double[calVccDmiStruct.ArrayListVcc.Count];
                for (byte i = 0; i < calVccDmiStruct.ArrayListVcc.Count; i++)
                {
                    tempVccArray[i] = Convert.ToDouble(calVccDmiStruct.ArrayListVcc[i].ToString());
                }
                tempps.ConfigVoltageCurrent(Convert.ToString(GlobalParameters.VccOffset + calVccDmiStruct.generalVcc));
                if (calVccDmiStruct.is1Stor2StorPid == 1)
                {
                    for (byte i = 0; i < tempVccArray.Length; i++)
                    {
                        tempVccArray[i] = tempVccArray[i] * 10000;
                    }
                    for (byte i = 0; i < GlobalParameters.TotalVccCount; i++)
                    {
                        double[] tempAdc = new double[calVccDmiStruct.ArrayListVcc.Count];
                        for (byte j = 0; j < calVccDmiStruct.ArrayListVcc.Count; j++)
                        {
                            tempAdc[j] = vccAdcArray[i, j];
                        }
                        double[] coefArray = algorithm.MultiLine(tempAdc, tempVccArray, calVccDmiStruct.ArrayListVcc.Count, 1);
                        vccDmiCoefC = (float)coefArray[0];
                        vccDmiCoefB = (float)coefArray[1];
                        vccDmiCoefB = vccDmiCoefB * 256;
                        double[] tempCoefArray = new double[2] {
                            vccDmiCoefC, vccDmiCoefB
                        };
                        vccDmiCoefArray = ArrayList.Adapter(coefArray);
                        vccDmiCoefArray.Reverse();
                        for (byte k = 0; k < vccDmiCoefArray.Count; k++)
                        {
                            logoStr += logger.AdapterLogString(1, "vccDmiCoefArray[" + k.ToString() + "]=" + vccDmiCoefArray[k].ToString() + " " + algorithm.ByteArraytoString(2, ",", algorithm.INT16To2Bytes(vccDmiCoefArray[k])));
                        }
                        logoStr += logger.AdapterLogString(0, "Step4...WriteCoef");
                        #region W&R Vcccoefc
                        isWriteCoefCOk = dut.SetVcccoefc(vccDmiCoefC.ToString(), (byte)(i + 1));
                        if (isWriteCoefCOk)
                        {
                            isWriteCoefCOk = true;
                            logoStr       += logger.AdapterLogString(1, "WritevccDmiCoefC:" + isWriteCoefCOk.ToString());
                        }
                        else
                        {
                            isWriteCoefCOk = false;
                            logoStr       += logger.AdapterLogString(3, "WritevccDmiCoefC:" + isWriteCoefCOk.ToString());
                        }
                        #endregion
                        #region W&R Vcccoefb
                        isWriteCoefBOk = dut.SetVcccoefb(vccDmiCoefB.ToString(), (byte)(i + 1));

                        if (isWriteCoefBOk)
                        {
                            isWriteCoefBOk = true;
                            logoStr       += logger.AdapterLogString(1, "WritevccDmiCoefB:" + isWriteCoefBOk.ToString());
                        }

                        else
                        {
                            isWriteCoefBOk = false;
                            logoStr       += logger.AdapterLogString(3, "WritevccDmiCoefB:" + isWriteCoefBOk.ToString());
                        }
                        #endregion
                        if (isWriteCoefBOk & isWriteCoefCOk)
                        {
                            isCalVccDmiOk = true;

                            logoStr += logger.AdapterLogString(1, "isCalVccDmiOk:" + isCalVccDmiOk.ToString());
                        }
                        else
                        {
                            isCalVccDmiOk = false;
                            logoStr      += logger.AdapterLogString(3, "isCalVccDmiOk:" + isCalVccDmiOk.ToString());
                        }
                    }
                }
                else if (calVccDmiStruct.is1Stor2StorPid == 2)
                {
                    for (byte i = 0; i < tempVccArray.Length; i++)
                    {
                        tempVccArray[i] = tempVccArray[i] * 10000;
                    }
                    for (byte i = 0; i < GlobalParameters.TotalVccCount; i++)
                    {
                        double[] tempAdc = new double[calVccDmiStruct.ArrayListVcc.Count];

                        for (byte j = 0; j < calVccDmiStruct.ArrayListVcc.Count; j++)
                        {
                            tempAdc[j] = vccAdcArray[i, j];
                        }
                        double[] coefArray = algorithm.MultiLine(tempAdc, tempVccArray, calVccDmiStruct.ArrayListVcc.Count, 2);
                        vccDmiCoefC = (float)coefArray[0];
                        vccDmiCoefB = (float)coefArray[1];
                        vccDmiCoefA = (float)coefArray[2];

                        vccDmiCoefArray = ArrayList.Adapter(coefArray);
                        vccDmiCoefArray.Reverse();
                        for (byte k = 0; k < vccDmiCoefArray.Count; k++)
                        {
                            logoStr += logger.AdapterLogString(1, "vccDmiCoefArray[" + k.ToString() + "]=" + vccDmiCoefArray[k].ToString() + " " + algorithm.ByteArraytoString(2, ",", algorithm.INT16To2Bytes(vccDmiCoefArray[k])));
                        }
                        logoStr += logger.AdapterLogString(0, "Step4...WriteCoef");
                        #region W&R Vcccoefc
                        isWriteCoefCOk = dut.SetVcccoefc(vccDmiCoefC.ToString());
                        if (isWriteCoefCOk)
                        {
                            isWriteCoefCOk = true;
                            logoStr       += logger.AdapterLogString(1, "WritevccDmiCoefC:" + isWriteCoefCOk.ToString());
                        }
                        else
                        {
                            isWriteCoefCOk = false;
                            logoStr       += logger.AdapterLogString(3, "WritevccDmiCoefC:" + isWriteCoefCOk.ToString());
                        }
                        #endregion
                        #region W&R Vcccoefb
                        isWriteCoefBOk = dut.SetVcccoefb(vccDmiCoefB.ToString(), (byte)(i + 1));

                        if (isWriteCoefBOk)
                        {
                            isWriteCoefBOk = true;

                            logoStr += logger.AdapterLogString(1, "WritevccDmiCoefB:" + isWriteCoefBOk.ToString());
                        }
                        else
                        {
                            isWriteCoefBOk = false;
                            logoStr       += logger.AdapterLogString(3, "WritevccDmiCoefB:" + isWriteCoefBOk.ToString());
                        }
                        #endregion
                        #region W&R Vcccoefa
                        //isWriteCoefAOk = dut.SetVcccoefa(vccDmiCoefA.ToString(), i + 1);
                        if (isWriteCoefAOk)
                        {
                            isWriteCoefAOk = true;
                            logoStr       += logger.AdapterLogString(1, "WritevccDmiCoefA:" + isWriteCoefAOk.ToString());
                        }
                        else
                        {
                            isWriteCoefAOk = false;
                            logoStr       += logger.AdapterLogString(3, "WritevccDmiCoefA:" + isWriteCoefAOk.ToString());
                        }
                        #endregion
                        if (isWriteCoefBOk & isWriteCoefCOk & isWriteCoefAOk)
                        {
                            isCalVccDmiOk = true;
                            logoStr      += logger.AdapterLogString(1, "isCalVccDmiOk:" + isCalVccDmiOk.ToString());
                        }
                        else
                        {
                            isCalVccDmiOk = false;
                            logoStr      += logger.AdapterLogString(3, "isCalVccDmiOk:" + isCalVccDmiOk.ToString());
                        }
                    }
                }
            }
            else
            {
                logoStr      += logger.AdapterLogString(4, "Equipments is not enough!");
                isCalVccDmiOk = false;
                logger.FlushLogBuffer();
                return(isCalVccDmiOk);
            }
            AnalysisOutputParameters(outputParameters);
            logger.FlushLogBuffer();
            return(isCalVccDmiOk);
        }