示例#1
0
    def test_method(self):

        passFlag = True
        self.port = {}
        self.IL = {}
        pd1 = CalConfig.rxPinAdc['PD1']
        pd2 = CalConfig.rxPinAdc['PD2']
        self.dbRes = {}
        delta_pd_min = CalConfig.pd_pwr_delta['Min']
        delta_pd_max = CalConfig.pd_pwr_delta['Max']

        while(1):
            response = self.displayMenu(self.setUp)
            if (response == "Y"):
                break
            if(response == "N"):
                raise TestSuiteAbort, "User aborted the test"
        
        self.info("Pd Padding test using onboard EDFA")

        self.IL['out1'] = self.displayMenu('Enter Demod out1 IL from demod data sheet: ','float')
        self.IL['out2'] = self.displayMenu('Enter Demod out2 IL from demod data sheet: ','float')

        if( self.IL['out1'] > self.IL['out2']):
            self.info("Output #1 is the High Loss Port")
            self.port['HL'] = 1
            self.port['LL'] = 2
        else:
            self.info("Output #2 is the High Loss Port")
            self.port['HL'] = 2
            self.port['LL'] = 1
        
        self.lowLossPad = self.displayMenu('Pick a 0.0 +/- 0.25 dB dB pad and report its value: ','float')
        self.info('User picked zerodB (actual) = %0.3f' % (self.lowLossPad))

        deltaIL = self.IL['out1'] - self.IL['out2']

        self.hiLossPadEstd = CalConfig.pdDelta - deltaIL + self.lowLossPad
        self.info("Estimated Hi Loss Pad: %0.3f" % (self.hiLossPadEstd))

        s = ("Pick %0.2f +/- 0.25 dB pad and report its actual value :" %
             (self.hiLossPadEstd))
        self.pickHiLossPad = self.displayMenu(s,'float')
        self.info('User picked hiLossPad  = %0.3f' % (self.pickHiLossPad))

        self.info("Connect as per the following configuration")
        self.info("Output %d ---- pad %.3f ---- PD2" % (self.port['HL'], self.pickHiLossPad))
        self.info("Output %d ---- pad %.3f ---- PD1" % (self.port['LL'], self.lowLossPad))
        str = """ 
        Ready [y/n]: """

        while(1):
            res = self.displayMenu(str)
            if(res == 'Y'):
                break


        self.info("Starting Module....")
        self.UUT.start_module()

        result = self.UUT.set_check_all(state="off")
        self.info("set check all off -> %s " % (result))

        time.sleep(5)
        
        self.info("setting the EDFA pump to 0x7000")
        self.UUT.set_edfa_pump(hex_val=0x7000)
        time.sleep(5)
        padretryCnt = 3
        while(padretryCnt > 0):
            cnt = 10
            DeltaLst=[]
            Pd1PwrLst = []
            Pd2PwrLst = []
            while(cnt >0):
                pd1_pwr = self.getRxPwr(pd1)
                pd2_pwr = self.getRxPwr(pd2)
                delta_pd = pd1_pwr - pd2_pwr
                DeltaLst.append(delta_pd)
                Pd1PwrLst.append(pd1_pwr)
                Pd2PwrLst.append(pd2_pwr)
                self.info("PD1:%.2f PD2:%.2f delta:%.2f" % (pd1_pwr,pd2_pwr,delta_pd))
                cnt-=1
       
            avg_delta = avg(DeltaLst)
            avg_pd1Pwr = avg(Pd1PwrLst)
            avg_pd2Pwr = avg(Pd2PwrLst)

            if(avg_delta > delta_pd_min and avg_delta < delta_pd_max):
                self.info("Delta (PD1-PD2):%.2f within limits[%.2f,%.2f]" % (avg_delta,delta_pd_min,delta_pd_max))
                passFlag = True
                break
            else:
                passFlag = False
                self.failed("Delta (PD1-PD2):%.2f exceeded limits[%.2f,%.2f]" % (avg_delta,delta_pd_min,delta_pd_max))
                if(avg_delta > delta_pd_min):
                    self.hiLossPadEstd = (self.pickHiLossPad - (avg_delta - delta_pd_max))
                else:
                    self.hiLossPadEstd = (self.pickHiLossPad - (avg_delta - delta_pd_min))

                s = ("Pick %0.3f +/- 0.25 dB pad and report its actual value :" %
                     (self.hiLossPadEstd))
                self.pickHiLossPad = self.displayMenu(s,'float')
                self.info("ReConnect as per the following configuration")
                self.info("Output %d ---- pad %.3f ---- PD2" % (self.port['HL'], self.pickHiLossPad))
                self.info("Output %d ---- pad %.3f ---- PD1" % (self.port['LL'], self.lowLossPad))
                str = """ 
                Ready [y/n]: """
                while(1):
                    res = self.displayMenu(str)
                    if(res == 'Y'):
                        break
                padretryCnt -= 1
                print "**** %d retries remaining" % (padretryCnt)

                
        self.info("resetting the edfa pump to zero")
        self.UUT.set_edfa_pump(hex_val=0x0)

        if(passFlag):
            self.dbRes['HighLossPort']   = int(self.port['HL'])
            self.dbRes['LowLossPort']    = int(self.port['LL'])        
            self.dbRes['WantHighLossPad']   = round(self.hiLossPadEstd, 3)
            self.dbRes['WantLowLossPad']    = round(self.lowLossPad, 3)
            self.dbRes['PickHighLossPad']   = round(self.pickHiLossPad, 3)  
            #No measurement done without pads in out1 and out2
            self.dbRes['Out1PwrReading'] = 0.0
            self.dbRes['Out2PwrReading'] = 0.0
            if(self.port['HL'] == 1):
                self.dbRes['Out1FinalReading'] = avg_pd2Pwr
                self.dbRes['Out2FinalReading'] = avg_pd1Pwr
            else:
                self.dbRes['Out1FinalReading'] = avg_pd1Pwr
                self.dbRes['Out2FinalReading'] = avg_pd2Pwr
            print "debug:dbRes", self.dbRes
            self.info("\n\n\n!!! Please note this on the traveler !!!")
            self.info("Output %d ---- pad %.3f ---- PD2" % (self.port['HL'],self.pickHiLossPad,))
            self.info("Output %d ---- pad %.3f ---- PD1" % (self.port['LL'],self.lowLossPad))
            print "\n\n\n"
            return self.passed("PD1/PD2 padding")
        else:
            return self.failed("Pd Padding failed")
