def update(self): try: tvs = self.p.capture2(self.NP, self.TG) self.Data[0] = tvs[3] # A2 if self.Diffmode.isChecked() == False: self.Data[1] = tvs[1] # A1 else: self.Data[1] = tvs[1] - tvs[3] # A1-A2 for ch in range(self.MAXCHAN): self.traceWidget[ch].setData(self.Data[0], self.Data[1]) except: self.comerr() try: fa = em.fit_sine(tvs[0], self.Data[0]) fb = em.fit_sine(tvs[0], self.Data[1]) except Exception as err: fa = None fb = None print("fit_sine error:", err) if fa != None and fb != None: self.Xmax.setText(unicode(self.tr('Xmax = %5.3f V')) % fa[1][0]) self.Ymax.setText(unicode(self.tr('Ymax = %5.3f V')) % fb[1][0]) else: self.Xmax.setText('') self.Ymax.setText('')
def update(self): if self.enable.isChecked() == False: return try: tvs = self.p.capture4(self.NP, self.TG) self.timeData[0] = tvs[0] self.voltData[0] = tvs[1] self.timeData[1] = tvs[6] # MIC channel self.voltData[1] = -tvs[7] for ch in range(self.MAXCHAN): self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch]) self.measured = True except: self.comerr() try: fa = em.fit_sine(self.timeData[0], self.voltData[0]) except Exception as err: print('fit_sine error:', err) fa = None if fa != None: try: fb = em.fit_sine(self.timeData[1], self.voltData[1]) except Exception as err: print('fit_sine error:', err) fb = None pa = fa[1][2] * 180 / em.pi pb = fb[1][2] * 180 / em.pi pdiff = pa - pb if fb[1][0] < 0: pdiff = 180 - pdiff ss = '%5.1f' % pdiff self.Res.setText(self.tr('Phase Shift = ') + ss + self.tr(' Hz'))
def update(self): try: tvs = self.p.capture2(self.NP, self.TG) self.Data[0] = tvs[3] # A2 if self.Diffmode.isChecked() == False: self.Data[1] = tvs[1] # A1 else: self.Data[1] = tvs[1] - tvs[3] # A1-A2 for ch in range(self.MAXCHAN): self.traceWidget[ch].setData(self.Data[0], self.Data[1]) except: self.comerr() self.Xmax.setText('') self.Ymax.setText('') return try: fa = em.fit_sine(tvs[0], self.Data[0]) fb = em.fit_sine(tvs[0], self.Data[1]) except Exception as err: fa=None fb=None print("fit_sine error:", err) if fa != None and fb != None: self.Xmax.setText(unicode(self.tr('Xmax = %5.3f V')) %fa[1][0]) self.Ymax.setText(unicode(self.tr('Ymax = %5.3f V')) %fb[1][0]) else: self.Xmax.setText('') self.Ymax.setText('')
def show_fft(self): for ch in range(4): if self.chanStatus[ch] == 1: try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print('fit_sine error:', err) fa=None if fa != None: fr = fa[1][1]*1000 # frequency in Hz dt = int(1.e6/ (20 * fr)) # dt in usecs, 20 samples per cycle try: t,v = self.p.capture1(self.sources[ch], 3000, dt) except: self.comerr() xa,ya = em.fft(v,dt) xa *= 1000 peak = self.peak_index(xa,ya) ypos = np.max(ya) pop = pg.plot(xa,ya, pen = self.traceCols[ch]) pop.showGrid(x=True, y=True) txt = pg.TextItem(text=unicode(self.tr('Fundamental frequency = %5.1f Hz')) %peak, color = 'w') txt.setPos(peak, ypos) pop.addItem(txt) pop.setWindowTitle(self.tr('Frequency Spectrum')) else: self.msg(self.tr('FFT Error'))
def show_fft(self): for ch in range(4): if self.chanStatus[ch] == 1: try: fa = em.fit_sine(self.timeData[ch], self.voltData[ch]) except Exception as err: print('fit_sine error:', err) fa = None if fa != None: fr = fa[1][1] * 1000 # frequency in Hz dt = int(1.e6 / (20 * fr)) # dt in usecs, 20 samples per cycle try: t, v = self.p.capture1(self.sources[ch], 3000, dt) except: self.comerr() xa, ya = em.fft(v, dt) xa *= 1000 peak = self.peak_index(xa, ya) ypos = np.max(ya) pop = pg.plot(xa, ya, pen=self.traceCols[ch]) pop.showGrid(x=True, y=True) txt = pg.TextItem(text=unicode( self.tr('Fundamental frequency = %5.1f Hz')) % peak, color='w') txt.setPos(peak, ypos) pop.addItem(txt) pop.setWindowTitle(self.tr('Frequency Spectrum')) else: self.msg(self.tr('FFT Error'))
def update(self): if self.running == False: return try: fr = self.p.set_sine(self.FREQ) except: self.comerr() return time.sleep(0.02) self.TG = 1.e6 / self.FREQ / 50 # 50 points per wave self.TG = int(self.TG) // 2 * 2 NP = 500 MAXTIME = 200000. # .2 seconds if NP * self.TG > MAXTIME: NP = int(MAXTIME / self.TG) if NP % 2: NP += 1 # make it an even number ss = '%5.1f' % fr self.FreqLabel.setText(self.tr('Frequency = ') + ss + self.tr(' Hz')) if self.TG < self.MINDEL: self.TG = self.MINDEL elif self.TG > self.MAXDEL: self.TG = self.MAXDEL goodFit = False for k in range(3): # try 3 times try: t, v = self.p.capture1('A2', NP, int(self.TG)) except: self.comerr() return try: fa = em.fit_sine(t, v) if self.verify_fit( v, fa[0]) == False: #compare trace with the fitted curve continue except: self.msg(self.tr('Fit failed')) continue if fa != None: self.data[0].append(fr) self.data[1].append(abs(fa[1][0])) break self.FREQ += self.STEP if self.FREQ > self.FMAX: self.running = False self.history.append(self.data) self.traces.append(self.currentTrace) self.analyze(self.data) return if self.index > 1: # Draw the line self.currentTrace.setData(self.data[0], self.data[1]) self.index += 1
def start(self): if self.running == True: return try: self.FMIN = float(self.AWGstart.text()) self.FMAX = float(self.AWGstop.text()) self.NSTEP = float(self.NSTEPtext.text()) except: self.msg(self.tr('Invalid Frequency limits')) return self.pwin.setXRange(self.FMIN, self.FMAX) self.STEP = (self.FMAX - self.FMIN) / self.NSTEP try: self.p.select_range('A1', 4) self.p.select_range('A2', self.RangeVals12[self.Range]) self.p.set_sine(1000) t, v = self.p.capture1('A1', 1000, 5) except: self.comerr() return try: fa = em.fit_sine(t, v) amplitude = abs(fa[1][0]) self.msg( self.tr('Starting. Input Vp = %4.2f Volts at 1kHz' % amplitude)) except: self.msg(self.tr('fit err.No proper input on A1')) self.running = True self.data = [[], []] self.FREQ = self.FMIN self.currentTrace = self.pwin.plot([0, 0], [0, 0], pen=self.traceCols[self.trial % 5]) self.index = 0 self.trial += 1 self.gainMax = 0.0
def update(self): if self.running == False: return try: fr = self.p.set_sine(self.FREQ) except: self.comerr() return time.sleep(0.02) TG = 1.e6 / self.FREQ / 50 # 50 points per wave TG = int(TG) // 2 * 2 if TG > 500: TG = 500 elif TG < 2: TG = 2 NP = 500 MAXTIME = 200000. # .2 seconds if NP * TG > MAXTIME: NP = int(MAXTIME / TG) if NP % 2: NP += 1 # make it an even number goodFit = False for k in range(3): # try 3 times try: t, v = self.p.capture1('MIC', NP, TG) except: self.comerr() return try: fa = em.fit_sine(t, v) except Exception as err: print('fit_sine error:', err) fa = None if fa != None: if self.verify_fit( v, fa[0]) == False: #compare trace with the fitted curve continue self.updateLabel.setText( unicode(self.tr('Frequency = %5.0f Hz V = %5.3f')) % (fr, abs(fa[1][0]))) self.data[0].append(fr) self.data[1].append(abs(fa[1][0])) goodFit = True break self.FREQ += self.STEP if goodFit == False: return if self.FREQ > self.FMAX: self.running = False elapsed = time.time() - self.startTime self.history.append(self.data) self.traces.append(self.currentTrace) try: self.p.set_sine(0) ss = '%5.1f' % elapsed self.msg(self.tr('Completed in ') + ss + self.tr(' Seconds')) except: self.comerr() return if self.index > 1: # Draw the line self.currentTrace.setData(self.data[0], self.data[1]) self.index += 1
def update(self): if self.running == False: return try: fr=self.p.set_sine(self.FREQ) except: self.comerr() return time.sleep(0.02) self.TG = 1.e6/self.FREQ/50 # 50 points per wave self.TG = int(self.TG)//2 * 2 NP = 500 MAXTIME = 200000. # .2 seconds if NP * self.TG > MAXTIME: NP = int(MAXTIME/self.TG) if NP % 2: NP += 1 # make it an even number ss = '%5.1f'%fr self.FreqLabel.setText(self.tr('Frequency = ') + ss + self.tr(' Hz')) if self.TG < self.MINDEL: self.TG = self.MINDEL elif self.TG > self.MAXDEL: self.TG = self.MAXDEL goodFit = False for k in range(20): # try 3 times try: t,v, tt,vv = p = self.p.capture2(NP, int(self.TG)) #print(p) except: self.comerr() return try: fa = em.fit_sine(t,v) except: self.msg(self.tr('Fit failed')) fa = None if fa != None: if self.verify_fit(v,fa[0]) == False: #compare trace with the fitted curve continue try: fb = em.fit_sine(tt,vv) except: self.msg(self.tr('Fit failed')) fb = None if fb != None: #if self.verify_fit(vv,fb[0]) == False: # continue self.data[0].append(fr) gain = abs(fb[1][0]) #/fa[1][0]) print(gain/float(self.uRes.text())) self.data[1].append((gain/float(self.uRes.text()))*1000) if self.gainMax < gain: self.gainMax = gain self.peakFreq = fr goodFit = True break self.FREQ += self.STEP #if goodFit == False: return if self.FREQ > self.FMAX: print ('Done') self.running = False self.history.append(self.data) self.traces.append(self.currentTrace) im = self.gainMax/self.Rload * 1000 self.msg(self.tr('completed')) return if self.index > 1: # Draw the line self.currentTrace.setData(self.data[0], self.data[1]) self.index += 1
def update(self): if self.Freeze.isChecked(): return try: if self.chanStatus[2] == 1 or self.chanStatus[3] == 1: # channel 3 or 4 selected self.timeData[0], self.voltData[0], \ self.timeData[1], self.voltData[1], \ self.timeData[2], self.voltData[2], \ self.timeData[3], self.voltData[3] = self.p.capture4(self.NP, self.TG) elif self.chanStatus[1] == 1: # channel 2 is selected self.timeData[0], self.voltData[0], \ self.timeData[1], self.voltData[1] = self.p.capture2(self.NP, self.TG) elif self.chanStatus[0] == 1: # only A1 selected self.timeData[0], self.voltData[0] = self.p.capture1('A1', self.NP, self.TG) except: self.comerr() return for ch in range(4): if self.chanStatus[ch] == 1: r = 16./self.rangeVals[ch] self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch] * r + 4*self.offValues[ch] ) if np.max(self.voltData[ch]) > self.rangeVals[ch]: self.msg(unicode(self.tr('%s input is clipped. Increase range')) %self.sources[ch]) if self.fitSelCB[ch].isChecked() == True: try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print('fit_sine error:', err) fa=None if fa != None: self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = abs(fa[1][0]) self.Frequency[ch] = fa[1][1]*1000 self.Phase[ch] = fa[1][2] * 180/em.pi s = unicode(self.tr('%5.2f V, %5.1f Hz')) %(self.Amplitude[ch],self.Frequency[ch]) self.fitResLab[ch].setText(s) else: self.fitResLab[ch].setText('') if self.Diff.isChecked() == True and self.chanStatus[0] == 1 and self.chanStatus[1] == 1: r = 16./self.rangeVals[0] self.diffTraceW.setData(self.timeData[0], r*(self.voltData[0]-self.voltData[1])) self.loopCounter += 1 if self.loopCounter % 5 == 0: for ch in range(3): if self.voltMeterCB[ch].isChecked() == True: try: v = self.p.get_voltage(self.sources[ch]) # Voltmeter functions except: self.comerr() self.voltMeters[ch].setText(unicode(self.tr('%5.3f V')) %(v)) else: self.voltMeters[ch].setText(self.tr('')) try: res = self.p.get_resistance() if res != np.Inf and res > 100 and res < 100000: self.RES.setText('<font color="blue">'+unicode(self.tr('%5.0f Ohm')) %(res)) else: self.RES.setText(self.tr('<100Ohm or >100k')) self.p.select_range('A1', self.rangeVals[0]) self.p.select_range('A2', self.rangeVals[1]) except: self.comerr()
def update(self): if self.Freeze.isChecked(): return try: if self.chanStatus[2] == 1 or self.chanStatus[ 3] == 1: # channel 3 or 4 selected self.timeData[0], self.voltData[0], \ self.timeData[1], self.voltData[1], \ self.timeData[2], self.voltData[2], \ self.timeData[3], self.voltData[3] = self.p.capture4(self.NP, self.TG) elif self.chanStatus[1] == 1: # channel 2 is selected self.timeData[0], self.voltData[0], \ self.timeData[1], self.voltData[1] = self.p.capture2(self.NP, self.TG) elif self.chanStatus[0] == 1: # only A1 selected self.timeData[0], self.voltData[0] = self.p.capture1( 'A1', self.NP, self.TG) except: self.comerr() return for ch in range(4): if self.chanStatus[ch] == 1: r = 16. / self.rangeVals[ch] self.traceWidget[ch].setData( self.timeData[ch], self.voltData[ch] * r + 4 * self.offValues[ch]) if np.max(self.voltData[ch]) > self.rangeVals[ch]: self.msg( unicode(self.tr('%s input is clipped. Increase range')) % self.sources[ch]) if self.fitSelCB[ch].isChecked() == True: try: fa = em.fit_sine(self.timeData[ch], self.voltData[ch]) except Exception as err: print('fit_sine error:', err) fa = None if fa != None: self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = abs(fa[1][0]) self.Frequency[ch] = fa[1][1] * 1000 self.Phase[ch] = fa[1][2] * 180 / em.pi s = unicode(self.tr('%5.2f V, %5.1f Hz')) % ( self.Amplitude[ch], self.Frequency[ch]) self.fitResLab[ch].setText(s) else: self.fitResLab[ch].setText('') if self.Diff.isChecked( ) == True and self.chanStatus[0] == 1 and self.chanStatus[1] == 1: r = 16. / self.rangeVals[0] self.diffTraceW.setData(self.timeData[0], r * (self.voltData[0] - self.voltData[1])) self.loopCounter += 1 if self.loopCounter % 5 == 0: for ch in range(3): if self.voltMeterCB[ch].isChecked() == True: try: v = self.p.get_voltage( self.sources[ch]) # Voltmeter functions except: self.comerr() self.voltMeters[ch].setText( unicode(self.tr('%5.3f V')) % (v)) else: self.voltMeters[ch].setText(self.tr('')) try: res = self.p.get_resistance() if res != np.Inf and res > 100 and res < 100000: self.RES.setText('<font color="blue">' + unicode(self.tr('%5.0f Ohm')) % (res)) else: self.RES.setText(self.tr('<100Ohm or >100k')) self.p.select_range('A1', self.rangeVals[0]) self.p.select_range('A2', self.rangeVals[1]) except: self.comerr()
def update(self): if self.running == False: return try: fr=self.p.set_sine(self.FREQ) except: self.comerr() return time.sleep(0.02) TG = 1.e6/self.FREQ/50 # 50 points per wave TG = int(TG)//2 * 2 if TG > 500: TG = 500 elif TG < 2: TG = 2 NP = 500 MAXTIME = 200000. # .2 seconds if NP * TG > MAXTIME: NP = int(MAXTIME/TG) if NP % 2: NP += 1 # make it an even number goodFit = False for k in range(3): # try 3 times try: t,v = self.p.capture1('MIC', NP, TG) except: self.comerr() return try: fa = em.fit_sine(t,v) except Exception as err: print('fit_sine error:', err) fa=None if fa != None: if self.verify_fit(v,fa[0]) == False: #compare trace with the fitted curve continue self.updateLabel.setText(unicode(self.tr('Frequency = %5.0f Hz V = %5.3f')) %(fr,abs(fa[1][0]))) self.data[0].append(fr) self.data[1].append(abs(fa[1][0])) goodFit = True break self.FREQ += self.STEP if goodFit == False: return if self.FREQ > self.FMAX: self.running = False elapsed = time.time() - self.startTime self.history.append(self.data) self.traces.append(self.currentTrace) try: self.p.set_sine(0) ss = '%5.1f'%elapsed self.msg(self.tr('Completed in ') + ss + self.tr(' Seconds')) except: self.comerr() return if self.index > 1: # Draw the line self.currentTrace.setData(self.data[0], self.data[1]) self.index += 1
def update(self): if self.running == False: return try: fr=self.p.set_sine(self.FREQ) except: self.comerr() return time.sleep(0.02) self.TG = 1.e6/self.FREQ/50 # 50 points per wave self.TG = int(self.TG)//2 * 2 NP = 500 MAXTIME = 200000. # .2 seconds if NP * self.TG > MAXTIME: NP = int(MAXTIME/self.TG) if NP % 2: NP += 1 # make it an even number ss = '%5.1f'%fr self.FreqLabel.setText(self.tr('Frequency = ') + ss + self.tr(' Hz')) if self.TG < self.MINDEL: self.TG = self.MINDEL elif self.TG > self.MAXDEL: self.TG = self.MAXDEL goodFit = False for k in range(3): # try 3 times try: t,v, tt,vv = self.p.capture2(NP, int(self.TG)) except: self.comerr() return try: fa = em.fit_sine(t,v) except: self.msg(self.tr('Fit failed')) fa = None if fa != None: if self.verify_fit(v,fa[0]) == False: #compare trace with the fitted curve continue try: fb = em.fit_sine(tt,vv) except: self.msg(self.tr('Fit failed')) fb = None if fb != None: if self.verify_fit(vv,fb[0]) == False: continue self.data[0].append(fr) gain = abs(fb[1][0]) #/fa[1][0]) self.data[1].append(gain) if self.gainMax < gain: self.gainMax = gain self.peakFreq = fr goodFit = True break self.FREQ += self.STEP #if goodFit == False: return if self.FREQ > self.FMAX: print ('Done') self.running = False self.history.append(self.data) self.traces.append(self.currentTrace) im = self.gainMax/self.Rload * 1000 self.msg(self.tr('completed')) return if self.index > 1: # Draw the line self.currentTrace.setData(self.data[0], self.data[1]) self.index += 1
def update(self): if self.p is None: return if not self.p.connected: self.comerr() return if self.voltmeter is not None: if self.voltmeter.isVisible() and self.voltmeter.type=='input' and self.voltmeter.autoRefresh: try: v = self.voltmeter.read() except Exception as e: self.comerr() return if v is not None: self.voltmeter.setValue(v) if self.Freeze.isChecked(): return try: if self.chanStatus[2] == 1 or self.chanStatus[3] == 1: # channel 3 or 4 selected self.timeData[0], self.voltData[0], \ self.timeData[1], self.voltData[1], \ self.timeData[2], self.voltData[2], \ self.timeData[3], self.voltData[3] = self.p.capture4(self.NP, self.TG,str(self.A1Map.currentText()), trigger=self.trigEnable.isChecked()) elif self.chanStatus[1] == 1: # channel 2 is selected self.timeData[0], self.voltData[0], \ self.timeData[1], self.voltData[1] = self.p.capture2(self.NP, self.TG,str(self.A1Map.currentText()), trigger=self.trigEnable.isChecked()) elif self.chanStatus[0] == 1: # only A1 selected self.timeData[0], self.voltData[0] = self.p.capture1(str(self.A1Map.currentText()), self.NP, self.TG, trigger=self.trigEnable.isChecked()) except: self.comerr() self.p.connected = False return for ch in range(4): if self.chanStatus[ch] == 1: r = 16./self.rangeVals[ch] self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch] * r + 4*self.offValues[ch] ) if np.max(self.voltData[ch]) > self.rangeVals[ch]: self.msg(unicode(self.tr('%s input is clipped. Increase range')) %self.sources[ch]) if self.fitSelCB[ch].isChecked() == True: try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print('fit_sine error:', err) fa=None if fa != None: self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = abs(fa[1][0]) self.Frequency[ch] = fa[1][1]*1000 self.Phase[ch] = fa[1][2] * 180/em.pi s = unicode(self.tr('%5.2f V, %5.1f Hz')) %(self.Amplitude[ch],self.Frequency[ch]) self.fitSelCB[ch].setText(s) else: self.fitSelCB[ch].setText('') if self.Diff.isChecked() == True and self.chanStatus[0] == 1 and self.chanStatus[1] == 1: r = 16./self.rangeVals[0] self.diffTraceW.setData(self.timeData[0], r*(self.voltData[0]-self.voltData[1])) else: self.diffTraceW.setData([0,0],[0,0]) if self.Cross.isChecked(): self.showVoltagesAtCursor(self.pwin.vLine.x()) else: for k in range(self.MAXRES): try:self.pwin.removeItem(self.resLabs[k]) except: pass ###PCS Monitoring in version 5+ if self.p.version_number >= 5.0: #Current source monitoring self.pcsVal.display(int(self.p.get_voltage('AN8')*1e3)) self.loopCounter += 1 if self.loopCounter % 5 == 0: for ch in range(3): if self.voltMeterCB[ch].isChecked() == True: try: v = self.p.get_voltage(self.sources[ch]) # Voltmeter functions except: self.comerr() self.voltMeterCB[ch].setText(unicode(self.tr('A%d %5.3f V')) %(ch+1,v)) else: self.voltMeterCB[ch].setText(self.tr('A%d'%(ch+1))) try: res = self.p.get_resistance() if res != np.Inf and res > 100 and res < 100000: self.RES.setText('Resistance: <font color="blue">'+unicode(self.tr('%5.0f Ohm')) %(res)) else: self.RES.setText(self.tr('Resistance: <100Ohm or >100k')) self.p.select_range('A1', self.rangeVals[0]) self.p.select_range('A2', self.rangeVals[1]) except: self.comerr()
def update(self): if self.Pause.isChecked() == True: return try: if self.VLC.isChecked() == True: self.timeData[0], self.voltData[0],\ self.timeData[1], self.voltData[1],\ self.timeData[2], self.voltData[2],\ self.timeData[3], self.voltData[3] = self.p.capture4(self.NP, self.TG) self.timeData[4] = self.timeData[0] self.voltData[3] = self.voltData[2] - self.voltData[0] # voltage across C self.voltData[4] = self.voltData[1] - self.voltData[2] # voltage across L self.voltData[2] = self.voltData[1] - self.voltData[0] # voltage across LC else: self.timeData[0], self.voltData[0],\ self.timeData[1], self.voltData[1] = self.p.capture2(self.NP, self.TG) self.timeData[2] = self.timeData[0] self.voltData[2] = self.voltData[0] - self.voltData[1] # voltage across LC except: self.comerr() return for ch in range(3): self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch]) try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print("fit_sine error:", err) if fa != None: self.traceWidgetF[ch].setData(self.timeData[ch], fa[0]) if self.verify_fit(self.voltData[ch], fa[0]) == False: return self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = (fa[1][0]) self.Frequency[ch] = fa[1][1]*1000 self.Phase[ch] = fa[1][2] * 180/em.pi self.fitFine[ch] = 1 else: self.msg(self.tr('Data Analysis Error')) return phaseDiff = (self.Phase[0] - self.Phase[1]) if self.VLC.isChecked() == True: for ch in range(3,5): self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch]) try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print("fit_sine error:", err) if fa != None: self.traceWidgetF[ch].setData(self.timeData[ch], fa[0]) if self.verify_fit(self.voltData[ch], fa[0]) == False: return self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = (fa[1][0]) self.Frequency[ch] = fa[1][1]*1000 self.Phase[ch] = fa[1][2] * 180/em.pi self.fitFine[ch] = 1 else: self.msg(self.tr('Data Analysis Error')) return for k in range(self.MAXRES): self.Results[k] = '' self.Results[0] = unicode(self.tr('Vtotal (A1) = %5.2f V')) %(self.Amplitude[0]) self.Results[1] = unicode(self.tr('Vr (A2) = %5.2f V')) %(self.Amplitude[1]) self.Results[2] = unicode(self.tr('Vlc (A2-A1) = %5.2f V')) %(self.Amplitude[2]) self.Results[5] = unicode(self.tr('F = %5.1f Hz')) %(self.Frequency[0]) self.Results[6] = unicode(self.tr('Phase Diff = %5.1f deg')) %phaseDiff if self.VLC.isChecked() == True: self.Results[3] = unicode(self.tr('Vc (A3-A1) = %5.2f V')) %(self.Amplitude[3]) self.Results[4] = unicode(self.tr('Vl (A2-A3) = %5.2f V')) %(self.Amplitude[4]) else: self.Results[3] = '' self.Results[4] = '' for k in range(5): self.pwin.removeItem(self.resLabs[k]) self.resLabs[k] = pg.TextItem(text=self.Results[k], color= self.resCols[k%5]) self.resLabs[k].setPos(0, -4 +0.3*k) self.pwin.addItem(self.resLabs[k]) for k in range(5,7): self.pwin.removeItem(self.resLabs[k]) self.resLabs[k] = pg.TextItem(text=self.Results[k], color= self.resCols[k%5]) self.resLabs[k].setPos(0, 4 -0.3*(k-5)) self.pwin.addItem(self.resLabs[k]) if self.fitFine[0] == 1 and self.fitFine[1] == 1 and self.fitFine[2] == 1: self.draw_phasor()
def update(self): if self.Pause.isChecked() == True: return try: if self.VLC.isChecked() == True: self.timeData[0], self.voltData[0],\ self.timeData[1], self.voltData[1],\ self.timeData[2], self.voltData[2],\ self.timeData[3], self.voltData[3] = self.p.capture4(self.NP, self.TG) self.timeData[4] = self.timeData[0] self.voltData[3] = self.voltData[2] - self.voltData[0] # voltage across C self.voltData[4] = self.voltData[1] - self.voltData[2] # voltage across L self.voltData[2] = self.voltData[1] - self.voltData[0] # voltage across LC else: self.timeData[0], self.voltData[0],\ self.timeData[1], self.voltData[1] = self.p.capture2(self.NP, self.TG) self.timeData[2] = self.timeData[0] self.voltData[2] = self.voltData[0] - self.voltData[1] # voltage across LC except: self.comerr() return for ch in range(3): self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch]) try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print("fit_sine error:", err) if fa != None: self.traceWidgetF[ch].setData(self.timeData[ch], fa[0]) if self.verify_fit(self.voltData[ch], fa[0]) == False: return self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = (fa[1][0]) self.Frequency[ch] = fa[1][1]*1000 self.Phase[ch] = fa[1][2] * 180/em.pi self.fitFine[ch] = 1 else: self.msg(self.tr('Data Analysis Error')) return phaseDiff = (self.Phase[0] - self.Phase[1]) if self.VLC.isChecked() == True: for ch in range(3,5): self.traceWidget[ch].setData(self.timeData[ch], self.voltData[ch]) try: fa = em.fit_sine(self.timeData[ch],self.voltData[ch]) except Exception as err: print("fit_sine error:", err) if fa != None: self.traceWidgetF[ch].setData(self.timeData[ch], fa[0]) if self.verify_fit(self.voltData[ch], fa[0]) == False: return self.voltDataFit[ch] = fa[0] self.Amplitude[ch] = (fa[1][0]) self.Frequency[ch] = fa[1][1]*1000 self.Phase[ch] = fa[1][2] * 180/em.pi self.fitFine[ch] = 1 else: self.msg(self.tr('Data Analysis Error')) return for k in range(self.MAXRES): self.Results[k] = '' self.Results[0] = unicode(self.tr('Vtotal (A1) = %5.2f V')) %(self.Amplitude[0]) self.Results[1] = unicode(self.tr('Vr (A2) = %5.2f V')) %(self.Amplitude[1]) self.Results[2] = unicode(self.tr('Vlc (A2-A1) = %5.2f V')) %(self.Amplitude[2]) self.Results[5] = unicode(self.tr('F = %5.1f Hz')) %(self.Frequency[0]) self.Results[6] = unicode(self.tr('Phase Diff = %5.1f deg')) %phaseDiff if self.VLC.isChecked() == True: self.Results[3] = unicode(self.tr('Vc (A3-A1) = %5.2f V')) %(self.Amplitude[3]) self.Results[4] = unicode(self.tr('Vl (A2-A3) = %5.2f V')) %(self.Amplitude[4]) else: self.Results[3] = '' self.Results[4] = '' for k in range(5): self.pwin.removeItem(self.resLabs[k]) self.resLabs[k] = pg.TextItem(text=self.Results[k], color= self.resCols[k%5]) self.resLabs[k].setPos(0, -4 +0.3*k) self.pwin.addItem(self.resLabs[k]) for k in range(5,7): self.pwin.removeItem(self.resLabs[k]) self.resLabs[k] = pg.TextItem(text=self.Results[k], color= self.resCols[k%5]) self.resLabs[k].setPos(0, 4 -0.3*(k-5)) self.pwin.addItem(self.resLabs[k]) if self.fitFine[0] == 1 and self.fitFine[1] == 1 and self.fitFine[2] == 1: self.draw_phasor()