Ejemplo n.º 1
0
    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('')
Ejemplo n.º 2
0
    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'))
Ejemplo n.º 3
0
	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('')
Ejemplo n.º 4
0
	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'))
Ejemplo n.º 5
0
    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'))
Ejemplo n.º 6
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)
        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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
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
Ejemplo n.º 9
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)	
		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
Ejemplo n.º 10
0
	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()
Ejemplo n.º 11
0
    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()
Ejemplo n.º 12
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
Ejemplo n.º 13
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)	
		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
Ejemplo n.º 14
0
	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()
Ejemplo n.º 15
0
	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()
Ejemplo n.º 16
0
	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()