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); }
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); }
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); }
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); }