public Dictionary <string, double> BeginTest(DUT dut, Dictionary <string, IEquipment> equipments, Dictionary <string, string> inPara) { try { //get the current test channel int channel = ConditionParaByTestPlan.Channel; Log.SaveLogToTxt("Start to do quick check test for channel " + channel); //get equipment object PowerSupply supply = (PowerSupply)equipments["POWERSUPPLY"]; Attennuator attennuator = (Attennuator)equipments["ATTENNUATOR"]; OpticalSwitch opticalSwitch = (OpticalSwitch)equipments["OPTICALSWITCH"]; PowerMeter powerMeter = (PowerMeter)equipments["POWERMETER"]; //get in parameters string[] BiasDACs = inPara["BIASDACS"].Split(','); string[] ModDACs = inPara["MODDACS"].Split(','); double ratio = Convert.ToDouble(inPara["RATIO"]); double U_Ref = Convert.ToDouble(inPara["UREF"]); double resolution = Convert.ToDouble(inPara["RESOLUTION"]); double R_rssi = Convert.ToDouble(inPara["RRSSI"]); //read current of power supply double current = supply.GetCurrent(); // close apc Log.SaveLogToTxt("Close apc for module."); dut.CloseAndOpenAPC(Convert.ToByte(DUT.APCMODE.IBAISandIMODOFF)); //disable attennuator and Tx to read Rx/TxDarkADC Log.SaveLogToTxt("Shut down attennuator and disable Tx to read Tx/RxDark ADC for channel " + channel); attennuator.OutPutSwitch(false); ushort RxDarkADC = dut.ReadADC(DUT.NameOfADC.RXPOWERADC, channel); dut.SetSoftTxDis(); ushort TxDarkADC = dut.ReadADC(DUT.NameOfADC.TXPOWERADC, channel); Log.SaveLogToTxt("TxDarkADC is " + TxDarkADC); Log.SaveLogToTxt("RxDarkADC is " + RxDarkADC); //enable attennuator and Tx Log.SaveLogToTxt("Power on attennuator and set value to 0"); attennuator.OutPutSwitch(true); attennuator.SetAttnValue(0); Log.SaveLogToTxt("Light on all Tx channel."); dut.TxAllChannelEnable(); ConfigXmlIO myXml = new ConfigXmlIO(FilePath.ConfigXml); //get scope/powermeter's offset string[] offsetArray = myXml.ScopeOffset.Split(','); double offset = Convert.ToDouble(offsetArray[channel - 1]); //get attenator's ofset string[] lightSourceArray = myXml.AttennuatorOffset.Split(','); double lightSource = Convert.ToDouble(lightSourceArray[channel - 1]); //calculate RxRes double RxRes = dut.CalRxRes(lightSource, channel, ratio, U_Ref, resolution, R_rssi); Log.SaveLogToTxt("Calculate RES of Rx is " + RxRes.ToString("f3")); //set default Bias/ModDAC Log.SaveLogToTxt("Set BiasDAC is " + BiasDACs[channel - 1]); Log.SaveLogToTxt("Set ModDAC is " + ModDACs[channel - 1]); dut.WriteChipDAC(DUT.NameOfChipDAC.BIASDAC, channel, BiasDACs[channel - 1]); dut.WriteChipDAC(DUT.NameOfChipDAC.MODDAC, channel, ModDACs[channel - 1]); //change to related change, and read Tx power opticalSwitch.ChangeChannel(channel); double TxP = powerMeter.ReadPower(channel) + offset; Log.SaveLogToTxt("Get Tx power is " + TxP.ToString("f3")); //read SN again and check its format string dut_SN = dut.ReadSN(); if (!Algorithm.CheckSerialNumberFormat(dut_SN)) { Log.SaveLogToTxt("Module' serial number is not correct"); return(null); } Log.SaveLogToTxt("Again. Read module' serial number is " + dut_SN); //save test data to TestData class DataRow dr = testData.NewRow(); dr["Family"] = GlobalParaByPN.Family; dr["PartNumber"] = GlobalParaByPN.PN; dr["SerialNumber"] = dut_SN; dr["Channel"] = channel; dr["Current"] = current.ToString("f3"); dr["Temp"] = ConditionParaByTestPlan.Temp; dr["Station"] = GlobalParaByPN.Station; dr["Time"] = DateTime.Now; dr["TxDarkADC"] = TxDarkADC; dr["TxPower"] = TxP.ToString("f3"); dr["RxDarkADC"] = RxDarkADC; dr["RxRes"] = RxRes.ToString("f3"); dr["DeltaTxDarkADC"] = -99999; dr["DeltaTxPower"] = "-99999"; dr["DeltaRxDarkADC"] = -99999; dr["DeltaRxRes"] = "-99999"; dr["Result"] = -1; if (GlobalParaByPN.Station == "PreModule") { dr["Result"] = 0; } else { Log.SaveLogToTxt("Try to get test data of pre module station to calculate delta."); //conect to mysql database to get test recording of pre module station string mysqlconCommand = "Database=my_databases;Data Source=localhost;User Id=root;Password=abc@123;pooling=false;CharSet=utf8;port=3306"; MySqlConnection mycon = new MySqlConnection(); mycon.ConnectionString = mysqlconCommand; mycon.Open(); string table = "my_databases.quickcheck_testdata"; string experisson = "SELECT * FROM my_databases.quickcheck_testdata where PartNumber = '" + GlobalParaByPN.PN + "' and Serialnumber = '" + dut_SN + "' and Channel = " + channel + " and Temp = " + ConditionParaByTestPlan.Temp + " and Station = 'PreModule' order by ID"; MySqlDataAdapter da = new MySqlDataAdapter(experisson, mycon); MySqlCommandBuilder cb = new MySqlCommandBuilder(da); DataSet ds = new DataSet(table); da.Fill(ds, table); DataTable dt = ds.Tables[table]; mycon.Close(); if (dt.Rows.Count != 0) { //calculate delta: post - pre dr["DeltaTxDarkADC"] = Convert.ToInt32(dr["TxDarkADC"]) - Convert.ToInt32(dt.Rows[dt.Rows.Count - 1]["TxDarkADC"]); dr["DeltaTxPower"] = (Convert.ToDouble(dr["TxPower"]) - Convert.ToDouble(dt.Rows[dt.Rows.Count - 1]["TxPower"])).ToString("f3"); dr["DeltaRxDarkADC"] = Convert.ToInt32(dr["RxDarkADC"]) - Convert.ToInt32(dt.Rows[dt.Rows.Count - 1]["RxDarkADC"]); double orgRxRes = Convert.ToDouble(dt.Rows[dt.Rows.Count - 1]["RxRes"]); //orgRxRes can't be zero dr["DeltaRxRes"] = (orgRxRes == 0) ? "-99999" : (100.0 * (Convert.ToDouble(dr["RxRes"]) - orgRxRes) / orgRxRes).ToString("f2") + "%"; dr["Result"] = 0; Log.SaveLogToTxt("Sucessfully get test data of pre module station."); Log.SaveLogToTxt("DeltaTxDarkADC is " + dr["DeltaTxDarkADC"]); Log.SaveLogToTxt("DeltaTxPower is " + dr["DeltaTxPower"]); Log.SaveLogToTxt("DeltaRxDarkADC is " + dr["DeltaRxDarkADC"]); Log.SaveLogToTxt("DeltaRxRes is " + dr["DeltaRxRes"]); } else { Log.SaveLogToTxt("Failed to get test data of pre module station."); //return false; } } testData.Rows.Add(dr); dr = null; Log.SaveLogToTxt("End quick check test for channel " + channel + "\r\n"); //save testdata Dictionary <string, double> dic = new Dictionary <string, double>(); dic.Add("Result", 1); return(dic); } catch { Log.SaveLogToTxt("Failed quickcheck test."); return(null); } }
public Dictionary <string, double> BeginTest(DUT dut, Dictionary <string, IEquipment> equipments, Dictionary <string, string> inPara) { //get the current test channel int channel = ConditionParaByTestPlan.Channel; try { //get equipment object Attennuator attennuator = (Attennuator)equipments["ATTENNUATOR"]; //change to Rx path, if have this equipment, it can not run parallel test, just to do one by one. //due to it is the common equipment between Tx and Rx. if (equipments.Keys.Contains("NA_OPTICALSWITCH")) { Log.SaveLogToTxt("It can not parallel initial, due to Tx/Rx have common equipment NA_OPTICALSWITCH."); Log.SaveLogToTxt("have to test one by one."); OpticalSwitch opticalSwitch = (OpticalSwitch)equipments["NA_OPTICALSWITCH"]; opticalSwitch.CheckEquipmentRole(2, (byte)channel); } lock (attennuator) { Log.SaveLogToTxt("Start to do RxPowerDmi test for channel " + channel); //get input para ArrayList rxInputPower = Algorithm.StringtoArraylistDeletePunctuations(inPara["RXPOWERARRLIST(DBM)"], new char[] { ',' }); if (rxInputPower == null) { return(null); } //set different point to get rxPowerDmi attennuator.AttnValue(rxInputPower[0].ToString(), 1); Thread.Sleep(3000); double[] rxPowerDmiArray = new double[rxInputPower.Count]; double[] rxPowerErrArray = new double[rxInputPower.Count]; double[] rxPowerErrRawArray = new double[rxInputPower.Count]; for (byte i = 0; i < rxInputPower.Count; i++) { attennuator.AttnValue(rxInputPower[i].ToString(), 1); rxPowerDmiArray[i] = dut.ReadDmiRxP(channel); rxPowerErrArray[i] = Math.Abs(Convert.ToDouble(rxInputPower[i].ToString()) - rxPowerDmiArray[i]); rxPowerErrRawArray[i] = Convert.ToDouble(rxInputPower[i].ToString()) - rxPowerDmiArray[i]; Log.SaveLogToTxt("rxInputPower[" + i.ToString() + "]: " + rxInputPower[i].ToString() + " rxPowerDmiArray[" + i.ToString("f3") + "]: " + rxPowerDmiArray[i].ToString() + " rxPowerErrArray[" + i.ToString() + "]: " + rxPowerErrArray[i].ToString("f3")); } //calculate delta and get the max byte maxIndex; Algorithm.SelectMaxValue(ArrayList.Adapter(rxPowerErrArray), out maxIndex); double maxErr = rxPowerErrRawArray[maxIndex]; double errMaxPoint = Convert.ToDouble(rxInputPower[maxIndex].ToString()); Log.SaveLogToTxt("ErrMaxPoint = " + errMaxPoint.ToString() + " MaxErr = " + maxErr.ToString("f3")); //get rxPowerDmi without any input optical power attennuator.OutPutSwitch(false); Thread.Sleep(2000); double rxNopticalPoint = dut.ReadDmiRxP(channel); Log.SaveLogToTxt("RxNopticalPoint=" + rxNopticalPoint.ToString()); attennuator.OutPutSwitch(true); Log.SaveLogToTxt("End RxPowerDmi test for channel " + channel + "\r\n"); //save testdata Dictionary <string, double> dictionary = new Dictionary <string, double>(); dictionary.Add("DmiRxPWRErr", maxErr); dictionary.Add("DmiRxNOptical", rxNopticalPoint); dictionary.Add("Result", 1); return(dictionary); } } catch { Log.SaveLogToTxt("Failed DMI_ICC test for channel " + channel + "\r\n"); return(null); } }