private bool SetTargetPower(double TargerPower) { // double[] PowerArray = new double[] { -30, -43, -41, -40.2 }; double TempValue; double StartPower; pAtt.SetAttnValue(0, 1); StartPower = pPowerMeter.ReadPower(); pAtt.SetAttnValue((StartPower - TargerPower), 1); double AttStep = 0; TempValue = pPowerMeter.ReadPower(); int i = 0; while (Math.Abs(TargerPower - TempValue) > 0.5) { if (TempValue - TargerPower > 1) { AttStep = 1; } else if (TempValue - TargerPower < -1) { AttStep = -1; } else if (TempValue - TargerPower > 0.2) { AttStep = 0.2; } else if (TempValue - TargerPower < -0.2) { AttStep = -0.2; } pAtt.AdjustAttnValue(AttStep, 1); TempValue = pPowerMeter.ReadPower(); //---------------- // TempValue = PowerArray[i]; //---------------- i++; if (i > 20) { return(false); } } return(true); }
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); } }