diff --git a/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.ini b/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.ini index 8d8a29205aa50bc425bcc779b2ffca55064e8d7e..acf4f58d1a3966001120a43e7f6e8e5678f86e69 100644 --- a/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.ini +++ b/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.ini @@ -6,7 +6,7 @@ name: Agilent Network Analyzer # The version string should be updated whenever changes are made to this config file -version: 1.0 +version: 1.1.0 # Name of folder containing the code defining a custom driver. Do not define this item # or leave it blank for any standard driver based on the built-in VISA interface. diff --git a/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.py b/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.py index 6f0da020c5080d3d8fb5153dee77ab4be6353037..1d19371a62ee4a47997ac1f387e2b2347b937314 100644 --- a/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.py +++ b/Agilent_NetworkAnalyzer/Agilent_NetworkAnalyzer.py @@ -2,8 +2,9 @@ from VISA_Driver import VISA_Driver import numpy as np +import time -__version__ = "0.0.1" +__version__ = "0.1.0" class Error(Exception): pass @@ -104,30 +105,31 @@ class Driver(VISA_Driver): # if not in continous mode, trig from computer bWaitTrace = self.getValue('Wait for new trace') bAverage = self.getValue('Average') + duration = (float(self.askAndLog("SENS:SWE:TIME?")) + * (self.getValue('# of averages') if bAverage else 1)) # wait for trace, either in averaging or normal mode if bWaitTrace: + self.writeAndLog(':ABOR;:TRIG:SOUR BUS;:INIT:CONT OFF;:INIT:IMM;') if bAverage: - # set channels 1-4 to set event when average complete (bit 1 start) - self.writeAndLog(':SENS:AVER:CLE;:STAT:OPER:AVER1:ENAB 30;:ABOR;:SENS:AVER:CLE;') - else: - self.writeAndLog(':ABOR;:INIT:CONT OFF;:INIT:IMM;') - self.writeAndLog('*OPC') + self.writeAndLog(':TRIG:AVER ON') + self.writeAndLog(':TRIG:SING;') + self.writeAndLog('*OPC') # wait some time before first check self.wait(0.03) bDone = False + start_time = time.time() + while (not bDone) and (not self.isStopped()): # check if done - if bAverage: - sAverage = self.askAndLog('STAT:OPER:AVER1:COND?') - bDone = int(sAverage)>0 - else: - stb = int(self.askAndLog('*ESR?')) - bDone = (stb & 1) > 0 + stb = int(self.askAndLog('*ESR?')) + bDone = (stb & 1) > 0 if not bDone: + #report progress + self.reportProgress((time.time()-start_time)/duration) self.wait(0.1) # if stopped, don't get data if self.isStopped(): - self.writeAndLog('*CLS;:INIT:CONT ON;') + self.writeAndLog('*CLS;:TRIG:SOUR INT;:TRIG:AVER OFF;:ABOR;') return [] # get data as float32, convert to numpy array if self.getModel() in ('E5071C',): @@ -137,8 +139,9 @@ class Driver(VISA_Driver): # old parameter handing self.write(':FORM REAL,32;CALC:DATA? SDATA', bCheckError=False) sData = self.read(ignore_termination=True) - if bWaitTrace and not bAverage: - self.writeAndLog(':INIT:CONT ON;') + if bWaitTrace: + self.writeAndLog(':TRIG:SOUR INT;:TRIG:AVER OFF;:ABOR;') + # strip header to find # of points i0 = sData.find(b'#') nDig = int(sData[i0+1:i0+2])