示例#2
0
    def rxInAccCheck(self,specificRxPin, reset860):

        myName = specificRxPin.myName
        mySwitchNum = specificRxPin.mySwitchNum
        specificRxPin.rxInAccCheck_pass = True
        errCnt = 0
        accResult = []

        self.info("")
        self.info("Perform Rx Accurracy check on %s" % (myName))

        self.backToDefaultStates()
        
        if (reset860):
            self.info("")
            sleepTime = 180
            self.info("Resetting dsp to reload cal tbls .... sleep %s secs\n" % (sleepTime))
            #res = self.UUT.reset_dsp()
            try:
                res = self.UUT.sendMyCmd("reset me")
            except:
                pass
            
            time.sleep(sleepTime)


        self.switchConnect(switchNum=mySwitchNum)

        self.rxVoa.state = "ON"
        self.dfbLaser.on()
        time.sleep(2)

        for wantInPwr in CalConfig.rxInAccCheckPts:
            
            self.setInputPwr(wantInPwr, myName=myName)
            time.sleep(2)

            self.estRxPwr = self.estimateInputPwr(myName)
            
            cnt = 4
            tmpRxPwrLst = []
            for i in range(cnt):
                uutRxPwr  = self.getRxPwr(specificRxPin.myAdcNum)
                #print "debug uutRxPwr: ", uutRxPwr
                tmpRxPwrLst.append(uutRxPwr)

            self.uutRxPwr = avg(tmpRxPwrLst)
            
            self.delta = self.estRxPwr - self.uutRxPwr

            self.info("est InPwr: %.3f    uut report: %.3f    delta:%.3f" %
                      (self.estRxPwr,self.uutRxPwr,self.delta))

            if (abs(self.delta) > CalConfig.rxPinInAccTolerance):
                #self.failed("Rx Accuracy check exceeded tolerance of %.2f" % (CalConfig.rxPinInAccTolerance))
                self.info("Retrying...")
                status = self.retryPinAccCheck(specificRxPin,wantInPwr)
                if (status == False):
                    errCnt += 1
                    self.failed("Rx Accuracy check exceeded tolerance of %.2f" % (CalConfig.rxPinInAccTolerance))
                else:
                    pass
            else:
                pass
            accResult.append((self.estRxPwr,self.uutRxPwr))
        #end of for loop

        self.rxPinAccRes[specificRxPin.myName] = accResult 
        #print "Debug in rxInAccCheck"
        #print self.rxPinAccRes
        if(errCnt > 0):
            specificRxPin.rxInAccCheck_pass = False
        else:
            specificRxPin.rxInAccCheck_pass = True 

        self.backToDefaultStates()
