protected override bool StartTest() { lock (tempAtten) { logoStr = ""; if (AnalysisInputParameters(inputParameters) == false) { OutPutandFlushLog(); return(false); } if (tempps != null && tempAtten != null) { // open apc //CloseandOpenAPC(Convert.ToByte(APCMODE.IBAISandIMODON)); // open apc Log.SaveLogToTxt("Step3...Start Test RxDmi"); double[] tempRxPowerDmiArray = new double[testRxPowerDmiStruct.ArrayListRxInputPower.Count]; double[] tempRxPowerErrArray = new double[testRxPowerDmiStruct.ArrayListRxInputPower.Count]; double[] tempRxPowerErrRawArray = new double[testRxPowerDmiStruct.ArrayListRxInputPower.Count]; tempAtten.AttnValue(testRxPowerDmiStruct.ArrayListRxInputPower[0].ToString(), 1); Thread.Sleep(3000); for (byte i = 0; i < testRxPowerDmiStruct.ArrayListRxInputPower.Count; i++) { tempAtten.AttnValue(testRxPowerDmiStruct.ArrayListRxInputPower[i].ToString(), 1); tempRxPowerDmiArray[i] = dut.ReadDmiRxp(); tempRxPowerErrArray[i] = Math.Abs(Convert.ToDouble(testRxPowerDmiStruct.ArrayListRxInputPower[i].ToString()) - tempRxPowerDmiArray[i]); tempRxPowerErrRawArray[i] = Convert.ToDouble(testRxPowerDmiStruct.ArrayListRxInputPower[i].ToString()) - tempRxPowerDmiArray[i]; Log.SaveLogToTxt("testRxPowerDmiStruct.ArrayListRxInputPower[" + i.ToString() + "]:" + testRxPowerDmiStruct.ArrayListRxInputPower[i].ToString() + "tempRxPowerDmiArray[" + i.ToString() + "]:" + tempRxPowerDmiArray[i].ToString() + "tempRxPowerErrArray[" + i.ToString() + "]" + tempRxPowerErrArray[i].ToString()); } byte maxIndex; Algorithm.SelectMaxValue(ArrayList.Adapter(tempRxPowerErrArray), out maxIndex); MaxErr = tempRxPowerErrRawArray[maxIndex]; ErrMaxPoint = Convert.ToDouble(testRxPowerDmiStruct.ArrayListRxInputPower[maxIndex].ToString()); Log.SaveLogToTxt("ErrMaxPoint=" + ErrMaxPoint.ToString() + " MaxErr" + MaxErr.ToString()); tempAtten.OutPutSwitch(false); Thread.Sleep(2000); RxNopticalPoint = dut.ReadDmiRxp(); tempAtten.OutPutSwitch(true); OutPutandFlushLog(); return(true); } else { Log.SaveLogToTxt("Equipments are not enough!"); OutPutandFlushLog(); return(false); } } }
protected override bool StartTest() { RxPowerArray.Clear(); BerArrayRX.Clear(); TxPowerArray.Clear(); BerArrayTX.Clear(); logoStr = ""; if (AnalysisInputParameters(inputParameters) == false) { OutPutandFlushLog(); return(false); } if (tempED != null && tempAttenRX != null && tempAttenTX != null && tempPowerMeter != null && tempps != null) { if (!CloseandOpenAPC(Convert.ToByte(APCMODE.IBAISandIMODON))) { return(false); //开启APC } if (!tempPPG.ConfigurePrbsLength(Convert.ToByte(testTxReturnLostToleranceStruct.ReturnLosTolerancePRBS))) { return(false); //Bert码型为PRBS31 } //if (!SetTargetPower(testTxReturnLostToleranceStruct.TargetPower)) return false; //调节反射器处的衰减器,使光功率计值降TargetPower以下 tempAttenTX.OutPutSwitch(false); Log.SaveLogToTxt("Step2...SetAttenValue"); tempAttenRX.AttnValue(testTxReturnLostToleranceStruct.CsenAlignRxPwr.ToString()); Log.SaveLogToTxt("Step3...AutoAlaign"); bool isAutoAlaign = tempED.AutoAlaign(true); if (isAutoAlaign) { Log.SaveLogToTxt(isAutoAlaign.ToString()); Log.SaveLogToTxt("Step4...TestTxReturnLostTolerance"); double ber = -1; int i = 0; double RxPower = 0; int LoopCount = 0; double countMol = testTxReturnLostToleranceStruct.LoopTime % testTxReturnLostToleranceStruct.GatingTime; if (countMol == 0) { LoopCount = Convert.ToInt32(testTxReturnLostToleranceStruct.LoopTime / testTxReturnLostToleranceStruct.GatingTime); } else { LoopCount = Convert.ToInt32((testTxReturnLostToleranceStruct.LoopTime - countMol) / testTxReturnLostToleranceStruct.GatingTime) + 1; } do { RxPower = testTxReturnLostToleranceStruct.StartRxPwr + testTxReturnLostToleranceStruct.RXAttStep * i; tempAttenRX.AttnValue(RxPower.ToString()); RxPowerArray.Add(RxPower); Log.SaveLogToTxt("SetAttenRX=" + RxPower.ToString()); tempED.EdGatingStart(); //刷新误码数 for (int j = 0; j < LoopCount; j++) { Thread.Sleep(Convert.ToInt32(testTxReturnLostToleranceStruct.GatingTime * 1000)); ber = tempED.QureyEdErrorRatio(); Log.SaveLogToTxt("BerRX=" + ber.ToString()); if (ber != 0) { BerArrayRX.Add(ber); break; } else { if (j == LoopCount - 1) { BerArrayRX.Add(ber); } } } i++; }while (ber != 0); if (ber == 0) { NoneBerPoint = RxPower; //tempAttenRX.AttnValue(NoneBerPoint.ToString()); Log.SaveLogToTxt("NoneBerPoint= " + NoneBerPoint.ToString()); } //tempED.EdGatingStart(); //刷新误码数 double value = 11.5; do { StartTxPwr = dut.ReadDmiTxp() - value; if (!this.SetTargetPower(StartTxPwr)) { return(false); } tempED.EdGatingStart(); //刷新误码数 for (int j = 0; j < LoopCount; j++) { Thread.Sleep(Convert.ToInt32(testTxReturnLostToleranceStruct.GatingTime * 1000)); ber = tempED.QureyEdErrorRatio(); Log.SaveLogToTxt("BerRX=" + ber.ToString()); if (ber != 0) { break; } } if (ber == 0) { TxReturnLosTolerance = tempPowerMeter.ReadPower(); Log.SaveLogToTxt("TxReturnLosTolerance= " + TxReturnLosTolerance.ToString()); break; } //tempAttenTX.SetAttnValue(40); value += 0.5; } while (value < 13); TxReturnLosTolerance = value; OutPutandFlushLog(); return(true); } else { Log.SaveLogToTxt(isAutoAlaign.ToString()); TxReturnLosTolerance = -1000; OutPutandFlushLog(); return(isAutoAlaign); } } else { Log.SaveLogToTxt("Equipments are not enough!"); //AnalysisOutputProcData(procData); AnalysisOutputParameters(outputParameters); return(false); } }