diff options
Diffstat (limited to 'qolab/hardware')
-rw-r--r-- | qolab/hardware/rf_generator/__init__.py | 20 | ||||
-rw-r--r-- | qolab/hardware/rf_generator/agilent_e8257d.py | 57 |
2 files changed, 77 insertions, 0 deletions
diff --git a/qolab/hardware/rf_generator/__init__.py b/qolab/hardware/rf_generator/__init__.py new file mode 100644 index 0000000..a82c1a0 --- /dev/null +++ b/qolab/hardware/rf_generator/__init__.py @@ -0,0 +1,20 @@ +from qolab.hardware.scpi import SCPIinstr + +class RFGenerator: + # Minimal set of methods to be implemented. + pass + +class RFGeneratorSCPI(SCPIinstr, RFGenerator): + """ + Do not instantiate directly, use + rm = pyvisa.ResourceManager() + ScopeSCPI(rm.open_resource('TCPIP::192.168.0.2::INSTR')) + """ + pass + def __init__(self, resource): + SCPIinstr.__init__(self, resource) + RFGenerator.__init__(self) + +from .agilent_e8257d import AgilentE8257D + + diff --git a/qolab/hardware/rf_generator/agilent_e8257d.py b/qolab/hardware/rf_generator/agilent_e8257d.py new file mode 100644 index 0000000..eef3c7a --- /dev/null +++ b/qolab/hardware/rf_generator/agilent_e8257d.py @@ -0,0 +1,57 @@ +from qolab.hardware.rf_generator import RFGeneratorSCPI +from qolab.data.trace import Trace +import re +import numpy as np + +class AgilentE8257D(RFGeneratorSCPI): + """ Agilent E8257D RF generator """ + def __init__(self, resource): + super().__init__(resource) + self.resource.read_termination='\n' + + """ Note: Fixed frequency and Center frequency (of sweep) are different in this model """ + + def getFreq(self): + qstr = f':FREQuency:Fixed?' + rstr = self.query(qstr) + return( float(rstr) ) + + def setFreq(self, freq): + cstr = f':FREQuency:FIXED {freq}Hz' + self.write(cstr) + + def getSweepCentralFreq(self): + qstr = f':FREQuency:CENTer?' + rstr = self.query(qstr) + return( float(rstr) ) + + def setSweepCentralFreq(self, cfreq): + cstr = f':FREQuency:CENTer {cfreq}Hz' + self.write(cstr) + + def getSweepSpan(self): + qstr = f':FREQuency:SPAN?' + rstr = self.query(qstr) + return( float(rstr) ) + + def setSweepSpan(self, span): + cstr = f':FREQuency:SPAN {span}Hz' + self.write(cstr) + + def setSweep(self, cfreq=None, span=None): + if cfreq is not None: + self.setSweepCentralFreq(cfreq) + if cfreq is not None: + self.setSweepSpan(span) + +if __name__ == '__main__': + import pyvisa + print("testing") + rm = pyvisa.ResourceManager() + print(rm.list_resources()) + instr=rm.open_resource('TCPIP::192.168.0.114::INSTR') + rfgen = AgilentE8257D(instr) + print(f'Fixed frequency: {rfgen.getFreq()}') + print(f'Sweep Central frequency: {rfgen.getSweepCentralFreq()}') + print(f'Sweep Span: {rfgen.getSweepSpan()}') + |