示例#3
0
    def edfaOutPwrAccuracy(self,reset860=False):

        self.info("")
        self.info("EDFA Output Pwr Accuracy check...")

        if (reset860):
            self.info("")
            sleepTime = 180
            self.info("Resetting dsp to reload cal tbls .... sleep %s secs\n" % (sleepTime))
            #res = self.UUT.reset_dsp()
            try:
                res = self.UUT.sendMyCmd("reset me")
            except:
                pass
            
            time.sleep(sleepTime)


        myName = "edfaIn"
        
        self.edfaOutPwrAccuracy_pass = True

        self.backToDefaultStates()

        self.switchConnect(switchName=myName)  # allow light to go into EDFA

        self.dfbLaser.on()

        time.sleep(2)

        wavelen = CalConfig.dfbLaser_wavelength

        self.edfaOutPwrM.wavelength   = wavelen
        
        self.rxVoa.state = "ON"

        time.sleep(3)
        
        # read back voa attn
        attn = self.rxVoa.attenuation.value
        self.info("Current rx voa attn is %.2f" % (attn))

        edfaInAvg    = []
        edfaOutAvg   = []
        edfaPCrntAvg = []
        outPwrValues = []
        outPwr_mWatt = []
        
        #fix light going to edfa
        wantInPwr = -5.0
        self.setInputPwr(wantInPwr, myName=myName)
        
        attn = self.rxVoa.attenuation.value
        time.sleep(2)
        currentInPwr = self.estimateInputPwr(myName)
        edfaInPwr     = self.UUT.show_edfa_input('dBm')[0].value
        self.info("Est rxPwr:%.2f  edfaReporInPwr: %.2f" % (currentInPwr, edfaInPwr))

        if (edfaInPwr < wantInPwr * 1.3):
            self.failed("Edfa input %.2f is lower than expected %.2f" % (edfaInPwr, currentInPwr))
            return False


        result = self.UUT.set_check_all(state="off")
        self.info("set check all off -> %s " % (result))
        
        self.info("set edfa loop off")
        result = self.UUT.set_edfa_loop('off')
        print "Edfa loop off:", result


        if(self.rev_260 < 10):
            CalConfig.edfaOutPwrDict = {6.0:0x5600, 8.0:0x6500, 9.0:0x7100, 10.0:0x7e00, 12.0:0xa100, 13.0:0xb600}
            self.info("Using OLD PumpPwrDict...")

        # want 6.0, 8.0, 10.0 at edfa Output
        for wantEdfaOutPwr in CalConfig.edfaOutPwrAccLst:
            
            #self.info("wantEdfaOutPwr: %.3f   est inPwr: %.3f  attn:%.3f" %
            #         (wantEdfaOutPwr, currentInPwr, attn ))


            if (not self.adjustEdfaOutPower(wantEdfaOutPwr,CalConfig.edfaOutPwrDict[wantEdfaOutPwr],self.edfaOutPwrM )):
                self.failed("unable to achieve edfaOutPwr %.2f" % (wantEdfaOutPwr))
                self.edfaOutPwrAccuracy_pass = False
                return

            edfaOutAdcLst   = []
            edfaOutPwrLst   = []
            edfaPCrntLst = []
                
            # avg over 4 readings
            for i in range(4):
               edfaOutAdc    = self.UUT.show_edfa_output('hex')[0].value
               edfaOutPwr    = self.UUT.show_edfa_output('dBm')[0].value
               edfaPCrntAdc  = self.UUT.show_edfa_current('hex')[0].value
               print "debug edfaOutAdc: ", edfaOutAdc, "edfaOutPwr: ", edfaOutPwr

               edfaOutAdcLst.append(edfaOutAdc)
               edfaOutPwrLst.append(edfaOutPwr)               
               edfaPCrntLst.append(edfaPCrntAdc)
               
            edfaInAdc     = self.UUT.show_edfa_input('hex')[0].value
            edfaInPwr     = self.UUT.show_edfa_input('dBm')[0].value

            outAdcAvg = int(avg(edfaOutAdcLst))

            outPwrAvg = round(avg(edfaOutPwrLst), 3)

            pCrntAvg = int(avg(edfaPCrntLst))
            pumpI = self.getEdfaPumpCurrent(pCrntAvg)

            # this is from a directly connected power meter
            adjEdfaOutPwr = self.getOpticalPower(self.edfaOutPwrM)
            print "debug edfa meter power reading -> ", adjEdfaOutPwr
            adjEdfaOutPwr = self.getTrueEdfaOutPwr(adjEdfaOutPwr)
            
            delta = outPwrAvg - adjEdfaOutPwr

            self.info("wavelen:%.3f(nm)   edfaInPwr:%.3f   edfaOutPwr:%.3f  edfaOutAdc:0x%x (%d)   estEdfaOutPwr:%.3f  delta:%.3f  edfaPumpI:%.2f" %
                      (wavelen.value, edfaInPwr, outPwrAvg, outAdcAvg, outAdcAvg, adjEdfaOutPwr, delta, pumpI)) 
            
            if (abs(delta) > CalConfig.edfaOutAccTolerance):
               self.failed("Edfa output accuracy check exceeded limit %.2f" % (CalConfig.edfaOutAccTolerance))
               self.edfaOutPwrAccuracy_pass = False
        
        res = self.UUT.set_edfa_pump(hex_val=0x0)
