Source code for instruments.srs.srs345

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Provides support for the SRS 345 function generator.
"""

# IMPORTS #####################################################################

from __future__ import absolute_import
from __future__ import division

from enum import IntEnum

import quantities as pq

from instruments.abstract_instruments import FunctionGenerator
from instruments.generic_scpi import SCPIInstrument
from instruments.util_fns import enum_property, unitful_property

# CLASSES #####################################################################


[docs]class SRS345(SCPIInstrument, FunctionGenerator): """ The SRS DS345 is a 30MHz function generator. Example usage: >>> import instruments as ik >>> import quantities as pq >>> srs = ik.srs.SRS345.open_gpib('/dev/ttyUSB0', 1) >>> srs.frequency = 1 * pq.MHz >>> print(srs.offset) >>> srs.function = srs.Function.triangle """ # FIXME: need to add OUTX 1 here, but doing so seems to cause a syntax # error on the instrument. # CONSTANTS # _UNIT_MNEMONICS = { FunctionGenerator.VoltageMode.peak_to_peak: "VP", FunctionGenerator.VoltageMode.rms: "VR", FunctionGenerator.VoltageMode.dBm: "DB", } _MNEMONIC_UNITS = dict((mnem, unit) for unit, mnem in _UNIT_MNEMONICS.items()) # FunctionGenerator CONTRACT # def _get_amplitude_(self): resp = self.query("AMPL?").strip() return ( float(resp[:-2]), self._MNEMONIC_UNITS[resp[-2:]] ) def _set_amplitude_(self, magnitude, units): self.sendcmd( "AMPL {}{}".format(magnitude, self._UNIT_MNEMONICS[units])) # ENUMS ##
[docs] class Function(IntEnum): """ Enum containing valid output function modes for the SRS 345 """ sinusoid = 0 square = 1 triangle = 2 ramp = 3 noise = 4 arbitrary = 5
# PROPERTIES ## frequency = unitful_property( command="FREQ", units=pq.Hz, doc=""" Gets/sets the output frequency. :units: As specified, or assumed to be :math:`\\text{Hz}` otherwise. :type: `float` or `~quantities.quantity.Quantity` """ ) function = enum_property( command="FUNC", enum=Function, input_decoration=int, doc=""" Gets/sets the output function of the function generator. :type: `~SRS345.Function` """ ) offset = unitful_property( command="OFFS", units=pq.volt, doc=""" Gets/sets the offset voltage for the output waveform. :units: As specified, or assumed to be :math:`\\text{V}` otherwise. :type: `float` or `~quantities.quantity.Quantity` """ ) phase = unitful_property( command="PHSE", units=pq.degree, doc=""" Gets/sets the phase for the output waveform. :units: As specified, or assumed to be degrees (:math:`{}^{\\circ}`) otherwise. :type: `float` or `~quantities.quantity.Quantity` """ )