diff --git a/LCU/checkhardware/lib/data_lib.py b/LCU/checkhardware/lib/data_lib.py index e70e3f7ee07f8ce9945bd1b20836fe550e26341a..9a802045a634b0576165b8d6e62e31bc3cc744e1 100644 --- a/LCU/checkhardware/lib/data_lib.py +++ b/LCU/checkhardware/lib/data_lib.py @@ -173,11 +173,15 @@ class cRCUdata: def getSubbands(self, rcu): return (self.getMaskedData()[int(rcu),:,:].mean(axis=0)) - def getSubbandX(self): - return (self.getMaskedData()[0::2,:,self.testSubband_Y].mean(axis=1)) + def getSubbandX(self, subband=None): + if subband is None: + return (self.getMaskedData()[0::2,:,self.testSubband_Y].mean(axis=1)) + return (self.getMaskedData()[0::2,:,subband].mean(axis=1)) - def getSubbandY(self): - return (self.getMaskedData()[1::2,:,self.testSubband_Y].mean(axis=1)) + def getSubbandY(self, subband=None): + if subband is None: + return (self.getMaskedData()[1::2,:,self.testSubband_Y].mean(axis=1)) + return (self.getMaskedData()[1::2,:,subband].mean(axis=1)) def getAll(self, pol='XY'): if pol in ('XY', 'xy'): diff --git a/LCU/checkhardware/lib/lofar_lib.py b/LCU/checkhardware/lib/lofar_lib.py index 23c2061d11e2e2c565c1c9096333a90dd3f98e67..28f503c8cc933bb091b9ca6e5ee2ae137dc2e60e 100644 --- a/LCU/checkhardware/lib/lofar_lib.py +++ b/LCU/checkhardware/lib/lofar_lib.py @@ -26,7 +26,7 @@ StationType = dict( CS=1, RS=2, IS=3 ) logger = None rcumode = -1 -active_delay_str = ('2,'*16)[:-1] +active_delay_str = ('555,'*16)[:-1] def init_lofar_lib(): diff --git a/LCU/checkhardware/lib/test_db.py b/LCU/checkhardware/lib/test_db.py index 50b50b87a182baaec1c461d00d87e63abb59cb10..ec2ee679766728e2701ba7fd0e72e44253261b56 100644 --- a/LCU/checkhardware/lib/test_db.py +++ b/LCU/checkhardware/lib/test_db.py @@ -210,7 +210,7 @@ class cDB: log.addLine("%s,SPU,%03d,VOLTAGE%s" %(date, spu.nr, valstr)) if not spu.temp_ok: - log.addLine("%s,SPU,%03d,TEMPERATURE,PCB=%3.1f" %\ + log.addLine("%s,SPU,%03d,TEMPERATURE,PCB=%2.0f" %\ (date, spu.nr, spu.temp)) for rsp in self.rsp: @@ -219,10 +219,10 @@ class cDB: log.addLine("%s,RSP,%03d,VERSION,BP=%s,AP=%s" %\ (date, rsp.nr, rsp.bp_version, rsp.ap_version)) if not rsp.voltage_ok: - log.addLine("%s,RSP,%03d,VOLTAGE,1.2V=%3.1f,2.5V=%3.1f,3.3V=%3.1f" %\ + log.addLine("%s,RSP,%03d,VOLTAGE,1.2V=%3.2f,2.5V=%3.2f,3.3V=%3.2f" %\ (date,rsp.nr, rsp.voltage1_2, rsp.voltage2_5, rsp.voltage3_3)) if not rsp.temp_ok: - log.addLine("%s,RSP,%03d,TEMPERATURE,PCB=%3.1f,BP=%3.1f,AP0=%3.1f,AP1=%3.1f,AP2=%3.1f,AP3=%3.1f" %\ + log.addLine("%s,RSP,%03d,TEMPERATURE,PCB=%2.0f,BP=%2.0f,AP0=%2.0f,AP1=%2.0f,AP2=%2.0f,AP3=%2.0f" %\ (date,rsp.nr, rsp.pcb_temp, rsp.bp_temp, rsp.ap0_temp, rsp.ap1_temp, rsp.ap2_temp, rsp.ap3_temp)) if self.tbbdriver_version != "ok" or self.tbbctl_version != "ok": diff --git a/LCU/checkhardware/lib/test_lib.py b/LCU/checkhardware/lib/test_lib.py index ded5dc03e044bf1bc8cf6ae70d4917f9c1cedd86..6bb2266b8f33d9cfe1aa1dfa5fc259dea701a822 100644 --- a/LCU/checkhardware/lib/test_lib.py +++ b/LCU/checkhardware/lib/test_lib.py @@ -25,6 +25,33 @@ def init_test_lib(): class cSPU: def __init__(self, db): self.db = db + self.board_info_str = [] + self.board_info_val = [-1, 0.0, 0.0, 0.0, 0.0, 0] + + def extract_board_info(self, line): + li = line.split("|") + if not li[0].strip().isdigit(): + return False + + self.board_info_str = [i.strip() for i in li] + + if li[0].strip().isdigit(): + self.board_info_val[0] = int(li[0].strip()) + else: + self.board_info_val[0] = -1 + + for i in xrange(1, 5, 1): + if li[i].strip().replace('.','').isdigit(): + self.board_info_val[i] = float(li[i].strip()) + else: + self.board_info_val[i] = 0.0 + + if li[5].strip().isdigit(): + self.board_info_val[5] = int(li[5].strip()) + else: + self.board_info_val[5] = 0 + return True + def checkStatus(self): """ @@ -49,13 +76,13 @@ class cSPU: else: infolines = answer.splitlines() for line in infolines: - li = line.split("|") - if li[0].strip().isdigit(): - sr = int(li[0].strip()) - noload.append([sr, float(li[1]), float(li[2]), float(li[3]), float(li[4])]) - self.db.spu[sr].temp = float(li[5]) - logger.debug("Subrack %d voltages: rcu=%3.1f lba=%3.1f hba=%3.1f spu=%3.1f temp: %3.1f" %\ - (sr, float(li[1]), float(li[2]), float(li[3]), float(li[4]), self.db.spu[sr].temp)) + if self.extract_board_info(line): + bi = self.board_info_val + noload.append([bi[0], bi[1], bi[2], bi[3], bi[4]]) + self.db.spu[bi[0]].temp = bi[5] + bi = self.board_info_str + logger.debug("Subrack %s voltages: rcu=%s lba=%s hba=%s spu=%s temp: %s" % ( + bi[0], bi[1], bi[2], bi[3], bi[4], bi[5])) # turn on all hbas logger.debug("check spu full load mode 3") @@ -63,12 +90,12 @@ class cSPU: answer = rspctl('--spustatus') infolines = answer.splitlines() for line in infolines: - li = line.split("|") - if li[0].strip().isdigit(): - sr = int(li[0].strip()) - fullload_3.append([sr, float(li[1]), float(li[2]), float(li[3]), float(li[4])]) - logger.debug("Subrack %d voltages: rcu=%3.1f lba=%3.1f hba=%3.1f spu=%3.1f temp: %3.1f" %\ - (sr, float(li[1]), float(li[2]), float(li[3]), float(li[4]), self.db.spu[sr].temp)) + if self.extract_board_info(line): + bi = self.board_info_val + fullload_3.append([bi[0], bi[1], bi[2], bi[3], bi[4]]) + bi = self.board_info_str + logger.debug("Subrack %s voltages: rcu=%s lba=%s hba=%s spu=%s temp: %s" % ( + bi[0], bi[1], bi[2], bi[3], bi[4], bi[5])) # turn on all hbas logger.debug("check spu full load mode 5") @@ -76,31 +103,44 @@ class cSPU: answer = rspctl('--spustatus') infolines = answer.splitlines() for line in infolines: - li = line.split("|") - if li[0].strip().isdigit(): - sr = int(li[0].strip()) - fullload_5.append([sr, float(li[1]), float(li[2]), float(li[3]), float(li[4])]) - logger.debug("Subrack %d voltages: rcu=%3.1f lba=%3.1f hba=%3.1f spu=%3.1f temp: %3.1f" %\ - (sr, float(li[1]), float(li[2]), float(li[3]), float(li[4]), self.db.spu[sr].temp)) + if self.extract_board_info(line): + bi = self.board_info_val + fullload_5.append([bi[0], bi[1], bi[2], bi[3], bi[4]]) + bi = self.board_info_str + logger.debug("Subrack %s voltages: rcu=%s lba=%s hba=%s spu=%s temp: %s" % ( + bi[0], bi[1], bi[2], bi[3], bi[4], bi[5])) for sr in range(self.db.nr_spu): # calculate mean of noload, fullload_3, fullload_5 self.db.spu[sr].rcu_5_0V = (noload[sr][1] + fullload_3[sr][1] + fullload_5[sr][1]) / 3.0 - self.db.spu[sr].lba_8_0V = (noload[sr][2] + fullload_3[sr][2] + fullload_5[sr][2]) / 3.0 - self.db.spu[sr].hba_48V = (noload[sr][3] + fullload_3[sr][3] + fullload_5[sr][3]) / 3.0 + self.db.spu[sr].lba_8_0V = fullload_3[sr][2] + self.db.spu[sr].hba_48V = fullload_5[sr][3] self.db.spu[sr].spu_3_3V = (noload[sr][4] + fullload_3[sr][4] + fullload_5[sr][4]) / 3.0 - if (abs(4.7 - self.db.spu[sr].rcu_5_0V) > 0.2) or ((noload[sr][1] - fullload_3[sr][1]) > 0.3): - self.db.spu[sr].rcu_ok = 0 + if (self.db.spu[sr].temp > 35.0): + self.db.spu[sr].temp_ok = 0 + + if(abs(4.75 - noload[sr][1]) > 0.2 + or abs(4.75 - fullload_3[sr][1]) > 0.2 + or abs(4.75 - fullload_5[sr][1]) > 0.2 + or (noload[sr][1] - fullload_3[sr][1]) > 0.3): + self.db.spu[sr].rcu_ok = 0 - if (abs(7.6 - self.db.spu[sr].lba_8_0V) > 0.2) or ((noload[sr][2] - fullload_3[sr][2]) > 0.3): - self.db.spu[sr].lba_ok = 0 - # if voltage drop is too high - if (abs(45.75 - self.db.spu[sr].hba_48V) > 0.75) or ((noload[sr][3] - fullload_5[sr][3]) > 1.0): + if(abs(7.6 - noload[sr][1]) > 0.2 + or abs(7.6 - fullload_3[sr][1]) > 0.2 + or (noload[sr][1] - fullload_3[sr][1]) > 0.3): + self.db.spu[sr].lba_ok = 0 + + if(abs(45.0 - noload[sr][1]) > 2.0 + or abs(45.0 - fullload_5[sr][1]) > 2.0 + or (noload[sr][1] - fullload_5[sr][1]) > 2.0): self.db.spu[sr].hba_ok = 0 - if (abs(3.3 - self.db.spu[sr].spu_3_3V) > 0.2) or ((noload[sr][3] - fullload_3[sr][3]) > 0.3): - self.db.spu[sr].spu_ok = 0 + if(abs(3.3 - noload[sr][1]) > 0.2 + or abs(3.3 - fullload_3[sr][1]) > 0.2 + or abs(3.3 - fullload_5[sr][1]) > 0.2 + or (noload[sr][1] - fullload_5[sr][1]) > 0.3): + self.db.spu[sr].spu_ok = 0 logger.info("=== Done SPU check ===") self.db.addTestDone('SPU') @@ -247,19 +287,19 @@ class cRSP: p2 = answer.find("\n", p1) d = [float(i.split(":")[1].strip()) for i in answer[p1+7:p2].split(',')] if len(d) == 3: - logger.debug("RSP board %d: [1.2V]=%3.1fV, [2.5V]=%3.1fV, [3.3V]=%3.1fV" %(rsp.nr, d[0], d[1], d[2])) + logger.debug("RSP board %d: [1.2V]=%3.2fV, [2.5V]=%3.2fV, [3.3V]=%3.2fV" %(rsp.nr, d[0], d[1], d[2])) rsp.voltage1_2 = d[0] if d[0] < 1.1 or d[0] > 1.3: rsp.voltage_ok = 0 - logger.info("RSP board %d [1.2V]=%3.1fV" %(rsp.nr, d[0])) + logger.info("RSP board %d [1.2V]=%3.2fV" %(rsp.nr, d[0])) rsp.voltage2_5 = d[1] if d[1] < 2.4 or d[1] > 2.6: rsp.voltage_ok = 0 - logger.info("RSP board %d [2.5V]=%3.1fV" %(rsp.nr, d[1])) + logger.info("RSP board %d [2.5V]=%3.2fV" %(rsp.nr, d[1])) rsp.voltage3_3 = d[2] - if d[2] < 3.2 or d[2] > 3.4: + if d[2] < 3.1 or d[2] > 3.4: rsp.voltage_ok = 0 - logger.info("RSP board %d [3.3V]=%3.1fV" %(rsp.nr, d[2])) + logger.info("RSP board %d [3.3V]=%3.2fV" %(rsp.nr, d[2])) for rsp in self.db.rsp: p1 = answer.find("RSP[%2d]" %(rsp.nr), p2) @@ -272,29 +312,29 @@ class cRSP: rsp.pcb_temp = d[0] if d[0] > 45.0: rsp.temp_ok = 0 - logger.info("RSP board %d [pcb_temp]=%3.1f" %(rsp.nr, d[0])) + logger.info("RSP board %d [pcb_temp]=%2.0f" %(rsp.nr, d[0])) rsp.bp_temp = d[1] if d[1] > 75.0: rsp.temp_ok = 0 - logger.info("RSP board %d [bp_temp]=%3.1f" %(rsp.nr, d[1])) + logger.info("RSP board %d [bp_temp]=%2.0f" %(rsp.nr, d[1])) rsp.ap0_temp = d[2] if d[2] > 75.0: rsp.temp_ok = 0 - logger.info("RSP board %d [ap0_temp]=%3.1f" %(rsp.nr, d[2])) + logger.info("RSP board %d [ap0_temp]=%2.0f" %(rsp.nr, d[2])) rsp.ap1_temp = d[3] if d[3] > 75.0: rsp.temp_ok = 0 - logger.info("RSP board %d [ap1_temp]=%3.1f" %(rsp.nr, d[3])) + logger.info("RSP board %d [ap1_temp]=%2.0f" %(rsp.nr, d[3])) rsp.ap2_temp = d[4] if d[4] > 75.0: rsp.temp_ok = 0 - logger.info("RSP board %d [ap2_temp]=%3.1f" %(rsp.nr, d[4])) + logger.info("RSP board %d [ap2_temp]=%2.0f" %(rsp.nr, d[4])) rsp.ap3_temp = d[5] if d[5] > 75.0: rsp.temp_ok = 0 - logger.info("RSP board %d [ap3_temp]=%3.1f" %(rsp.nr, d[5])) + logger.info("RSP board %d [ap3_temp]=%2.0f" %(rsp.nr, d[5])) logger.info("=== Done RSP Board check ===") - self.db.addTestDone('RBV') + self.db.addTestDone('RBC') return (ok) #### end of cRSP class #### @@ -896,7 +936,7 @@ class cHBA: if n_tile_err < (self.db.nr_hba / 2): for tile_nr in range(self.db.nr_hba): for elem_nr in range(n_elements): - if no_modem[tile_nr][elem_nr] > 3: # more than 3 ctrl values went wrong + if no_modem[tile_nr][elem_nr] >= 2: # 2 or more ctrl values went wrong self.db.hba.tile[tile_nr].element[elem_nr].no_modem = 1 n_tile_err = 0 @@ -911,7 +951,7 @@ class cHBA: if n_tile_err < (self.db.nr_hba / 2): for tile_nr in range(self.db.nr_hba): for elem_nr in range(n_elements): - if no_modem[tile_nr][elem_nr] > 3: # more than 3 ctrl values went wrong + if no_modem[tile_nr][elem_nr] >= 2: # 2 or more ctrl values went wrong self.db.hba.tile[tile_nr].element[elem_nr].modem_error = 1 self.hba.modem_check_done = 1 @@ -1173,6 +1213,7 @@ class cHBA: self.set_mode(mode) # check twice + # 2 ... check if all elements are turned off, normal value between 60.0 and 62.0 # 128 ... # 253 ... for tile in self.hba.tile: @@ -1180,7 +1221,7 @@ class cHBA: logger.info("skip signal test for tile %d, RCUs turned off" %(tile.nr)) logger.info("start test") - for ctrl in ('128,', '253,'): + for ctrl in ('2,', '128,', '253,'): if self.db.checkEndTime(duration=20.0) == False: logger.warn("check stopped, end time reached") return @@ -1197,16 +1238,29 @@ class cHBA: self.rcudata.searchTestSignal(subband=subband, minsignal=min_signal, maxsignal=150.0) logger.info("HBA, X used test subband=%d avg_signal=%3.1f" %(self.rcudata.testSubband_X, self.rcudata.testSignal_X)) logger.info("HBA, Y used test subband=%d avg_signal=%3.1f" %(self.rcudata.testSubband_Y, self.rcudata.testSignal_Y)) - + + if ctrl == '2,': + ssdataX = self.rcudata.getSubbandX(subband=subband) + ssdataY = self.rcudata.getSubbandY(subband=subband) + else: + ssdataX = self.rcudata.getSubbandX() + ssdataY = self.rcudata.getSubbandY() + + for tile in self.hba.tile: + if tile.x.rcu_off or tile.y.rcu_off: + continue + logger.debug("HBA Tile=%d : X=%3.1fdB Y=%3.1fdB" %\ + (tile.nr, ssdataX[tile.nr], ssdataY[tile.nr])) + if ctrl == '2,': + continue + if (self.rcudata.testSignal_X != -1) and (self.rcudata.testSignal_Y != -1): self.hba.ref_signal_x[ctrl_nr] = self.rcudata.testSignal_X self.hba.ref_signal_y[ctrl_nr] = self.rcudata.testSignal_Y self.hba.test_subband_x[ctrl_nr] = self.rcudata.testSubband_X self.hba.test_subband_y[ctrl_nr] = self.rcudata.testSubband_Y - - ssdataX = self.rcudata.getSubbandX() - ssdataY = self.rcudata.getSubbandY() + avgX = self.rcudata.testSignal_X avgY = self.rcudata.testSignal_Y minX = ssdataX.min() @@ -1223,9 +1277,6 @@ class cHBA: if tile.x.rcu_off or tile.y.rcu_off: continue - logger.debug("HBA Tile=%d : X=%3.1fdB Y=%3.1fdB" %\ - (tile.nr, ssdataX[tile.nr], ssdataY[tile.nr])) - tile.x.test_signal[ctrl_nr] = ssdataX[tile.nr] tile.y.test_signal[ctrl_nr] = ssdataY[tile.nr] diff --git a/LCU/checkhardware/showTestResult.py b/LCU/checkhardware/showTestResult.py index 02430b131a111f08864e8e5b373a8a849e80a11b..5687e12fe428379adde6efe56defa67a0fc1aaed 100755 --- a/LCU/checkhardware/showTestResult.py +++ b/LCU/checkhardware/showTestResult.py @@ -327,10 +327,10 @@ def print_rsp(partnumber, msg, keyvalue): print " Board %2d wrong firmware version: AP=%s BP=%s" % ( partnumber, keyvalue.get('AP'), keyvalue.get('BP')) if msg == 'VOLTAGE': - print " Board %2d wrong voltage: 1.2V=%3.1f 2.5V=%3.1f 3.3V=%3.1f" % ( + print " Board %2d wrong voltage: 1.2V=%s 2.5V=%s 3.3V=%s" % ( partnumber, keyvalue.get('1.2V'), keyvalue.get('2.5V'), keyvalue.get('3.3V')) if msg == 'TEMPERATURE': - print " Board %2d high temperature: PCB=%3.1f BP=%3.1f AP0=%3.1f AP1=%3.1f AP2=%3.1f AP3=%3.1f" % ( + print " Board %2d high temperature: PCB=%s BP=%s AP0=%s AP1=%s AP2=%s AP3=%s" % ( partnumber, keyvalue.get('PCB'), keyvalue.get('BP'), keyvalue.get('AP0'), keyvalue.get('AP1'), keyvalue.get('AP2'), keyvalue.get('AP3')) return