示例#4
0
    def edfaInputPwrAccuracy (self, reset860=False):

        self.info("")
        self.info("Checking EDFA Input Accuracy...")
        self.csvFd.write("\n\n")
        self.csvFd.write("Checking EDFA Input Accuracy...\n")

        if (reset860):
            self.info("")
            sleepTime = 180
            self.info("Resetting dsp to reload cal tbls .... sleep %s secs\n" % (sleepTime))
            #res = self.UUT.reset_dsp()

            try:
                res = self.UUT.sendMyCmd("reset me")
            except:
                pass
            
            time.sleep(sleepTime)


        myName = "edfaIn"
        self.edfaInput_Accuracy_pass = True
        
        self.backToDefaultStates()

        self.switchConnect(switchName=myName)  # allow light to go into EDFA
        self.dfbLaser.on()
        time.sleep(2)
        self.rxVoa.state = "ON"

        rxWavelenLst = [CalConfig.dfbLaser_wavelength]
       
        for wavelen in rxWavelenLst:
            self.rxVoa.wavelength  = wavelen
            time.sleep(2)

            self.csvFd.write("Wavelength, WantInPwr, UUT Report, Delta\n")

            for wantInPwr in CalConfig.edfaPwrAccCheckPts:
                
                if (wantInPwr > CalConfig.edfaInMax):
                    self.info("!! Should not happen !!")
                    self.info("want %.2f exceeded EDFA Pmax of %.2f" % (wantInPwr,CalConfig.edfaInMax))
                    self.info("!! Should not happen !!")
                    raise globalExceptionRxPwrAcc 
                
                if (wantInPwr > CalConfig.edfaSrcPmax):
                    self.info("!! Should not happen !!")
                    self.info("setup is unable to provide %.2f for this data pt" % (wantInPwr))
                    self.info("!! Should not happen !!")
                    raise globalExceptionRxPwrAcc 
                
                self.setInputPwr(wantInPwr, myName=myName)
                attn = self.rxVoa.attenuation.value
                time.sleep(2)
                
                currentInPwr = self.estimateInputPwr(myName)

                #self.info("est inPwr:%.3f    wantInPwr:%.3f    voa attn:%.2f" % (currentInPwr ,wantInPwr, attn))
                rxPwrAvg = []
                rxPwrHexAvg = []
                for i in range(4):
                    rxPwr = self.UUT.show_edfa_input('dBm')[0].value
                    rxPwrHex = self.UUT.show_edfa_input('hex')[0].value
                    rxPwrAvg.append(rxPwr)
                    rxPwrHexAvg.append(rxPwrHex)

                rxPwr = avg(rxPwrAvg)
                rxPwrHex = avg(rxPwrHexAvg)
                
                delta = abs(rxPwr - currentInPwr)
                if (wantInPwr == -25.0 or wantInPwr == -30.0):
                    edfaAccCheckTol = CalConfig.edfaInputAccTolAtLowPwr
                else:
                    edfaAccCheckTol = CalConfig.edfaInputAccTolerance
                    
                #if (delta > CalConfig.edfaInputAccTolerance):
                if (delta > edfaAccCheckTol):
                    self.failed("edfa input accuracy exceeded tolerance")
                    self.edfaInput_Accuracy_pass = False

                #self.rxPwrAccRes.append((float(wavelen),currentInPwr , rxPwr))
                self.edfaInPwrAccRes.append((float(wavelen),currentInPwr , rxPwr))
  
                self.info("wavelength: %.3f(nm)   rxInPwr: %.3f   uut report: %.3f (0x%x)  delta: %.3f" %
                          (wavelen, currentInPwr, rxPwr , rxPwrHex, delta))

                self.csvFd.write("%.3f, %.2f, %.2f, %.2f\n" % (wavelen, wantInPwr ,rxPwr ,delta))
        self.backToDefaultStates()