def fieldomni(self, freq, fieldintensity, degreestep=5, poweram1=None, transfer=False): sg_output_limit = -5 # unit is dBm set the signal generator output limit omnifield = [] iteration = 5 degree = 0 tkinter.messagebox.showinfo(title="提示", message="将要进行频率%f场强%f的测试\n" % (freq, fieldintensity)) ETSProbe.__init__(self) Zeta.__init__(self) times = 360 / degreestep iteration += times if transfer is False: field = cal_field(freq, fieldintensity) powertarget = field[0] else: if poweram1 is not None: powertarget = poweram1 else: return "wrong input power target" frequency = freq * 1000000000 powersignal = -30 self.SGPowerSet(powersignal) self.SGCWFrec(frequency) self.PMSetFreq(frequency) self.PABand(frequency) self.SGPowerOut("ON") self.PAPowerOut("ON") time.sleep(2) for i in range(5): time.sleep(2) pmpower = self.PMFetch() print("当前第%d循环的功率计读数为%f" % (i + 1, pmpower)) powerdiff = powertarget - pmpower powersignal += powerdiff if self.SGInRange(powersignal) and powersignal < sg_output_limit: self.SGPowerSet(powersignal) else: self.SGPowerOut("OFF") self.PAPowerOut("OFF") return "Error input signal generator power" for i in range(times): time.sleep(2) pmpower = self.PMFetch() print("当前第%d循环的功率计读数为%f" % (i + 1, pmpower)) powerdiff = powertarget - pmpower powersignal += powerdiff self.SGPowerSet(powersignal) if self.ProbeStatus() == 0 and degree == 0: omnifield.append([]) omnifield[i].append(degree) omnifield[i].append(self.ProbeField()[3]) degree += 5 else: omnifield.append([]) omnifield[i].append(degree) self.ZetaRoll(degreestep) omnifield[i].append(self.ProbeField()[3]) i += 1 degree += 5 return omnifield
def TransferIteration(self, freq, fieldtarget, sensortype="ETS"): global powerpm_am, powercouple frequency = freq * 1000000000 sg_output_limit = -5 kdmoniter = [] flag = 0 if fieldtarget == 0: self.BasicCursor.execute( "UPDATE FieldTransfer SET PowerCal=%f WHERE Frequency=%f " "AND Cal=%f" % (0, freq, fieldtarget) ) self.BasicCursor.execute( "UPDATE FieldTransfer SET FieldVerify=%f WHERE Frequency=%f " "AND Cal=%f" % (0, freq, fieldtarget) ) self.BasicCursor.commit() return "Field target is 0" # iteration first time, power is -10 dBm self.SGPowerSet(-10) self.CTRoll(90) self.SGCWFrec(frequency) self.PMSetFreq(frequency) self.PABand(frequency) self.SGPowerOut("ON") self.PAPowerOut("ON") time.sleep(2) powerpm = self.PMFetch() print(powerpm) if sensortype == "ETS": ETSProbe.__init__(self) fieldinit = self.ProbeField()[3] # Turn off the instrument self.RemoveProbe() self.SGPowerOut("OFF") self.PAPowerOut("OFF") # calculate the kd first time kd = powerpm - 20 * log10(fieldinit) print(kd, powerpm, fieldinit) kdmoniter.append(kd) # enter the iteration for i in range(3): time.sleep(5) powerpm_am = kd + 20 * log10(fieldtarget) print("当前功率计读数目标值为%f" % powerpm_am) sg_initial = -30 if sensortype == "ETS": ETSProbe.__init__(self) self.SGPowerSet(sg_initial) # set the initial power unit dBm self.SGPowerOut("ON") self.PAPowerOut("ON") for j in range(0, 10): # iterate the power output time.sleep(2) # delay 2 second if j == 0: powercouple = self.PMFetch() print("当前第%d循环的功率计读数为%f" % (j + 1, powercouple)) powerdiff = powerpm_am - powercouple powersg = sg_initial + powerdiff if self.SGInRange(powersg) and powersg < sg_output_limit: self.SGPowerSet(powersg) else: if sensortype == "ETS": self.RemoveProbe() self.SGPowerOut("OFF") self.PAPowerOut("OFF") flag = 1 break elif j <= 9: powercouple = self.PMFetch() print("当前第%d循环的功率计读数为%f" % (j + 1, powercouple)) powerdiff = powerpm_am - powercouple powersg += powerdiff if self.SGInRange(powersg) and powersg < sg_output_limit: self.SGPowerSet(powersg) elif 3 > powerdiff > 1: break else: if sensortype == "ETS": self.RemoveProbe() self.SGPowerOut("OFF") self.PAPowerOut("OFF") flag = 1 break if flag == 1: if sensortype == "ETS": self.RemoveProbe() self.SGPowerOut("OFF") self.PAPowerOut("OFF") print("当前的flag值为%d" % flag) fieldinit = self.ProbeField()[3] print("当前电场探头数值为%f" % fieldinit) if fieldinit != 0: kd = powercouple - 20 * log10(fieldinit) kdmoniter.append(kd) if sensortype == "ETS": self.RemoveProbe() self.SGPowerOut("OFF") self.PAPowerOut("OFF") if flag == 1: self.BasicCursor.execute( "UPDATE FieldTransfer SET PowerCal=%f WHERE Frequency=%f " "AND Cal=%f" % (0, freq, fieldtarget) ) self.BasicCursor.execute( "UPDATE FieldTransfer SET FieldVerify=%f WHERE Frequency=%f " "AND Cal=%f" % (0, freq, fieldtarget) ) self.BasicCursor.commit() return "Error input signal generator power" elif flag == 0: if fieldinit == 0: self.BasicCursor.execute( "UPDATE FieldTransfer SET PowerCal=%f WHERE Frequency=%f " "AND Cal=%f" % (0, freq, fieldtarget) ) self.BasicCursor.execute( "UPDATE FieldTransfer SET FieldVerify=%f WHERE Frequency=%f " "AND Cal=%f" % (0, freq, fieldtarget) ) self.BasicCursor.commit() return "Wrong Probe reading" else: self.BasicCursor.execute( "UPDATE FieldTransfer SET PowerCal=%f WHERE Frequency=%f " "AND Cal=%f" % (powerpm_am, freq, fieldtarget) ) self.BasicCursor.execute( "UPDATE FieldTransfer SET FieldVerify=%f WHERE Frequency=%f " "AND Cal=%f" % (fieldinit, freq, fieldtarget) ) self.BasicCursor.commit() return kdmoniter else: return "WTF"
def FieldProb(self, freq, fieldintensity, fieldread=None, cal=None, powerspec=-100): """Produce the fieldintensity of specified frequency :param powerspec: :param cal: :param fieldread: :param fieldintensity: :param freq: """ global powersg sg_output_limit = -5 # unit is dBm set the signal generator output limit app = QApplication(sys.argv) fieldreading = [] if fieldread == "ETS": ms = QMessageBox(QMessageBox.Warning, "提示", "请连接好ETS探头") ms.show() app.exec_() ETSProbe.__init__(self) elif fieldread == "Narda" or None == fieldread: ms = QMessageBox(QMessageBox.Warning, "提示", "请连接好Narda探头") ms.show() app.exec_() else: ms = QMessageBox(QMessageBox.Warning, "Alert", "Wrong fieldread 参数") ms.show() app.exec_() return "Wrong fieldread 参数" field = cal_field(freq, fieldintensity) print(field) # p_meter_disp_dbm, coupler, antenna, e_cal_1w if cal is not None: print(powerspec) powertarget = powerspec else: powertarget = field[0] antenna = field[2] ms = QMessageBox(QMessageBox.Warning, "提示", "请连接%s天线进行测试" % antenna) ms.show() app.exec_() # self.CTAntennaChange(antenna) ms = QMessageBox(QMessageBox.Warning, "提示", "请确定天线更换完毕并且射频线连接正确") ms.show() app.exec_() self.CTAntennaRoll(antenna) sg_initial = -30 self.SGPowerSet(sg_initial) # set the initial power unit dBm # frequency set frequency = freq * 1000000000 self.SGCWFrec(frequency) self.PMSetFreq(frequency) self.PABand(frequency) self.SGPowerOut("On") self.PAPowerOut("ON") for i in range(0, 6): # iterate the power output time.sleep(2) # delay 1 second if i == 0: powercoup = self.PMFetch() print("当前第%d循环的功率计读数为%f" % (i + 1, powercoup)) powerdiff = powertarget - powercoup powersg = sg_initial + powerdiff if self.SGInRange(powersg) and powersg < sg_output_limit: self.SGPowerSet(powersg) else: ms = QMessageBox(QMessageBox.Warning, "Alert", "Error input signal generator power") ms.show() app.exec_() if fieldread == "ETS": self.RemoveProbe() return "Error input signal generator power" elif i <= 9: powercoup = self.PMFetch() print("当前第%d循环的功率计读数为%f" % (i + 1, powercoup)) powerdiff = powertarget - powercoup powersg += powerdiff if self.SGInRange(powersg) and powersg < sg_output_limit: self.SGPowerSet(powersg) elif 3 > powerdiff > 1: ms = QMessageBox(QMessageBox.Warning, "提示", "功放到达1dB压缩点") ms.show() app.exec_() break else: ms = QMessageBox(QMessageBox.Warning, "Alert", "Error input signal generator power") ms.show() app.exec_() if fieldread == "ETS": self.RemoveProbe() return "Error input signal generator power" if fieldread is None or fieldread == "Narda": fieldreading = float(input("请输入电厂探头示值:")) elif fieldread == "ETS": fieldreading.append(freq) fieldreading.append(self.ProbeField()[3]) fieldreading.append(powertarget) fieldreading.append(field[4]) ms = QMessageBox(QMessageBox.Warning, "提示", "请确定测试完毕") ms.show() app.exec_() self.RemoveProbe() else: self.PAPowerOut("OFF") self.SGPowerOut("OFF") self.PAPowerOut("OFF") self.SGPowerOut("OFF") try: self.Cursor.execute( "INSERT INTO FieldTest (Frequency, Field, FieldResult, TestSeries) " "VALUES (%f, %f, %f, %f)" % (freq, fieldintensity, fieldreading, self.TestSeriesNo) ) self.Cursor.commit() except: print("结果写入数据库失败") # set return value if fieldreading: return fieldreading else: return "wrong output"